兩個“屬性”引起的歧異-property和attribute的區別,這雖然 沒有“一個饅頭引發的血案”那麼嚴重,但是也足以成為。net程序 員的技術盲點之二。
對於property和attribute這兩個名詞都叫“屬性 ”的問題,來源於國內it書籍翻譯界的疏忽。
其實它們來源於兩個 不同的領域,attribute屬於OOA/OOD的概念,而property屬於編程語言中的概念 。下面我們來說明它們的異同。
Attribute
Attributes是 Microsoft .NET Framework文件的元數據,可以用來向運行時描述你的代碼,或 者在程序運行的時候影響應用程序的行為。
Property
屬性是面向 對象編程的基本概念,提供了對私有字段的訪問封裝,在中以get和set訪問器方 法實現對可讀可寫屬性的操作,提供了和靈活的數據訪問封裝。關於屬性的概念 ,不是本文的重點,而且相信大部分的技術人員應該對屬性有清晰的概念。以下 是簡單的屬性
區別
可以說兩者沒有可比性,只不過我們國家的語 言特點才引起的歧異,其實只要記住Attributes是派生於System,Attributes類 之下,它的主要作用是描述,比如在某一個自定義控件中的“屬性” 就是指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; }
}