Attribute很多书中将它翻译为属性信息,主要用于在编译时存储应用程序中类、方法、或成员变量的信息,并在运行时或利用其他工具读取元数据时访问这些信息。如vs.net中的智能感知就是利用它和Reflection机制实现的。
具体功能看sdk中的System.Attribute,它是所有属性信息的基类。
比较常用的是
CategoryAttribute 他的作用是把所定义的属性按照一定的类型分类,就好像大家在系统中看到的“外观”等的分类一样。
DescriptionAttribute 不知道大家是否还记得在系统中当选中一个属性之后,在属性浏览器中的下方就会出现该属性的文字描述。这个性质就是起到了这样的功能。
DefaultValueAttribute 顾名思义这个性质当然是设置默认值的功能了,当用户制定了改默认值后,属性浏览器就会以加粗的字体显示。
ReadOnlyAttribute 这个性质也不难看出他是设置属性的只读性,这里的只读性可不是属性真正的只读性,在这里只是指出在属性浏览器中是否可以改写的性质。
BrowerAbleAttribute 这个性质功能是指出在属性浏览器中是否可以浏览该属性。有一些属性是不希望在设计期间或者用属性浏览器改写的,就可以制定改性质。
具体功能看sdk中的System.Attribute,它是所有属性信息的基类。
比较常用的是
CategoryAttribute 他的作用是把所定义的属性按照一定的类型分类,就好像大家在系统中看到的“外观”等的分类一样。
DescriptionAttribute 不知道大家是否还记得在系统中当选中一个属性之后,在属性浏览器中的下方就会出现该属性的文字描述。这个性质就是起到了这样的功能。
DefaultValueAttribute 顾名思义这个性质当然是设置默认值的功能了,当用户制定了改默认值后,属性浏览器就会以加粗的字体显示。
ReadOnlyAttribute 这个性质也不难看出他是设置属性的只读性,这里的只读性可不是属性真正的只读性,在这里只是指出在属性浏览器中是否可以改写的性质。
BrowerAbleAttribute 这个性质功能是指出在属性浏览器中是否可以浏览该属性。有一些属性是不希望在设计期间或者用属性浏览器改写的,就可以制定改性质。
可是我始终不是太理解,Attribute基类所提供的应用难道仅仅只是供类实例化后保存程序的一些配置信息吗?
每一个Get/Set可以读取一个内部变量.方案3: 属性方法.从1-3,后一种方案都比前一种封装度要高.
事实上,对于方案1,你马上就知道类内部的那个变量。
对于方案2,你虽然不是直接知道,但是一般就猜到了.根据Get/Set后面的名字透露的信息.
对于方案3,给你一个属性接口,你无法知道内部是否有对应的变量.
如Form类的Dock属性,设置这个属性事实上是调用一个函数.另外一方面,方案2和方案3可以实现只读或者只写,而方案1却是可读写的.总而言之,属性方法增加了一个中间层,为用户提供一个抽象接口,而隐藏实现的细节.
属性的Get/Set也提供了只读或只写的可控制性.
同时,由于在属性内可以调用内部函数和写语句,当需求更改时,可能只需要在属性内部修改,
而不会对客户造成涟漪效应.这就体现了OOP的准则.
我个人的理解:Attribute是存储类、方法、或成员变量的特征信息,同一个类的不同实例(或实例的方法,成员变量)具有不同的特征信息,而这些信息在运行时可以读取访问。