特性(Attribute)
CRE:特性就是给类或者类成员添加的附加信息。可以看作元数据注释。
CRE:特性本质上也是一个类,它继承自Attribute类,并且必须以”Attribute”结尾。使用时忽略”Attribute”后缀。
- 示例
[Obsolete]
已过时。
[Serialize]
这个类可序列化。
[Conditional()]
只有特定条件(预编译指令)下才生效。
自定义特性
自定义特性允许把自定义元数据与程序元素关联起来,这些元数据是在编译过程中创建的,并嵌入到程序集中。
这些元数据在文档说明中非常有用,但是,使自定义特性非常强大的因素是使用反射,代码可以读取这些元数据,使用它们在运行期间做出决策。也就是说,自定义特性可以直接影响代码运行方式。
编写自定义特性
当C#编译器发现一个属性应用了一个特性时,首先会把字符串”Attribute”追加到这个名称后面,形成一个组合名称,然后在其搜索路径的所有命名空间搜索指定名称的类。
AttributeUsage
特性
特性本身可用一个特性–System.AttributeUsage
特性来标记。他只能应用到其他特性上,不能应用到类上。它主要用于标识自定义特性可以应用到哪些类型的程序元素上。
[AttributeUsage(
AttributeTargets.Property,
AllowMultiple = false,//一个特性是否可以多次应用到同一项
Inherited = false//是否自动应用到派生类和接口上
)]
public class FooAttribute: Attribute
{
//...
}
(END)