屬性 (.NET Framework 設計指導方針)

備註

此內容經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 開發系列的一部分。

另請參閱