備註
此內容經Pearson Education, Inc.授權從架構設計指導方針:可重複使用 .NET 程式庫的慣例、習慣用語與範式 (第2版)轉載。 該版於2008年出版,該書自那以後已於 第三版全面修訂。 此頁面的某些資訊可能已過期。
System.Attribute 是用來定義自定義屬性的基類。
屬性是可新增至程式設計元素的批註,例如元件、類型、成員和參數。 它們會儲存在組件的元數據中,而且可以使用反射 API 在執行時存取。 例如,Framework 定義 ObsoleteAttribute,可以套用至型別或成員,以指出該型別或成員已被棄用。
屬性可以有一或多個屬性,這些屬性會攜帶與屬性相關的其他數據。 例如,ObsoleteAttribute 可以攜帶有關類型或成員被標記為不建議使用的版本的額外資訊,以及取代過時 API 的新 API 的說明。
套用屬性時,必須指定屬性的某些屬性。 這些屬性稱為必要屬性或必要自變數,因為它們會表示為位置建構函式參數。 例如, ConditionString 的 ConditionalAttribute 屬性是必要屬性。
當套用屬性時,不一定必須指定的屬性稱為選擇性屬性(或選擇性自變數)。 它們會以可設定的屬性表示。 編譯程式會提供特殊語法,以在套用屬性時設定這些屬性。 例如, AttributeUsageAttribute.Inherited 屬性代表選擇性自變數。
✔️ DO 將自訂義屬性類別命名時以「Attribute」作為後綴。
✔️ 請將套用 AttributeUsageAttribute 至自訂屬性。
✔️ DO 提供選擇性自變數的可設定屬性。
✔️ DO 提供必要自變數的僅限取得屬性。
✔️ DO 提供建構函式參數,以初始化對應至必要自變數的屬性。 每個參數都應該有與對應屬性相同的名稱(雖然大小寫不同)。
❌ 避免提供建構函式參數來初始化對應至選擇性自變數的屬性。
換句話說,不要有可以同時使用建構函式和 setter 來設定的屬性。 此指導方針會明確說明哪些自變數是選擇性的,需要哪些自變數,並避免有兩種方式執行相同動作。
❌ 避免多載自定義屬性建構函式。
只有一個建構函式會清楚傳達給使用者需要哪些自變數,以及哪些是選擇性的。
✔️ 請盡可能封存自定義屬性類別。 這能使查找屬性更快。
© 2005年、2009年Microsoft公司部分。 保留所有權利。
經 Pearson Education, Inc. 許可重新刊登自 Krzysztof Cwalina 和 Brad Abrams 所著的 架構設計指導方針: 可重複使用的 .NET 程式庫慣例、慣用語和模式,第 2 版,2008 年 10 月 22 日由 Addison-Wesley Professional 發行,作為 Microsoft Windows 開發系列的一部分。