这个指令有时候也称为条件编译。以前我们都是通过#if….#else … #endif这样的语句结构,总的来说比较繁琐。现在可以直接在被调用方法之上标记Conditional。这样,调用方的代码是不变的,编译的时候自动决定是否要编译调用语句。请看下面的例子
http://msdn.microsoft.com/zh-cn/library/4xssyw96.aspx
#define TRACE_ON using System; using System.Diagnostics; public class Trace { [Conditional("TRACE_ON")] public static void Msg(string msg) { Console.WriteLine(msg); } } public class ProgramClass { static void Main() { Trace.Msg("Now in Main..."); Console.WriteLine("Done."); } }
关于这个Attribute的详细资料如下
http://msdn.microsoft.com/zh-cn/library/system.diagnostics.conditionalattribute.aspx
重点:它可用于方法和类(在.NET 2.0之前,它只可以用于方法),但是类型必须是派生自Attribute的。
Conditional 属性还可被应用于属性类定义。在本例中,仅当定义了 DEBUG 时,自定义属性 Documentation 才向元数据添加信息。
C#
[Conditional("DEBUG")] public class Documentation : System.Attribute { string text; public Documentation(string text) { this.text = text; } } class SampleClass { // This attribute will only be included if DEBUG is defined. [Documentation("This method displays an integer.")] static void DoWork(int i) { System.Console.WriteLine(i.ToString()); } }