CLR笔记:17.自定义属性2011-10-26 博客园 包建强自定义属性,使用声明式编程的方式,HTML也是属于这种编程方式。17.1 使用自定义属性只是将一些附加信息与某个目标元素关联起来。编译器在托管模块的元数据中生成额外的信息。从System.Attribute派生,所有符合CLS的属性都是从这个基类派生。有定位参数和命名参数两种,前者必须指定。可以将多个属性应用于单个目标元素,用逗号分割。17.2 定义自己的属性属性类标准写法: [AttributeUsage(AttributeTargets.Enum, Inherited = true, AllowMultiple = false)]
public class FlagAttribute : System.Attribute { public FlagAttribute() { } }
注意:1.属性就是类的一个实例,因此属性类至少要有一个公共构造器。如果class没有ctor,就生成 默认ctor,所以也可以编译通过。2.这个类不要提供任何公共方法/事件3.FlagAttribute使用的时候,可以简写为[Flag]4.AttributeTarget枚举,限定属性的应用范围,上面程序说明Flag只能用于Enum类型; AttributeTarget.All表示适用于所有类型。5.AllowMultiple指出是否可以将属性多次应用于单个目标:大部分属性只能使用一次,如以下代码会编译出错,因为没有任何意义:
[Flag] [Flag] public enum Color { Red }
少数属性有必要将属性多次应用于单个目标,如Conditional属性类(见17.7)