屬性 (.NET 架構設計指導方針)
注意
此內容是由 Pearson Education, Inc. 授權轉載自架構設計指導方針:可重複使用 .NET 程式庫的慣例、慣用語和模式,第 2 版。 該版於 2008 年出版,該書自那以後已於第三版進行了全面修訂。 此頁面上的某些資訊可能已過期。
System.Attribute 是用來定義自訂屬性的基底類別。
屬性是可新增至程式設計元素的批註,例如組件、類型、成員和參數。 屬性會儲存在組件的中繼資料中,而且可以在執行階段使用反映 API 進行存取。 例如,架構會定義 ObsoleteAttribute,其可套用至類型或成員,以指出類型或成員已被取代。
屬性 (attribute) 可以有一或多個屬性 (property),其中包含與屬性 (attribute) 相關的其他資料。 例如,ObsoleteAttribute
可能會包含類型或成員已被取代版本的其他資訊,以及取代過時 API 的新 API 描述。
套用屬性 (attribute) 時,必須指定屬性 (attribute) 的某些屬性 (property)。 這些稱為必要屬性 (property) 或必要引數,因為其會以位置建構函式參數表示。 例如,ConditionalAttribute 的 ConditionString 屬性 (property) 是必要屬性 (property)。
當套用屬性 (attribute) 時,不一定必須指定的屬性 (property) 稱為選擇性屬性 (property) (或選擇性引數) 。 這些會以可設定的屬性 (property) 表示。 編譯器提供在套用屬性 (attribute) 時設定這些屬性 (property) 的特殊語法。 例如,AttributeUsageAttribute.Inherited 屬性 (property) 代表選擇性引數。
✔️ 請使用尾碼 "Attribute" 命名自訂屬性類別。
✔️ 請將 AttributeUsageAttribute 套用至自訂屬性 (attribute)。
✔️ 請提供選擇性引數的可設定屬性 (property)。
✔️ 請提供必要引數的僅限取得屬性 (property)。
✔️ 請提供建構函式參數,以初始化對應至必要引數的 (property)。 每個參數都應該有與對應屬性 (property) 相同的名稱 (雖然大小寫不同)。
❌ 避免提供建構函式參數,以初始化對應至選擇性引數的屬性 (property)。
換句話說,沒有可以使用建構函式和 setter 設定的屬性 (property)。 此指導方針會明確說明哪些引數是選擇性的,以及哪些引數為必要,並避免用兩種方式執行相同的動作。
❌ 避免多載自訂屬性 (attribute) 建構函式。
只有一個建構函式能夠清楚傳達給使用者,哪些引數為必要,以及哪些引數是選擇性的。
✔️ 可能的話,請執行密封自訂屬性 (attribute) 類別。 這可讓查詢屬性 (attribute) 更快。
Portions © 2005, 2009 Microsoft Corporation. 著作權所有,並保留一切權利。
獲 Pearson Education, Inc. 的授權再版,從 Krzysztof Cwalina 和 Brad Abrams 撰寫,並在 2008 年 10 月 22 日由 Addison-Wesley Professional 出版,作為 Microsoft Windows Development Series 一部份的 Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries, 2nd Edition 節錄。