类、结构和接口的名称

注意

此内容根据 Pearson Education, Inc. 许可转载自《框架设计指南:可重用 .NET 库的约定、习语和模式第二版》。 该版本于 2008 年出版,并在此后于第三版对该书进行了全面修订。 此页上的一些信息可能已过时。

以下命名准则适用于一般类型命名。

✔ 请务必使用 PascalCasing 用名词或名词短语命名类和结构。

这将类型名称与使用动词短语命名的方法区分开来。

✔️ 请务必用形容词短语(或偶尔用名词或名词短语)命名接口。

名词和名词短语应该很少使用,它们可能表明类型应为抽象类,而不是接口。

❌ 请勿为类名加上前缀(例如,“C”)。

✔️ 考虑以基类的名称作为派生类名称的结尾。

这样便一目了然,清楚地解释了这种关系。 代码中的一些示例是:ArgumentOutOfRangeException,它是 Exception 的一种,以及 SerializableAttribute,它是 Attribute 的一种。 但是,在应用这一准则时,运用合理的判断是很重要的;例如,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”用于富文本枚举等)。

Portions © 2005, 2009 Microsoft Corporation 版权所有。 保留所有权利。

在 Pearson Education, Inc. 授权下,由 Addison-Wesley Professional 作为 Microsoft Windows 开发系列的一部分再版自 Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries, 2nd Edition(Framework 设计准则:可重用 .NET 库的约定、惯例和模式第 2 版),由 Krzysztof Cwalina 和 Brad Abrams 发布于 2008 年 10 月 22 日。

请参阅