類別、結構和介面的名稱

注意

此內容是由 Pearson Education, Inc. 授權轉載自架構設計指導方針:可重複使用 .NET 程式庫的慣例、慣用語和模式,第 2 版。 該版於 2008 年出版,該書自那以後已於第三版進行了全面修訂。 此頁面上的某些資訊可能已過期。

下列命名指導方針適用於一般型別命名。

✔️ 請務必使用 PascalCasing 以名詞或名詞片語命名類別和結構。

如此便能區分型別名稱與使用動詞片語命名的方法。

✔️ 請務必使用形容詞片語命名介面,偶爾也能使用名詞或名詞片語。

名詞和名詞片語應較少使用,它們可能表示型別應該是抽象類別而非介面。

❌ 請勿為類別名稱指定前置詞 (例如 "C")。

✔️ 請考慮以基底類別名稱作為衍生類別名稱的結尾。

這樣的命名方式不僅易於讀取,更能清楚說明關聯性。 程式碼中的一些範例包括:屬於 Exception 種類的 ArgumentOutOfRangeException 以及屬於 Attribute 種類的 SerializableAttribute。 不過,在套用此指導方針時請務必使用合理判斷;舉例來說,Button 類別是一種 Control 事件,儘管 Control 沒有出現在名稱中。

✔️ 請務必以字母 I 作為介面名稱開頭,表示類型為介面。

例如,IComponent (描述性名詞)、ICustomAttributeProvider (名詞片語) 和 IPersistable (形容詞) 都是適合的介面名稱。 如同其他型別名稱,請避免縮寫。

✔️ 當您定義介面組類別時 (其中類別是介面的標準實作),請務必確保名稱不同之處僅在於介面名稱上的 "I" 前置詞。

泛型型別參數名稱

泛型已新增至 .NET Framework 2.0。 此功能引進了一種稱為型別參數的新識別碼。

✔️ 請務必使用描述性的名稱命名泛型型別參數,除非單一字母名稱足以表明,而且描述性名稱不會新增值。

✔️ 針對單一字母型別參數的類型,請考慮使用 T 做為型別參數名稱。

public int IComparer<T> { ... }
public delegate bool Predicate<T>(T item);
public struct Nullable<T> where T:struct { ... }

✔️ 描述性型別參數名稱前面請務必加上 T

public interface ISessionChannel<TSession> where TSession : ISession {
    TSession Session { get; }
}

✔️ 請考慮在參數名稱中指出放在型別參數上的條件約束。

例如,受 ISession 條件約束的參數為可能稱為 TSession

一般型別名稱

✔️ 在命名衍生自或實作特定 .NET Framework 型別的型別時,請務必遵循下表中所述的指導方針。

基底類型 衍生/實作型別指導方針
System.Attribute ✔️ 請務必將尾碼 "Attribute" 新增至自訂屬性類別的名稱中。
System.Delegate ✔️ 請務必將尾碼 "EventHandler" 新增至事件中使用的委派名稱。

✔️ 請務必將尾碼 "Callback" 新增至並非用作事件處理常式的委派名稱中。

❌ 請勿將尾碼 "Delegate" 新增至委派中。
System.EventArgs ✔️ 請務必新增尾碼 "EventArgs"。
System.Enum ❌ 請勿衍生自此類別;請改用您的語言所支援的關鍵字;例如,在 C# 中,請使用 enum 關鍵字。

❌ 請勿新增尾碼 "Enum" 或 "Flag"。
System.Exception ✔️ 請務必新增尾碼 "Exception"。
IDictionary
IDictionary<TKey,TValue>
✔️ 請務必新增尾碼 "Dictionary"。請注意,IDictionary 這是特定類型的集合,但此指導方針的優先順序高於下列更通用的集合指導方針。
IEnumerable
ICollection
IList
IEnumerable<T>
ICollection<T>
IList<T>
✔️ 請務必新增尾碼 "Collection"。
System.IO.Stream ✔️ 請務必新增尾碼 "Stream"。
CodeAccessPermission IPermission ✔️ 請務必新增尾碼 "Permission"。

命名列舉

列舉型別 (亦稱為列舉) 的名稱一般應該遵循標準型別命名規則 (PascalCasing 等)。 不過,還有其他特別適用於列舉的指導方針。

✔️ 除非列舉值為位元欄位,否則請務必對列舉使用單一類型名稱。

✔️ 針對將位元欄位作為值的列舉 (亦稱為旗標列舉),請務必使用複數類型名稱。

❌ 請勿在列舉類型名稱中使用 "Enum" 尾碼。

❌ 請勿在列舉類型名稱中使用 "Flag" 或 "Flags" 尾碼。

❌ 請勿在列舉值名稱上使用前置詞 (例如將 "ad" 用於 ADO 列舉、將 "rtf" 用於 RTF 列舉等)。

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 節錄。

另請參閱