C#特性(Attribute)
.Net框架提供了三种预定义特性:attributeUsage、Conditional、obsolete。
预定义特性AttributeUsage:预定义特性attributeusage描述了如何使用一个自定义特性类,它规定了特性可应用到的项目的类型。
Conditional
这个预定义特性标记了一个条件方法,其执行依赖于指定的预处理标识符。它会引起方法调用的条件编译,取决于指定的值,比如Debug或Trace.例如,当调试代码时显示变量的值。
规定该特性的语法如下:
Obsolete
这个预定义特性标记了不应被使用的程序实体。它可以让您通知编译器丢弃某个特定的目标元素。例如,当一个新方法被用在一个类中,但是您仍然想要保持类中的旧方法,您可以通过显示一个应该使用新方法,而不是旧方法的消息,来把它标记为 obsolete(过时的)。
参数message,是一个字符串,描述项目为什么过时的原因以及该替代是用什么。
参数iserror,是一个布尔值。如果该值为true,编译器应把该项目的使用当做一个错误,默认值的false(编译器生成一个警告)。
创建自定义特性(Attribute)
.Net框架允许创建自定义特性,用于存储声明性信息,且可在运行时被检索,该信息根据设计标准和程序需要,可与任何目标元素相关。
创建并使用自定义特性包含四个步骤:
声明自定义特性、构建自定义特性、在目标程序元素上应用自定义特性、通过反射访问自定义特性。
声明自定义特性:
一个新的自定义特性应派生自System.Attribute类。例如:
构建自定义
C#中利用Conditional定义条件方法
利用conditional属性,程序员可以定义条件方法。conditional属性通过测试条件编译符号来确定适用的条件。当运行到一个条件方法调用时,是否执行该调用,要根据出现该调用时是否已定义了此符号来确定。如果定义了此符号,则执行该调用;否则省略该调用(包括对调用的参数的计算)。使用Conditional是封闭#if和#endif内部方法的替代方法,它更整洁、更别致、减少了出错的机会。
条件方法要受到以下限制:
条件方法必须是类声明或结构声明中的方法。如果在接口声明中的方法指定Conditional属性,将出现编译时错误。
条件方法必须具有返回类型。
不能用override修饰符标记条件方法。但是可以用virtual修饰符标记条件方法。此类方法的重写方法隐含为有条件的方法,而且不能用Conditional属性显式标记。
条件方法不能是接口方法的实现。否则将发生编译时错误。
如果条件方法用在委托创建表达式中,也会发生编译时错误。
这里需要注意的是:如果创建一个没有定义任何条件的方法,那么默认只要调用就总是会执行此方法,如果你想通过条件判断来执行,那么该方法上必须至少包含一个conditional特性所包含的条件,他才会响应你定义的条件。
原文链接:https://blog.csdn.net/sggggr/article/details/79655977