Welcome

首页 / 软件开发 / .NET编程技术 / CLR笔记:17.自定义属性

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)