zhouqijie

特性(Attribute)

CRE:特性就是给类或者类成员添加的附加信息。可以看作元数据注释。
CRE:特性本质上也是一个类,它继承自Attribute类,并且必须以”Attribute”结尾。使用时忽略”Attribute”后缀。

[Obsolete]已过时。
[Serialize]这个类可序列化。
[Conditional()]只有特定条件(预编译指令)下才生效。

自定义特性

自定义特性允许把自定义元数据与程序元素关联起来,这些元数据是在编译过程中创建的,并嵌入到程序集中。

这些元数据在文档说明中非常有用,但是,使自定义特性非常强大的因素是使用反射,代码可以读取这些元数据,使用它们在运行期间做出决策。也就是说,自定义特性可以直接影响代码运行方式。

编写自定义特性

当C#编译器发现一个属性应用了一个特性时,首先会把字符串”Attribute”追加到这个名称后面,形成一个组合名称,然后在其搜索路径的所有命名空间搜索指定名称的类。

特性本身可用一个特性–System.AttributeUsage特性来标记。他只能应用到其他特性上,不能应用到类上。它主要用于标识自定义特性可以应用到哪些类型的程序元素上。

[AttributeUsage(
    AttributeTargets.Property,
    AllowMultiple = false,//一个特性是否可以多次应用到同一项
    Inherited = false//是否自动应用到派生类和接口上  
)]
public class FooAttribute: Attribute
{
    //...
}

(END)