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