Attribute

Attribute是一种扩展机制,它可以为代码元素添加自定义的信息
Assembly,类型、成员、返回值、参数、泛型参数
一个很好的应用场景就是序列化
把任意一个对象转化为特定的格式/从特性格式转化过来

Attribute Class

一个Attribute是通过一个(直接或间接)继承了System.Attribute的类来定义的
把Attribute应用于代码元素:

  1. [ObsoleteAttribute]
  2. public class Foo {..}

按约定,所有的Attribute都应该以Attribute这个单词结尾。C#会识别这个后缀,并且允许你在附加Attribute的时候或略这个后缀

  1. [Obsolete]
  2. public class Foo{..}

命名和位置Attribute参数

Attribute可以有参数

  1. [XmlElement("Customer",Namespace="http:..oreilly.com")]
  2. public class CustomerEntity {..}

Attribute的参数可以分为两类:位置和命名的
位置参数对应Attribute类型的公共构造函数的参数
命名参数对应Attribute类型的公共字段或公共属性
当指定Attribute的时候,必须包含与Attribute相应构造函数所对应的位置参数,而命名参数是可选的

Attribute的目标

没明确指定的情况下,Attribute的目标就是紧随它的代码元素,通常是一个类型或类型的成员。
也可以把Attribute附加到一个Assembly,,这就需要显示执行Attribute的目标

  1. [assembly:CLSCompliant(true)]

指定多个Attribute

对一个代码元素可以指定多个Attribute。每个Attribute可以列在同一个中括号内(使用逗号分开),可以独占一个中括号。

  1. [Serializable,Obsolete,CLSCompliant(false)]
  2. public class Bar{..}
  3. [Serializable][Obsolete][CLSCompliant(false)]
  4. public class Bar{..}
  5. [Serializable,Obsolete]
  6. [CLSCompliant(false)]
  7. public class Bar{..}