利用 Conditional 属性,程序员可以定义条件方法。Conditional 属性通过测试条件编译符号来确定适用的条件。当运行到一个条件方法调用时,是否执行该调用,要根据出现该调用时是否已定义了此符号来确定。如果定义了此符号,则执行该调用;否则省略该调用(包括对调用的参数的计算)。
条件方法要受到以下限制:
- 条件方法必须是类声明或结构声明中的方法。如果在接口声明中的方法上指定
Conditional
属性,将出现编译时错误。 - 条件方法必须具有
void
返回类型。 - 不能用
override
修饰符标记条件方法。但是,可以用virtual
修饰符标记条件方法。此类方法的重写方法隐含为有条件的方法,而且不能用Conditional
属性显式标记。 - 条件方法不能是接口方法的实现。否则将发生编译时错误。
- 如果条件方法用在“委托创建表达式”中,也会发生编译时错误
Ps.尽量使用Conditional属性代替#if和#endif
/*MyConditional.cs*///#define DEBUG
using System;
using System.Diagnostics;
class Info
{//[Conditional("DEBUG")]public static void Trace(string strMessage){Console.WriteLine(strMessage);}[Conditional("DEBUG")]public static void TraceX(string strFormat,params object[] list){Console.WriteLine(strFormat, list);}
}class TestConditional
{public static void Main(){Info.Trace("Cool!");Info.TraceX("{0} {1} {2}","C", "U", 2001);}
}/*
编译方式1:
csc /define:DEBUG /out:1.exe MyConditional.cs运行结果1:
Cool!
C U 2001
*//*
编译方式2:
csc /out:1.exe MyConditional.cs运行结果2:
Cool!
*/