Attribute的实例化
1. 不使用new操作符来产生实例,而是使用在方括号里调用构造函数的来产生实例。
2. 方括号必需紧挨着放置在被附着目标的前面。
3. 因为方括号里空间有限,不能像使用new那样先构造对象后再对对象的属性(Property)一一赋值。因此,对Attribute实例的属性的赋值也都挤在了构造函数的圆括号里
值得注意的是:
1. 构造函数的参数是一定要写的——有几个就得写几个——因为你不写的话实例就无法构造出来。
2. 构造函数参数的顺序不能错,这个很容易理解——调用任何一个函数你都不能改变参数的顺序——除非它有相应的重载(Overload)。因为这个顺序的固定的,所以有些书里管这些参数称为“定位参数”,意即“个数和位置固定的参数”。
3. 对Attribute实例的属性的赋值可有可无——反正它会有一个默认值。而且,先对哪个属性赋值、后对哪个属性赋值不受限制。有些书管这些为属性赋值的参数叫“具名参数”。
自定义的Attribute
1. 以System.Attribute类为基类
2. Attribute所附着的目标通过AttributeTargets这个枚举类型指定,共有16种情况
All,Assembly,Class,Constructor,Delegate,Enum,Event,Field,GenericParameter,Interface,Method,Module,Parameter,Property,ReturnValue,Struct
可以通过操作符“|”同时设置多个值
例如
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Field, Inherited = false, AllowMultiple = true)]
class Oyster : System.Attribute
{
// OysterAttribute类的具体实现
}
其中Inherited 表示该属性会不会随着继承关系也附着在派生类上
AllowMultiple表示是否允许一个Attribute的多个实例附着在同一个目标上
1. 遇见过的Attibute 有
System.Diagnostics.Contracts.PureAttribute,you should use this attribute only if you are sure that the methods are pure
浙公网安备 33010602011771号