中文技術書常將 Property 與 Attribute 同譯為「屬性」,導致許多開發者混淆。兩者源自不同領域,用途截然不同。
System.Attribute 衍生類別。| Attribute | 適用目標 | 說明 |
|---|---|---|
AttributeUsage | Class | 指定自訂 Attribute 的合法用法 |
Obsolete | 除 Assembly/Module/Parameter/Return 外所有 | 標記過時成員 |
Serializable | Class/Struct/Enum/Delegate | 允許序列化 |
DllImport | Method | 指定非託管 DLL 位置 |
Conditional | Method | 條件式編譯 |
ThreadStatic | Static Field | 執行緒區域儲存 |
自訂 Attribute 範例:[DllImport("User32.dll")]。
get/set 存取子包裝私有欄位,提供唯讀/可寫/邏輯驗證等彈性。private int _hour;
public int Hour
{
get { return _hour; }
set { _hour = value; }
}
| 面向 | Attribute | Property |
|---|---|---|
| 本質 | 中繼資料 (Metadata) | 封裝的資料存取介面 |
| 繼承體系 | 衍生自 System.Attribute | 語言關鍵字,無繼承關係 |
| 執行期角色 | 被反射讀取,影響框架行為 | 直接參與業務邏輯運算 |
| 自訂控制項中 | 設計工具屬性格欄位 | 程式碼中定義的成員 |
Attribute = 描述 (標籤),貼在程式碼上給工具/框架看。
Property = 屬性 (封裝),寫在類別裡給程式邏輯用。