Attribute很多书中将它翻译为属性信息,主要用于在编译时存储应用程序中类、方法、或成员变量的信息,并在运行时或利用其他工具读取元数据时访问这些信息。如vs.net中的智能感知就是利用它和Reflection机制实现的。
具体功能看sdk中的System.Attribute,它是所有属性信息的基类。
比较常用的是
CategoryAttribute  他的作用是把所定义的属性按照一定的类型分类,就好像大家在系统中看到的“外观”等的分类一样。
DescriptionAttribute  不知道大家是否还记得在系统中当选中一个属性之后,在属性浏览器中的下方就会出现该属性的文字描述。这个性质就是起到了这样的功能。
DefaultValueAttribute  顾名思义这个性质当然是设置默认值的功能了,当用户制定了改默认值后,属性浏览器就会以加粗的字体显示。
ReadOnlyAttribute   这个性质也不难看出他是设置属性的只读性,这里的只读性可不是属性真正的只读性,在这里只是指出在属性浏览器中是否可以改写的性质。
BrowerAbleAttribute  这个性质功能是指出在属性浏览器中是否可以浏览该属性。有一些属性是不希望在设计期间或者用属性浏览器改写的,就可以制定改性质。

解决方案 »

  1.   

    由此看来,这里的属性并不是我们在VB中所了解的在类中定义的成员变量喽
    可是我始终不是太理解,Attribute基类所提供的应用难道仅仅只是供类实例化后保存程序的一些配置信息吗?
      

  2.   

    属性的一个作用是代替传统的C++的Get/Set接口来访问内部数据.方案1: 把内部变量设为public,用户代码中直接对该变量进写读写.方案2: Get/Set接口.如果学过MFC的话,一定比较熟悉Get/Set函数了.
           每一个Get/Set可以读取一个内部变量.方案3: 属性方法.从1-3,后一种方案都比前一种封装度要高.
    事实上,对于方案1,你马上就知道类内部的那个变量。
    对于方案2,你虽然不是直接知道,但是一般就猜到了.根据Get/Set后面的名字透露的信息.
    对于方案3,给你一个属性接口,你无法知道内部是否有对应的变量.
    如Form类的Dock属性,设置这个属性事实上是调用一个函数.另外一方面,方案2和方案3可以实现只读或者只写,而方案1却是可读写的.总而言之,属性方法增加了一个中间层,为用户提供一个抽象接口,而隐藏实现的细节.
    属性的Get/Set也提供了只读或只写的可控制性.
    同时,由于在属性内可以调用内部函数和写语句,当需求更改时,可能只需要在属性内部修改,
    而不会对客户造成涟漪效应.这就体现了OOP的准则.
      

  3.   

    楼上这个属性是Property,楼主问的可是Attribute,不要搞混哦
      

  4.   

    我认为Attribute翻译成"特性"比较好理解。
    我个人的理解:Attribute是存储类、方法、或成员变量的特征信息,同一个类的不同实例(或实例的方法,成员变量)具有不同的特征信息,而这些信息在运行时可以读取访问。
      

  5.   

    Attributes("...")指的是服务器端控件在客户端的表现形式,也就是控件在客户端的属性
      

  6.   

    我一般将Attribute翻译为“元属性”,他和属性、方法这些东西不在一个层次上。它是CLR用来描述类型、成员或程序集的附加数据。
      

  7.   

    Attribute非常好用。很多其他的语言只可以定义public virtual之类的元数据信息。而.net允许你定义自己的这样的信息。
      

  8.   

    有看过《C#技术内幕》([美]TOM ARCHER著 清华大学出版社)一书的朋友吗?能谈谈对这本书的感受吗?