特性(Attribute)可应用于类、字段、属性、方法以及程序集或模块,用来给它们提供一些附加的声明性信息。特性可用于运行时,也可用于设计时。你可以把它理解为对类、字段、属性、方法等进行的批注或解说,在编译有特性的程序时编译器会读取这个特性,然后根据特性去进行编译 。
特性
1)功能性信息:如[Serializable]加在类前表示该类可被串行化。
[Serializable]
public class HumanProperty
2)提示性信息:如[Obsolete]表示该方法已经过时,提醒程序员使用新的替代函数。
[Obsolete("Use another method : Average(), instead!", true)]
public virtual void CalcAverage(int speed)
3)限定性信息:如[Conditional("DEBUG")]表示下面的方法只有在调试模式下才有效。
[Conditional("DEBUG")]
public void UnitTest()
4)描述性信息:如[Description]对所指对象进行详细描述。
原理
Attribute 本质上就是一个类,它在所附着的目标对象上最终实例化,与ConditionalAttribute 相关的是一组C# 宏,它们看起来与C的宏别无二致,位置必须出现在所有C# 代码之前。顾名思义,ConditionalAttribute 是用来判断条件的,凡被ConditionalAttribute (或Conditional)“附着”了的方法,只有满足了条件才会执行。
[被编译器编译进程序集的元数据里,运行时,从元数据里提取这些附加信息来决策程序的执行]