利用定制attribute,可以声明性地为自己的代码构造添加注解,从而实现一些特殊功能。定制attribute允许将定义的信息应用于几乎每一个元数据表记录项。这种可扩展的元数据信息能在运行时查询,从而动态改变代码的执行方式。
attribute可应用于类型和成员。为类型和方法创建和应用用户自定义的attribute会带来极大的便利,但它同时要求编译器理解这些attribute,这样才能在最终的元数据中生成attribute信息。由于编译厂商一般不会发布其编译产品的源代码,所以Microsoft采取另一种机制提供对用户自定义的attribute的支持。这个机制称为定制attribute.它的功能很强大,在应用程序的设计时和运行时都能发挥重要的作用。任何人都能定义和使用定制attribute。另外,设计面向CLR的所有编译器时,都要求必须识别定制attribute,并能在最终的元数据中生成它们。
关于自定义attribute,首先应该知道的是,它们只是将一些附加信息与某个目标元素关联起来的方式。编译器在托管模块的元数据中生成这些额外的信息。大多数attribute对编译器来说没有意义,编译器只是在源代码中检测attribute,并生成对应的元数据。
在C#中,为了将一个定制attribute应用于一个目标元素,需要将attribute放置于目标元素前面的一对方括号中。每种编程语言都定义了将一个定制attribute应用于目标元素时采用的语法。C#只许将attribute应用于对以下任何一个目标元素进行定义的源代码:程序集、模块、类型(类、结构、枚举、接口、委托)、字段、方法(含构造器)、方法参数、方法返回值、属性(Property)、事件和泛型类型参数。