二、命名规范
一、大小写约定
1、标识符的大小写规则
不要用下划线来区分单词,也不要在标识符中使用下划线。
PascalCasing约定被用于除参数名之外的所有标识符。标识符中的每个单词的首字母大写。
camelCasing约定仅用于参数名,除第一个单字外,所有单词的首字母大写。
二、通用命名约定
1、标识符名字的选择
并不是所有编程语言都区分大小写,所以不要仅仅以大小写来区分不同的名字
框架中标识符的名字意思的清楚要比长度更重要。要更注重可读性,并非简短性。
不要使用下划线或是分隔符等非字母或非数字的字符作为标识符的名字。
不要使用匈牙利命名法???
2、为已有API的新版本命名
通常情况,不要使用缩写词作为标识符的一部分;不要使用未被广泛接接受的首字母缩写词。
对于类型名要使用CLR通用的类型名,比如,应使用ToInt64而非ToLong
为已有API的新版本命名规则 :
在创建已有API的新版本时,使用与旧版本相似的名字
优先使用后缀而非前缀表示已有AP的新I版本,但不要使用类似“Ex”的后缀来区分相同API的不同版本。
或使用数字后缀表示已有API的新版本
3、程序集和DLL的命名
要为程序集和DLL选择提示性的名字。程序集和DLL的名字不一定非要和命名空间相对应,但在给程序集命名时遵循命名空间的名字也是合理的。
考虑按照下面的模式给DLL命名:<Company>.<Component> .dll 其中<Component>可包含一个或多个以点号分隔的子句。
4、命名空间的命名
命名空间命名的一般规则:<Company> .(<Product>|<Technology>)[.<Feature>][.Subnamespace]
使用公司名称作为命名空间的前缀可以避免与另一家公司使用相同的名字。
要用稳定的、与版本无关的的产品名称作为名字空间的第二层。
不要根据公司的组织架构来决定命名空间的层次结构。
要使用PascalCasing大小写风格,并用点号来分隔名字空间中的各部分,比如:Microsoft.Office.PowerPoint
考虑在适当的时候在命名空间中使用复数的形式。
不要用相同的名字既又作为命名空间,又作为该命名空间下的类型的名字。
命名空间可以分为:
(1)应用程序模理命名空间
System.Windows*
System.Web.UI*
(2)基础设施命名空间
System.Windows.Forms.Design
*.Design
*.Permissions
(3)核心命名空间
System
System.IO
System.Xml
System.Net
(4)技术命名空间
包括所有那些以两个前缀(<Company>.<Technology>)开始的命名空间:
Microsoft.Build.Utilities
Microsoft.Build.Tasks
5、类、结构和接口的命名
一般说来,类型名称应该是个名词词组,因为他们代表着系统中的一个实体。一条很好的经验法则是如果无法为类找到一个名词词组,那么可能应该重新考虑这个类的总体设计。
最常用的名称应该是反应出使用场景,而不是类的继承层次。因为大多数用户只会使用类继承的根节点,他们几乎不会去关心类型的层次结构。
下面的命名规范适用于一般类型的命名:
(1)要用名词或词组给类型命名,在少数情况下也可以使用形容词给类型命名。
(2)不要给类型名加前缀。 唯一的前缀是接口的“I”。
(3)考虑让派生类的名字,以基类的名字接尾,比如:ArgumentException与Exception
(4)要让接口的名字以“I”开头
(5)要确保一对类和接口的名字只差一个"I"
泛型类型参数命名:
要用描述性的名字来命名泛型类参数,比如:public interface ISessionChannel<TSession> {....}
对于泛型方法,对于其参数可以使用T,U,V等一个大写字母。
考虑在类型参数名中显示出施加于该类型参数上的限制,比如:把一个限制为ISession的类型参数命名为TSession。
枚举类型命名:
要用单数名词来名枚举类型
要用复数名词来命名表示位域的枚举类型,这样的枚举类型与称为标记枚举,比如:
public enum ConsoleModifiers
{
Alt,
Control,
Shift
}
不要给枚举类型添加"Enum"的后缀
不要给枚举类型添回“Flag”的后缀
不要给枚举类型值添加前缀,比如:
public enum ImageMode
{
ImageModeBitmap,// 多余的"ImageMode"
ImageModeRgb,
ImageModeIndexed
}
6、类型成员的命名
(1)方法的命名
因为方法是用来执行操作的,因此框架设计的规范要求方法的名必须是动词或是动词词组。它还用来把方法同属性和类型名区分开,属性来类型名是名词或形容词。
(2)属性的命名
要不名词或形容词来命名属性
不要让属性名看起来与Get方法的名字相似,比如:TextWriter属性名与GetTextWriter方法(名字相似,不好)
要用肯定性的短语来命名布尔属性,比如:CanSeek而不是CantSeek。如有需要可以选择性的加上“Is”,“Can”,“Has”等前缀
可考虑用属性的类型名给属性命名。
(3)事件的命名
事件表示一些动作,所以和方法一样,要用动词来命名,但除此之外,还要用动词的时态来表示事件发生的时间
要用动词或动词短语来命名事件
要用现在时、过去时来赋予事件名以前或以后事件
不要用“Before”或“After” 前缀后缀来区分前置事件和后置事件
要在命名事件处理函数后加上“EventHandler“后缀,比如:ClickedEventHandler
要在事件处理函数中,使用send和e作为两个参数的名字
要在命名事件的参数类时加上”EventArgs“后缀
(4)静态字段的命名
命名静态字段时,使用PascalCasing大小写风格
要用名词或名词短语来命名字段
不要给字段名加上前缀,比如:”g_“,"m_"
7、参数的命名
要在命名时使用camelCasing风格
要使用具有描述性的参数名
考虑根据参数的意思而不是参数的类型来命名参数(类型的有关信息已有开发工具提供,设计者可以使用参数名称更好的描述参数的意义)
不应该使用匈牙利命名法
8、资源的命名
本地化的资源就好比属性,可以通过特定的对象来引用。
要在命名资源关键字时使用PascalCasing大小写风格
要使标识字符具有描述性,而不是字符变短(应该尽可能的使字符简洁,但不能牺牲可读性)
要在命名资源时,仅使用字母、数字、下划线
要用点号给标识符清楚的划分层次,比如:如果设计菜单系统,可以如下命名
Menus.FileMenu.Close.Test
Menus.FileMenu.Close.Color
Menus.FileMenu.SaveAs.Test
Menus.FileMenu.SaveAs.Color
要在为异常的消息资源命名时遵循的命名约定:资源标识符应该是异常的类型名加上一个简短的异常标识符,之前以点号分隔
ArgumentException.IllegalCharacters
ArgumentException.Invalidname
ArgumentException.FileNameIsMalformed