C#特性:ConditionalAttribute

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 */

 

ConditionalAttribute和#if #endif预处理命令:

上述代码也可以以另一种写法实现,如下:

 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 #if Li
14             ToolKit.FuncA();
15             ToolKit.FuncB();
16 #endif
17 
18             Console.ReadKey();
19         }
20     }
21 }

 

转载于:https://www.cnblogs.com/chenyanbiao/p/9258607.html

你可能感兴趣的:(C#特性:ConditionalAttribute)