软件代码编写规范
草稿
2005.2
1 命名规则
1.1.Net命名规则
一致的命名模式是托管类库中可预知性与可发现性最重要的元素之一。对这些命名指南广泛的使用和理解将消除许多最常见的用户问题。本主题提供 .NET Framework 类型的命名指南。对于每个类型,还应该注意关于大写样式、区分大小写和措词的一些通用规则。
1.1.1大写样式
描述用于在类库中命名标识符的 Pascal 大小写、Camel 大小写和全部大写样式。
使用下面的三种大写标识符约定。
Pascal 大小写
将标识符的首字母和后面连接的每个单词的首字母都大写。可以对三字符或更多字符的标识符使用 Pascal 大小写。例如:
BackColor
Camel 大小写
标识符的首字母小写,而每个后面连接的单词的首字母都大写。例如:
backColor
大写
标识符中的所有字母都大写。仅对于由两个或者更少字母组成的标识符使用该约定。例如:
System.IO
System.Web.UI
可能还必须大写标识符以维持与现有非托管符号方案的兼容性,在该方案中所有大写字母经常用于枚举和常数值。一般情况下,在使用它们的程序集之外这些字符应当是不可见的。
下表汇总了大写规则,并提供了不同类型的标识符的示例。
标识符
大小写
示例
Pascal
AppDomain
枚举类型
Pascal
ErrorLevel
枚举值
Pascal
FatalError
事件
Pascal
ValueChange
异常类
Pascal
WebException
注意   总是以 Exception 后缀结尾。
只读的静态字段
Pascal
RedValue
接口
Pascal
IDisposable
注意   总是以 I 前缀开始。
方法
Pascal
ToString
命名空间
Pascal
System.Drawing
参数
Camel
typeName
属性
Pascal
BackColor
受保护的实例字段
Camel
redValue
注意   很少使用。属性优于使用受保护的实例字段。
公共实例字段
Pascal
RedValue
注意   很少使用。属性优于使用公共实例字段。
1.1.2区分大小写
为了避免混淆和保证跨语言交互操作,请遵循有关区分大小写的使用的下列规则:
不要使用要求区分大小写的名称。对于区分大小写和不区分大小写的语言,组件都必须完全可以使用。不区分大小写的语言无法区分同一上下文中仅大小写不同的两个名称。因此,在创建的组件或类中必须避免这种情况。
不要创建仅是名称大小写有区别的两个命名空间。例如,不区分大小写的语言无法区分以下两个命名空间声明。
namespace ee.cummings;
namespace Ee.Cummings;
不要创建具有仅是大小写有区别的参数名称的函数。下面的示例是不正确的。
void MyFunction(string a, string A)
不要创建具有仅是大小写有区别的类型名称的命名空间。在下面的示例中,Point p 和 POINT p 是不适当的类型名称,原因是它们仅在大小写方面有区别。
System.Windows.Forms.Point p
System.Windows.Forms.POINT p
不要创建具有仅是大小写有区别的属性名称的类型。在下面的示例中,int Color 和 int COLOR 是不适当的属性名称,原因是它们仅在大小写方面有区别。
int Color {get, set}
int COLOR {get, set}
不要创建具有仅是大小写有区别的方法名称的类型。在下面的示例中,calculate 和 Calculate 是不适当的方法名称,原因是它们仅在大小写方面有区别。
void calculate()
void Calculate()
1.1.3缩写
为了避免混淆和保证跨语言交互操作,请遵循有关区缩写的使用的下列规则:
不要将缩写或缩略形式用作标识符名称的组成部分。例如,使用 GetWindow,而不要使用 GetWin。
不要使用计算机领域中未被普遍接受的缩写。
在适当的时候,使用众所周知的缩写替换冗长的词组名称。例如,用 UI 作为 User Interface 的缩写,用 OLAP 作为 On-line Analytical Processing 的缩写。
在使用缩写时,对于超过两个字符长度的缩写,请使用 Pascal 大小写或 Camel 大小写。例如,使用 HtmlButton 或 htmlButton。但是,应当大写仅有两个字符的缩写,如,System.IO,而不是 System.Io。
不要在标识符或参数名称中使用缩写。如果必须使用缩写,对于由多于两个字符所组成的缩写请使用 Camel 大小写,虽然这和单词的标准缩写相冲突。
1.1.4措词
避免使用与常用的 .NET Framework 命名空间重复的类名称。例如,不要将以下任何名称用作类名称:SystemCollectionsFormsUI。有关 .NET Framework 命名空间的列表,请参见类库。
另外,避免使用和以下关键字冲突的标识符。
AddHandler
AddressOf
Alias
And
Ansi
As
Assembly
Auto
Base
Boolean
ByRef
Byte
ByVal
Call
Case
Catch
CBool
CByte
CChar
CDate
CDec
CDbl
Char
CInt
Class
CLng
CObj
Const
CShort
CSng
CStr
CType
Date
Decimal
Declare
Default
1.1.5避免类型名称混淆
语言
不同的编程语言使用不同的术语标识基本托管类型。类库设计人员必须避免使用语言特定的术语。请遵循本节中描述的规则以避免类型名称混淆。
使用描述类型的含义的名称,而不是描述类型的名称。如果参数除了其类型之外没有任何语义含义,那么在这种罕见的情况下请使用一般性名称。例如,支持将各种数据类型写入到流中的类可以有以下方法。
[Visual Basic]
Sub Write(value As Double);
Sub Write(value As Single);
Sub Write(value As Long);
Sub Write(value As Integer);
Sub Write(value As Short);
[C#]
void Write(double value);
void Write(float value);
void Write(long value);
void Write(int value);
void Write(short value);
不要创建语言特定的方法名称,如下面的示例所示。
[Visual Basic]
Sub Write(doubleValue As Double);
Sub Write(singleValue As Single);
Sub Write(longValue As Long);
Sub Write(integerValue As Integer);
Sub Write(shortValue As Short);
[C#]
void Write(double doubleValue);
void Write(float floatValue);
void Write(long longValue);
void Write(int intValue);
void Write(short shortValue);
如果有必要为每个基本数据类型创建唯一命名的方法,那么在这种极为罕见的情况下请使用通用类型名称。下表列出基本数据类型名称和它们的通用替换。
C# 类型名称
Visual Basic 类型名称
JScript 类型名称
Visual C++ 类型名称
表示形式
通用类型名称
sbyte
SByte
sByte
char
int8
SByte
byte
Byte
byte
unsigned char
unsigned int8
Byte
short
Short
short
short
int16
Int16
ushort
UInt16
ushort
unsigned short
unsigned int16
UInt16
int
Integer
int
int
int32
Int32
uint
UInt32
uint
unsigned int
unsigned int32
UInt32
long
Long
long
__int64
int64
Int64
ulong
UInt64
ulong
unsigned __int64
unsigned int64
UInt64
float
Single
float
float中文写代码软件
float32
Single
double
Double
double
double
float64
Double
bool
Boolean
boolean
bool
bool
Boolean
char
Char
char
wchar_t
char
Char
string
String
string
String
string
String
object
Object
object
Object
object
Object
例如,支持将从流读取各种数据类型的类可以有以下方法。