首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

[你必須知道的.NET] 第三回:特性與屬性的歷史糾葛 (上)

     編輯:關於C語言

引言

attribute 是 .NET Framework 的技術亮點之一。框架大量使用自訂特性完成程式碼約定:[Serializable]、[Flags]、[DllImport]、[AttributeUsage] 等。但初學者常混淆「特性」與「屬性」。

概念釐清

什麼是特性?

MSDN 定義:CLR 允許添加類關鍵字的描述性宣告,稱為 attributes,用於標註型別、欄位、方法、屬性等程式元素。特性與中繼資料儲存於組件中,可供運行時讀取以影響應用程式行為。

簡單定義:特性本質上是一個類別,為目標元素提供關聯附加資訊,並在運行期透過反射取得。

什麼是屬性?

屬性是物件導向的基本概念,提供對私有欄位的存取封裝,C# 以 get/set 存取器實現資料的安全彈性存取。

差異比較

維度特性屬性
本質衍生自 System.Attribute 的類別類別成員,封裝欄位存取
用途中繼資料標註、運行時行為控制資料封裝、存取控制
語法[AttributeName] 置於元素上方public int Prop { get; set; }
執行時機編譯期初始化,運行期反射讀取運行期存取器執行

兩者僅名稱相似(中文皆譯「屬性」),功能與應用層面無交集。本文聚焦特性。

特性通用規則

可套用目標

組件、模組、型別、屬性、事件、欄位、方法、參數、回傳值等。

語法形式

[AttributeUsage]
[Flags]
[AttributeUsage, Flags]
[AttributeUsage(), FlagsAttribute()]

關鍵規則

  • 特性實例在編譯期初始化,非運行期
  • 可使用前綴明確指定目標:[assembly: MyAttr]、[module: MyAttr]、[type: MyAttr]
  • 自訂特性必須直接/間接繼承 System.Attribute,具備公用建構函式
  • 慣例命名以 Attribute 結尾
  • 特性可套用於其他特性(如 [AttributeUsage] 修飾自訂特性)
  • 特性不影響目標元素功能,僅約定特質
  • 非抽象特性必須為 public

主要應用場景

  • 序列化控制([Serializable]、[DataContract])
  • 編譯器指令(條件編譯、過時警告)
  • 設計模式標記(工廠註冊、策略選擇)
  • 運行期程式碼分析與除錯優化
  • 位元旗標、非受控函數標記、方法棄用標記

下一步

下回將深入探討常用內建特性與自訂特性實作細節。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved