在我的程序中,我有创建日志的功能。在函数内部,我检查变量是否为真以继续其工作。
private void log(string text)
{
if(LOGGING_ENABLED)
logtextbox.Text = text;
}
有没有办法禁用外部函数,而不使用函数或参数中的任何if
来禁用程序中所有出现的函数。
答案 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: