property和attribute的區別

property是指類向外提供的數據區域。
而attribute則是描述對象在編譯時或運行時屬性的,分爲固有型和用戶自定義型,其中用戶自定義型能夠利用Reflection在運行期獲取。
這二者是有本質區別的。編程

資料上說兩者一個是service的屬性,而另外一個是interface的。數組

第一種好象更準確,摘要以下:安全

在不少人的腦海中,Attribute就是類的屬性,Property呢?好像也是類的屬性?所以有不少人不加區別的統一稱爲類的屬性,尤爲是在寫中文文章的時候。這種心理是典型的鴕鳥心態,眼不見爲淨。其實稍微用腳想一下就知道,事實確定不是這樣的,UML中既然發明了這兩個術語,顯然不是用來冗餘的。它們之間確定有着千絲萬縷的聯繫與區別。多線程

各類各樣的面嚮對象語言、各類組件技術、模板技術、Web Service技術,其中大部分涉及到了「屬性」這個概念,而其英文術語則經常是Attribute、Property或者Field。不少人一律稱之爲「屬性」,有的地方確實能夠不加區分,但有的地方倒是差之毫釐、謬以千里。我對於這些紛紛擾擾的技術和術語也很苦惱,可是咱們至少能夠經過UML中的這兩個術語的解釋找到一個能夠參考的標準。不管如何,UML是面向對象技術的集大成者和事實上的標準。編程語言

很客觀的說,UML1.4中對於這兩個術語並無很清晰的定義,可是其區別仍是顯而易見的。Attribute應該是UML1.4中的寵兒,而Property連一個單獨的術語都沒有撈到。誰也沒想到在UML2.0中風雲突變,Attribute從類圖中消失了,而Property冠冕堂皇入主中原。佈局

1。4中 Attribute是與Classifier相關聯的術語,它比Property的影響範圍要小。Class是Classifier的子類,所以Attribute也能夠表示Class的屬性。從上面的定義還能夠看出,Attribute能夠是Classifier的實例的命名的槽。對於Class來講,其實例就是Object,Object的槽就是對象的屬性值槽。所以,Attribute是能夠做爲對象的屬性的。而Property彷佛沒有這一層的含義。按MOF(元對象設施,OMG的另外一個規範,後面會有詳細解釋)的模型層次劃分,Attribute涉及的模型層從M2到M0,而Property彷佛只是M2層的概念。spa

2。0中 Attribute這裏僅僅指一個類元的結構特徵,能夠將類元的實例聯繫到一個或者一組具體值。而沒有提到實例的槽(slot)等等。我猜測,這是由於UML2.0中已經把Attribute做爲Property的一個子集了,因此關於實例的槽(slot)等等的具體賦值方法,都歸結到Property的定義中解釋了。線程

另一點值得注意的是,Attribute的定義來自於術語表,而沒有在元模型圖中出現。而Property出如今元模型圖中,而且都作了詳細而具體的解釋。這一點能夠看出,UML強化Property,弱化Attribute的決心。翻譯

AttributeProperty的總結

這一節對Attribute和Property做一個小結,基於目前最新的UML2.0規範:code

1) 整體上來講,Attribute是Property的子集,Property會在適當的時機表現爲Attribute;

2) Property出如今類圖的元模型中,表明了Class的全部結構化特徵;Attribute沒有出如今元模型中,它僅僅在Class的概念中存在,沒有相應的語法了;

3) Property有詳細的定義和約束,而Attribute沒有詳細的定義,所以也不能用OCL寫出其約束。

4)Property和Attribute都是M2層的概念。在M1層,它們的實例是具體類的屬性;在M0層,它們的實例的實例是具體對象的槽中存儲的值。

 

對於property和attribute這兩個名詞都叫「屬性」的問題,來源於國內it書籍翻譯界的疏忽。

其實它們來源於兩個不一樣的領域,attribute屬於OOA/OOD的概念,而property屬於編程語言中的概念。下面咱們來講明它們的異同。
Attribute
Attributes是Microsoft .NET Framework文件的元數據,能夠用來向運行時描述你的代碼,或者在程序運行的時候影響應用程序的行爲。
Property
屬性是面向對象編程的基本概念,提供了對私有字段的訪問封裝,在C#中以get和set訪問器方法實現對可讀可寫屬性的操做,提供了安全和靈活的數據訪問封裝。關於屬性的概念,不是本文的重點,並且相信大部分的技術人員應該對屬性有清晰的概念。如下是簡單的屬性
區別
能夠說二者沒有可比性,只不過咱們國家的語言特色才引發的歧異,其實只要記住Attribute是派生於System,Attribute類之下,它的主要做用是描述,好比某爲了 描述某個方法是來自與外部的dll,
能夠寫以下代碼,這就是一個Attribute,他是一個描述(或者說聲明)
[DllImport("User32.dll")]
 
Attribute也有不少系統的「默認」屬性,見下表
預約義的屬性
有效目標
說明
AttributeUsage
Class
指定另外一個屬性類的有效使用方式
CLSCompliant
所有
指出程序元素是否與CLS兼容
Conditional
Method
指出若是沒有定義相關聯的字符串,編譯器就能夠忽略對這個方法的任何調用
DllImport
Method
指定包含外部方法的實現的DLL位置
STAThread
Method(Main)
指出程序的默認線程模型爲STA
MTAThread
Method(Main)
指出程序的默認模型爲多線程(MTA)
Obsolete
除了Assembly、Module、Parameter和Return
將一個元素標示爲不可用,通知用戶此元素將被從將來的產品
ParamArray
Parameter
容許單個參數被隱式地看成params(數組)參數對待
Serializable
Class、Struct、enum、delegate
指定這種類型的全部公共和私有字段能夠被串行化
NonSerialized
Field
應用於被標示爲可串行化的類的字段,指出這些字段將不可被串行化
StructLayout
Class、struct
指定類或結構的數據佈局的性質,好比Auto、Explicit或sequential
ThreadStatic
Field(靜態)
實現線程局部存儲(TLS)。不能跨多個線程共享給定的靜態字段,每一個線程擁有這個靜態字段的副本
 
 
而Property是指編程過程當中的字段,也即類的成員。
如:
private int hour; //定義私有變量表示"小時",外部是訪問不到的.} 
public int Hour// 定義Hour程序接口
{ 
     set { hour=value; } 
     get { return hour;}
相關文章
相關標籤/搜索