Property
对类来说:属性成员描述的是状态信息,对类的实例来说,属性成员的值表示的是该对象的状态值。
1、如果类Z是抽象的,包含它的类A 也应该是抽象的。
2、重写属性的声明必须与指定与所继承的属性相同的修饰符,类型等
3、如果被继承的属性只有单个访问器(读或者写),重写属性也只能单个访问器。如果被继承的属性有两个访问器,重写属性可以只包含一个,也可包含两个
4、重写属性可以包含seal修饰符,此修饰符可以防止派生类重写该属性
Attribute(特性)类
为实体类型(类、接口、方法、属性)描述附加信息的方法。一旦代码的实体被附加了信息,就可以在运行时获得这些信息。特性与程序实体关联后,即可在运行时使用名为“反射”的技术查询特性。
Attribute本质上就是一个类,它附着在目标对象上最终实例化
- 不通过new操作符来产生实例,而是使用在方括号里调用构造方法来产生实例。
- 方括号必须紧挨着放置在被附着目标的前面。
- 因为方括号里空间有限,所以不能使用对象初始化器给对象的属性(Property)赋值,必须使用含参构造方法对Attribute实例中的属性赋值。
派生于System.Attribute类
使用方法:
1、 定义Attribute类
2、 使用Attribute类
3、 查询Attribute类
使用格式:
放在[ ]即可
[显示说明符:特征列表]
可以使用带参数的Attribute类[Attribute类名(位置参数表,命名参数表)]
位置参数表:即构造函数的参数
命名参数表:Attribute实例中的属性的赋值
注意:对一个特性类名使用Attribute后缀是一个惯例,也可不添加,系统会自动添加。
Attribute类的查询
1、使用GetCustomAttribute或者GetCustomAttributes方法查询,查询指定代码实体上指定特征类型
2、使用反射机制查询
查询代码实体成员上的特征信息
AttributeUsage有三个属性,我们可以把它放置在定制属性前面。
第一个属性:ValidOn,通过这个属性,我们能够定义定制特性应该在何种程序实体前放置
第二个属性: AllowMultiple ,这个属性标记了我们的定制特性能否被重复放置在同一个程序实体前多次
第三个属性是: Inherited ,我们可以使用这个属性来控制定制特性的继承规则。它标记了
当特性被放置在一个基类上时,它能否被派生类所继承。