通常,类型的名称应该是名词短语,而名词又是通过类型而被呈现的实体。例如,Button、Stack,以及 File 都各自拥有通过类型被呈现的实体而定义的标识名称。从开发者的观点出发而选择实体的标识名称;并且名称还应该反映出使用情节。
如下所示的指导方针适用于类型名称的选择。
使用名词、名词短语,或者场景形容词短语并以 Pascal 包装来为类、接口,以及值类型进行命名。
不要在类名称中使用前缀(如字母 C)。
应该在接口名称的开始部分使用字母 I,这是该规则的一个例外。
考虑在被继承类名称的结尾部分使用基类的名称。
例如,继承自 Stream 的 Framework 类型应该以 Stream 作为结尾,而继承自 Exception 的类型则应该以 Exception 作为结尾。
在接口名称中使用前缀字母 I 来表示该类型是一个接口。
确保在对一个 <类/接口> 对进行定义并且该类又是接口的一个标准实现的时候,名称才不同于接口名称的字母 I 前缀。
例如,Framework 提供了 IAsyncResult 接口和 AsyncResult 类。
常规类型参数的名称
常规是 .NET Framework 2.0 中一个主要的新特征。下列指导方针中涵盖了为常规类型参数而选择正确的名称。
使用描述性的名称来为常规类型参数进行命名,除非一个单独的字母名称能够拥有完整的自我解释性以及不需要为一个描述性的名称添加值。
IDictionary 就是一个遵循这个指导方针的接口范例。
考虑为包含一个单独字母的类型参数的类型使用字母 T 来作为类型参数的名称。
使用包含字母 T 的描述性类型参数名称来作为前缀。
考虑一个表示强制性类型参数已经被放置在参数名称中。例如,一个被强制成 ISession 的参数可以被称为 TSession。
公共类型的名称
下列指导方针提供了帮助开发者对为某些类而打算使用的情节进行认可的命名约定。这些指导方针引用到了继承自一些其他类型的类型,并适用于所有的继承器(不单单只是直接继承)。例如,指导方针:[为继承自 Exception 的类型添加 Exception 后缀。]表示任何在继承层次中拥有 Exception 的类型都应该在名称的结尾部分中拥有 Exception 后缀。
这些指导方针同样适合于被指定的后缀;除了通过适应指导方针标准而被制定的类型之外,并且它不能够使用后缀。例如,如果你的类型没有直接或间接地继承自 Exception,那么就不要在它的名称的结尾部分使用 Exception 后缀。
把后缀 Attribute 添加到自定义的参数类。
ObsoleteAttribute 和 AttributeUsageAttribute 就是遵循这个指导方针的类型名称。
为在事件中被使用的类型(如 C# 事件的返回类型)名称添加后缀 EventHandler。
AssemblyLoadEventHandler 就是一个遵循了这个指导方针的代理名称。
为非事件处理器的代理名称添加后缀 Callback。
不要为代理添加后缀 Delegate。
为扩充 System.EventArgs 的类添加后缀 EventArgs。
不要对 System.Enum 类进行继承;而是通过你的编程语言来代替被支持的关键字。例如,在 C# 中,使用 enum 关键字。
为继承自 System.Exception 的类型添加后缀 Exception。
为实现了 System.Collections.IDictionary 或 System.Collections.Generic.IDictionary<TKey, TValue> 的类型添加后缀 Dictionary。注意 System.Collections.IDictionary 是一个特殊的集合类型,这个指导方针要比下列常规集合指导方针更具有优先权。
为实现了 System.Collections.IEnumerable、System.Collections.ICollection、System.Collections.IList、System.Collections.Generic.IEnumerable<T>、System.Collections.Generic.ICollection<T>,或者 System.Collections.Generic.IList<T> 的类型添加后缀 Collection。
为继承自 System.IO.Stream 的类型添加后缀 Stream。
为继承自 System.Security.CodeAccessPermission 或实现了 System.Security.IPermission 的类型添加后缀 Permission。
枚举的类型
不要在枚举值的名称中使用前缀。例如,不要使用任何前缀(如 ADO 枚举中的 ad,或者丰富文本枚举中的 rtf,等等)。
这同样表示不能够在枚举值名称中包括枚举类型名称。下列代码范例就示范了一个枚举值的不正确命名。
public enum Teams
{
TeamsAlpha,
TeamsBeta,
TeamsDelta
}