首页 > 代码库 > C#回顾 –6.特性

C#回顾 –6.特性

1.特性是什么?

Attribute用来对类、属性、方法等标注额外的信息,贴一个标签(附着物)
通俗:给 类 或 类成员 贴一个标签,就像航空部为你的行李贴一个标签一样 
个人理解,特性就是修饰对象元数据的修饰符。
技术分享
 图中的 
1.是特性             2.是访问修饰符 
3.声明修饰符     4.数据类型 
5.变量名            6.变量数据值
其中1、2、3、4、5就是元数据,用来描述数据(6)的数据。

2.特性到底是什么?

如上面的 Obsolete  ,会不会也是一个如 public 、 static 这样类似的修饰符呢,我们且看看反编译后的中间语言。
技术分享

 意料之外,我们看到了上面的2、3、4、5,而1(特性)怎么跑到里面去了,且是一种看不懂的东东,反正我们知道了不是类似的修饰符。

然后我们接着在vs里面把光标移到 Obsolete  上按F12,如:
技术分享

 原来只是一个继承了 Attrbute 的一个类(class)。那么上面我们看不懂的部分应该就是这个 ObsoleteAttribute 类的实例化了。

我们来回答上面问题:特性到底是什么?特性只是一个类而已。

3.自定义特性

我们看到上面系统特性 Obsolete 上面还有特性,如:Serializable、AttributeUsage、Camvisible等。像这种特性我们称之为“元数据的元数据”(元元数据)。
1.我们分别来解释性上面的三个特性。
Serializable:表示类型支持序列化。
ComVisible:微软定义“控制程序集中个别托管类型、 成员或所有类型对COM的可访问性”。
AttributeUsage:这个比较重要了,基本上每个特性定义都用到了它。它就是用来表示当前这个特性可用于哪些对象。如:类、方法、属性...等等。(只需要用到这个我们就可以自定义特性了)


























来自为知笔记(Wiz)


C#回顾 –6.特性