命名规范
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
String
表 1-1 不同类型的标识符的大小写规则
标识符
大小写
样例
名字空间
Pascal
namespace System.Security { … }
类型
Pascal
public class StreamReader { … }
接口
Pascal
public interface IEnumerable { … }
C#
Visual Basic
C++
CLR
sbyte
SByte
char
SByte
byte
Byte
unsigned char
Byte
short
Short
short
Int16
ushort
UInt16
unsigned short
UInt16
int
Integer
int
Int32
uint
UInt32
unsigned int
为了区分一个标识符中的多个单词,把标识符中的每个单词的首字母大写。不要用下划线来区分单词,或者在标识符中 的任何地方使用下划线。有两种合适的方法来大写标识符中的字母,这取决于所使用的标识符: PascalCasing camelCasing PascalCasing 约定被用于除了参数名之外的所有标识符,它把标识符中每个单词的首字母(包括长度为两个字符以上 的首字母缩写词)大写,如下面的例子所示: PropertyDescriptor HtmlTag 两个字母长的首字母缩写词是一个特例,在这种情况下两个字母都要大写,如下面的标识符所示: IOStream camelCasing 约定仅用于参数的名字,它把标识符中除了第一个单词之外的所有单词的首字母大写,如下面的例子所 示。在例子中,如果 camelCasing 风格的标识符以两个字母长的首字母缩写词开始,那么两个字母都要小写。 propertyDescriptor ioStream htmlTag 下面是一些用于标识符的基本大小写规范。 √ 要把 PascalCasing 用于由多个单词构成的名字空间、类型以及成员的名字。 例如,要使用 TextColor 而不是 Textcolor 或 Text_color。单个单词(比如 Button)直接首字母大写。始终作为一 个单词的复合词(比如 endpoint)视为一个单词,只有第一个字母大写。 √ 要把 camelCasing 用于参数的名字。 表 1-1 描述了用于不同类型的标识符的大小写规则。
1.3 复合词和常用术语的大小写
在涉及大小写时,大多数复合词术语要作为单个单词处理。 × 不要把所谓闭合形式的复合词中每个单词的首字母大写。 这些复合词要写成一个单词,比如 endpoint。为了统一大小写规范,我们把闭合形式的复合词作为一个单词处理。如 果想知道一个复合词是否应该以闭合形式来写,可以借助最新的英语词典。 表 1-2 列出了一些最为常用的复合词和常用术语的大小写。 表 1-2 常用的复合词和常用术语的大小写及拼写
虽然运行于 CLR 之上的一些编程语言的确区分大小写,但这并不是必需的。即使你使用的语言区分大小写,可能会使 用框架的其他语言却并不一定会区分。因此,任何外部可访问的 API 不应该仅通过大小写来区分位于同一个上下文中的 两个名字。 实际上是否区分大小写只有以下一条规范,但是很重要。 × 不要以为所有的编程语言都是区分大小写的,实际情况并非如此。不应该仅仅通过大小写来区分名字。
Camel email endpoint fileName gridline hashtable id indexes logOff logOn metadata multipanel multiview namespace ok pi placeholder signIn signOut userName whiteSpace
2.2 使用单词缩写和首字母缩写词
一般来说,不要在标识符中使用单词缩写或首字母缩写词。正如前面所讲,对名字来说,可读性比简短更为重要。另外 有一点也同样重要,即不要使用未被广泛接受的单词缩写和首字母缩写词,也就是说,大多数并非领域专家的人能够立 刻知道它们是什么意思。 √ 不要使用缩写词和缩约词作为标识符名字的一部分。例如,要用 GetWindow,而不要用 GetWin。 √ 不要使用未被广泛接受的首字母缩写词,即使是被广泛接受的首字母缩写词,也只应该在必需的时候才使用。 例如,UI 用来表示 User Interface,HTML 用来表示 Hypertext Markup Language。虽然许多框架设计师认为一些 新近的首字母缩写词很快就会被广泛接受,但在框架的标识符中使用它们仍是不好的做法
Pascal Writable
Camel writable
Not Writeable
有两个常用的其他术语,它们本身属于另一个类别,因为它们是俚语性质的常用缩写。这两个单词是 Ok 和 Id(它们的 大小写应该如所显示的那样),虽然前面的规范说过名字中不应该使用缩写,但它们是例外。
1.4 是否区分大小写
表格 18888
1.2 首字母缩写词的大小写
一般来说,避免在标识符的名字中使用首字母缩写词是很重要的,除非它们是普遍使用的,能够立刻被使用框架的人所 理解。例如,HTML、XML 和 IO 很容易理解,但不怎么常用的首字母缩写词绝对应该避免。 从定义上讲,首字母缩写词必须至少有两个字母。由三个或以上的字母组成的首字母缩写词遵循与任何其他单词一样的 规范。只有第一个字母大写,除非是 camelCasing 风格的参数名中的第一个单词,在这种情况下第一个单词全部小写。 正如前面一节已经提到的,对两个字母组成的首字母缩写词(例如 IO)的处理是不同的,其主要目的是为了避免混淆。 这样的首字母缩写词的两个字母都应该大写,除非是 camelCasing 风格的参数名中的第一个单词,在这种情况下两个 字母都小写。下面的例子列出了所有这些情况: public void StartIO(Stream ioStream, bool closeIOStream); public void ProcessHtmlTag(string htmlTag) √ 要把两个字母的首字母缩写词全部大写,除非它是 camelCasing 风格的参数名的第一个单词。 System.IO public void StartIO(Stream ioStream) √ 要把由三个或三个以上字母组成的首字母缩写词的第一个字母大写。只有第一个字母大写,除非首字母缩写词是 camelCasing 风格的标识符的第一个单词。 System.Xml public void ProcessHtmlTag(string htmlTag) × 不要把 camelCasing 风格的标识符头部的任何首字母缩写词的任何字母大写,无论首字母缩写词的长度是多少。
2 通用命名约定
描述了一些通用的命名约定,它们涉及到单词的选择、单词缩写和首字母缩写词的使用规范以及如何避免使用编程语言 特有的名字。
2.1 单词的选择
对框架中标识符的名字来说,很重要的一点是要一目了然。标识符的名字应该清楚地说明每个成员做什么,以及每个类 型和参数表示什么。为此,名字的意思清楚要比长度短更重要。名字应该与场景、系统的逻辑组成或物理组成以及为人 熟知的概念相对应,而不应该与技术或架构相对应。 √ 要为标识符选择易于阅读的名字。 例如,一个命为 HorizontalAlignment 的属性就比 AlignmentHorizontal 更易于阅读。 √ 要更看重可读性,而不是更看重简短性。属性名 CanScrollHorizontally 要胜过 ScrollableX(不太明显地引用到了 X 坐标轴)。 × 不要使用下划线、连字符以及其他任何既非字母也非数字的字符。 × 不要使用匈牙利命名法。 × 避免使用与广泛使用的编程语言的关键字有冲突的标识符。 根据 CLS(公共语言规范)的第 4 条规则,所有符合规范的语言必须提供一种机制,允许用户访问以该语言的关键字来 命名的标识符。例如,C#在这种情况下使用@符号作为转义机制(escape mechanism)。但是,由于在使用方法时, 用转义序列(escape sequence)要比不用转义序列麻烦得多,因此避免使用常见的关键字仍然是个好习惯
2.3 避免使用语言特有的名字
对那些所谓的基本类型,CLR 平台上的编程语言通常都有自己的名字(别名)来称呼它们。例如,int 是 C#中 System.Int32 的别名。为了确保框架能够充分利用跨语言协作——CLR 的核心特性之一,避免在标识符中使用语言特 有的类型名是重要的。
√ 要给类型名使用语义上有意义的名字,而不要使用语言特有的关键字。 例如,GetLength 这个名字比 GetInt 要好。 √ 要使用 CLR 的通用类型名,而不要使用语言特有的别名——如果除了类型之外,标识符没有其他的语义。 例如,一个把类型转换为 System.Int64 的方法应该被命名为 ToInt64,而不是 ToLong(因为 System.Int64 是 CLR 类型名,它对应于 C#特有的别名 long)。表 3-3 列出了有别名的基本类型在 CLR 中的类型名(以及与 C#、Visual Basic、 C++相对应的类型名) 表 3-3 语言特有的类型名及对应的 CLR 类型名
Not EMail EndPoint Filename GridLine HashTable ID Indices LogOut LogIn MetaData, metaData MultiPanel MultiView NameSpace OK PI PlaceHolder SignOn SignOff Username Whitespace
字段(静态)
Pascal
public MessageQueue { public static readonly TimeSpan InfiniteTimeout; }
枚举值
Pascal
FileMode { Append, … }
参数
Camel
public class Convert { public static int ToInt32(string value); }
方法
Pascal
public class Object { public virtual string ToString(); }
属性
Pascal
public class String { public int Length { get; } }
事件
Pascal
public class Process { public event EventHandler Exited; }
UInt32
long
Long
__iห้องสมุดไป่ตู้t64
Int64
ulong
UInt64
unsigned __int64
UInt64
float
Single
float
Single
double
Double
double
Double
bool
Boolean
bool
Boolean
char
Char
wchar_t
Char
string
Pascal BitFlag CallBack Canceled DoNot
Camel bitFlag callback canceled doNot
Not Bitflag CallBack Cancelled Dont
Pascal Email Endpoint FileName Gridline Hashtable Id Indexes LogOff LogOn Metadata Multipanel Multiview Namespace Ok Pi Placeholder SignIn SignOut UserName WhiteSpace
命名规范
1 大小写约定
因为 CLR 支持许多编程语言,这些语言有的区分大小写,有的不区分,所以不应该只用大小写来区分名字。但是,大 小写对增强名字可读性的重要性怎么强调也不过分。以下的规范展示了一种使用大小写的简单方法,如果一致地使用, 那么会使类型、成员以及参数的标识符更易于阅读。
1.1 标志符的大小写规则