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