ConditionalAttribute类
msdn解释:
指示编译器应忽略方法调用或属性,除非已定义指定的条件编译符号。
命名空间:
System.Diagnostics
语法:
// // 摘要: // 指示编译器,除非定义了指定的有条件编译符号,否则,应忽略方法调用或属性。 [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = true)]
[ComVisible(true)] public sealed class ConditionalAttribute : Attribute
备注:
1 可以将ConditionalAttribute特性应用于方法和类。但是,仅当类型派生自Attribute时,对类使用此特性才有效。如果将ConditionalAttribute应用于任何其它类型,它将被忽略或产生编辑器警告或错误消息。 2 在将ConditionalAttribute应用于方法时,会指示编译器:如果未定义与ConditionalAttribute关联的条件编译符号,则不应将对此方法的调用编译为Microsoft中间语言(MSIL)。
错误示例1:将ConditionalAttribute应用于类
1 [Conditional("DEBUG")] 2 public class ToolKit { }
提示错误信息如下:
特性“Conditional”仅对方法或特性类有效
错误示例2:将ConditionalAttribute应用于属性
2 public class ToolKit 3 { 4 [Conditional("DEBUG")] 5 public string Name { get { return "123"; } } 6 }
提示错误信息如下:
特性“Conditional”对此声明类型无效。它仅对“类, 方法”声明有效。
正确示例1:将ConditionalAttribute应用于特性类
1 [Conditional("DEBUG")] 2 public class ToolKit : Attribute { }
正确示例2:将ConditionalAttribute应用于方法
1 public class ToolKit : Attribute 2 { 3 [Conditional("Li")] 4 [Conditional("Buged")] 5 public static void FuncA() 6 { 7 Console.WriteLine("Created by Li, Buged"); 8 } 9 10 [Conditional("Zhang"), Conditional("NoBug")] 11 public static void FuncB() 12 { 13 Console.WriteLine("Created by Zhang, NoBug"); 14 } 15 }
ConditionalAttribute的应用:
1 public class ToolKit 2 { 3 [Conditional("Li")] 4 [Conditional("Buged")] 5 public static void FuncA() 6 { 7 Console.WriteLine("Created by Li, Buged"); 8 } 9 10 [Conditional("Zhang"), Conditional("NoBug")] 11 public static void FuncB() 12 { 13 Console.WriteLine("Created by Zhang, NoBug"); 14 } 15 }
1 //C#宏定义,定义在所有代码前 2 #define Li 3 //#define Zhang 4 5 using System; 6 7 namespace AopProject.Client 8 { 9 class Program 10 { 11 static void Main(string[] args) 12 { 13 ToolKit.FuncA(); 14 ToolKit.FuncB(); 15 16 Console.ReadKey(); 17 } 18 } 19 } 20 21 /* 22 结果为: 23 Created by Li,Buged 24 */