對於property和attribute這兩個名詞都叫“屬性”的問題,來源於國內it書籍翻譯界的疏忽。
其實它們來源於兩個不同的領域,attribute屬於OOA/OOD的概念,而property屬於編程語言中的概念。下面我們來說明它們的異同。
Attribute
Attributes是Microsoft .Net Framework文件的元數據,可以用來向運行時描述你的代碼,或者在程序運行的時候影響應用程序的行為。
Property
屬性是面向對象編程的基本概念,提供了對私有字段的訪問封裝,在C#中以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; }
}
作者:fen