Attribute
Attribute是一种扩展机制,它可以为代码元素添加自定义的信息
Assembly,类型、成员、返回值、参数、泛型参数
一个很好的应用场景就是序列化
把任意一个对象转化为特定的格式/从特性格式转化过来
Attribute Class
一个Attribute是通过一个(直接或间接)继承了System.Attribute的类来定义的
把Attribute应用于代码元素:
[ObsoleteAttribute]
public class Foo {..}
按约定,所有的Attribute都应该以Attribute这个单词结尾。C#会识别这个后缀,并且允许你在附加Attribute的时候或略这个后缀
[Obsolete]
public class Foo{..}
命名和位置Attribute参数
Attribute可以有参数
[XmlElement("Customer",Namespace="http:..oreilly.com")]
public class CustomerEntity {..}
Attribute的参数可以分为两类:位置和命名的
位置参数对应Attribute类型的公共构造函数的参数
命名参数对应Attribute类型的公共字段或公共属性
当指定Attribute的时候,必须包含与Attribute相应构造函数所对应的位置参数,而命名参数是可选的
Attribute的目标
没明确指定的情况下,Attribute的目标就是紧随它的代码元素,通常是一个类型或类型的成员。
也可以把Attribute附加到一个Assembly,,这就需要显示执行Attribute的目标
[assembly:CLSCompliant(true)]
指定多个Attribute
对一个代码元素可以指定多个Attribute。每个Attribute可以列在同一个中括号内(使用逗号分开),可以独占一个中括号。
[Serializable,Obsolete,CLSCompliant(false)]
public class Bar{..}
[Serializable][Obsolete][CLSCompliant(false)]
public class Bar{..}
[Serializable,Obsolete]
[CLSCompliant(false)]
public class Bar{..}