是否可以在C#中禁用一个函数

时间:2011-09-03 12:39:37

标签: c# function

在我的程序中,我有创建日志的功能。在函数内部,我检查变量是否为真以继续其工作。

private void log(string text)
{
    if(LOGGING_ENABLED)
        logtextbox.Text = text;
}

有没有办法禁用外部函数,而不使用函数或参数中的任何if来禁用程序中所有出现的函数。

6 个答案:

答案 0 :(得分:10)

您可以使用ConditionalAttribute。根据条件是否已定义,编译出具有此属性的方法的调用。例如:

[Conditional("DEBUG")]
private void log(string text){
   logtextbox.Text = text;
}

调用此方法将显示在调试模式下,但不会在发布模式下的代码中,因为DEBUG条件仅在调试模式下定义。

编辑:回答您的一些问题,我建议您查看API Reference page。它有一些非常简单的例子和​​解释,说明如何使用属性及其效果。

答案 1 :(得分:3)

你可以像这样使用条件编译:

private void log(string text)
{
  #if DEBUG
    logtextbox.Text = text;
  #endif
}

使用它,您的日志方法只会记录在Visual Studio中以DEBUG模式编译项目时的工作。

答案 2 :(得分:3)

禁用方法甚至被调用的唯一方法是使用预处理器指令,正如其他人所提到的那样。您也可以使用以下属性执行此操作:

[Conditional("DEBUG")]
private void log(string text)
{
    logtextbox.Text = text;
}

答案 3 :(得分:2)

如果仅将其用于调试目的,则可以在函数顶部使用[ConditionalAttribute("DEBUG")]属性,或者可以使用#if/#endif预编译的dirrectives对代码进行签名,该代码仅在指定的条件签署之前运行汇编。例如,要从发布版本中完全删除该函数,您可以执行类似这样的操作。

#if DEBUG
private void log(string text)
{
    if(LOGGING_ENABLED)
        logtextbox.Text = text;
}
#endif

要注意的是,在这种情况下,必须将相同的#if/#endif应用于此方法的所有调用。

答案 4 :(得分:1)

实际上你的例子有点简单,因为你想要禁用日志到用户界面,这可能是该表单的本地而不是应用程序范围。

通常使用日志引擎,例如NLog和Log4Net或其他任何一个使用配置来控制执行日志记录的次数和方式。

例如,有一个日志级别的概念,如果你为FATAL设置它只记录致命错误,如果你将它设置为ALL,则记录所有内容,包括信息和详细日志。

这些框架在pp.config或web.config文件中也有可配置的appender,因此您可以根据需要添加或禁用某些appender(如RollingFile appender,SMTPAppender,EventLogAppender等等)。

答案 5 :(得分:0)

您可以抛出NotSupportedException,将其标记为Obsolete并使用EditorBrowsable: