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();
}
}
}

最新文章

  1. [转]How to override HandleUnauthorizedRequest in ASP.NET Core
  2. 【转】 Nginx深入详解之多进程网络模型
  3. 使用Innosetup制作安装包的一些技巧
  4. 维翔主机asp主机使用遇到的问题及解决方案总结
  5. mvc5 _ViewStart.cshtml 模板页如何定义
  6. Tomcat安装、配置、优化及负载均衡详解
  7. 子网/ip/子网掩码
  8. eclipse 中的maven操作
  9. 逻辑关系下的NN应用
  10. leetcode 001 Two Sun
  11. 记录maven的一些命令
  12. 字典 (dict) 的增删改查及其他方法
  13. Linux JDK Tomcat Nginx MariaDB 安装,Nginx 多域名转发配置
  14. 3728 联合权值[NOIP 2014 Day1 T2]
  15. 模仿Semaphore自定义自己的 信号量
  16. CRT和EXCRT简单学习笔记
  17. Python小白学习之路(九)—【字符串格式化】【百分号方式】【format方式】
  18. express框架结合ejs模板引擎使用
  19. MIT-6.828-JOS-环境搭建
  20. 修改net基本三层 动软生产

热门文章

  1. 595. Big Countries --- SQL related from leetcode
  2. 如何运用kali-xplico网络取证分析?点开看看吧
  3. HTTP 协议支持的十种方法
  4. [Swift]扩展UIImage :获取图片指定像素的颜色值
  5. Ubuntu下几个命令行方式使用的图片浏览工具
  6. Tools - UML
  7. javascript实现二分法
  8. oracle中常见的对表、表空间和视图的操作
  9. app操作的一些命令
  10. Java排序方法sort的使用详解(转)