類別、結構和介面的名稱
注意
此內容是由 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 節錄。