一个好的名字能够让你的程序更加好懂别人一看到这个名字就能够猜到你在做什么大量好的名字离不开好的命名规范而一个好的命名规范要做到两点
l 合理即容易被大家接受和使用从这个意义上来说好的命名规范不应该太长它应该让你花上分钟就能看完写过几段代码就能熟悉
l 风格一致即前后一致例外的情况少
符合以上两点的命名规范就是好的虽然它们具体的规则可能不同有的时候命名规范体现了编程思想比如对于接口在NET中一般要求以I开头在Java中没有这个要求原因是Java认为接口和抽象类往往可以转化比如在项目初期可能定义的是接口而在后面可能把它改成抽象类如果名称一致就避免了名称的改动
另外不同的命名规范也体现了程序发展历程比如匈牙利命名法要求类型前缀故在C++VBPB一般都会大量出现类型前缀像intAmount strName等而现在一般没有这个要求原因是)有些类型可能会做修改比如Int变成Int另外对于一些动态语言(Python JavaScript)来说其类型是变化的编译时无法确定)现在的开发环境更加的友好即使在开发的时候你也很容易知道变量的类型(只要鼠标移上去)
本文的命名规范主要基于微软的标准另外加上实际开发的一些具体经验它还在不断的维护和完善你可以针对不同项目的要求做相应的调整
命名样式
样式分类
名称
解释
适用环境
例子
Pascal 大小写
首字母和后面的每个单词的首字母都大写其他字母小写
BackColor
Camel 大小写
首字母小写而后面的每个单词的首字母大写其他字母小写
backColor
大写
所有字母都大写
l 缩写
l 少于等于个字符
SystemIO
SystemWebUI
样式的选择
标识符
命名格式
例子
备注
参数局部变量
Camel
public int GetTypeID(string typeName)
{ int typeID; … }
PrivateProtected的实例字段
Camel
private string redValue;
protected bool isOk;
界面控件
Camel
private Label lblAlarm;
缩写
大写
namespace SystemIO
{ … }
缩写必须是被普遍接受众所周知的缩写
除上面的标识符外
Pascal
public SystemDrawingColor BackColor
{ … }
原则和习惯首要原则
有意义的描述性的词语来命名能够一眼看出它作什么别使用会引起误解的名字如果名字一目了然就无需用文档来解释方法的功能了
除约定俗成的别用缩写用name address salary等代替 nam addr sal
除用于循环别使用单个字母的变量象i n x 等 而要使用 index temp等
for ( int i = i < count i++ ){ ……}其他习惯l除了界面控件外不要使用类型前缀比如使用名称amount而不是 intAmount
l类使用名词名词短语命名比如public class FileStream
l方法使用动词动词短语开始比如CreateUser() RemoveAt()等
l接口以 I 开始后面加上名词名词短语形容词命名比如IDisposable
l常量所有单词大写多个单词之间用 _ 隔开public const string PAGE_TITLE = Welcome
l命名空间
基本格式
CompanyName/ProjectNameTechnologyName[Feature][Design]
a)CompanyName/ProjectName公司名项目名称或产品名称
b)TechnologyName稳定的公认的技术名称或架构层次名称
c)[Feature][Design]可选的功能与设计
例如
//微软公司的Web开发中的UI中的Design
namespace MicrosoftWebUIDesign
//西门子报价项目中业务逻辑层中的项目管理
namespace SiemensQuotationBusinessRulesProjectManagement
几个规则
a)嵌套的命名空间应当有依赖关系例如SystemWebUIDesign 中的类依赖于 SystemWebUI 中的类而不能相反
b)命名空间和类不能使用同样的名字例如命名空间Debug下最好不要又一个类名为Debug
c)如果公司名项目名称或产品名称太长的话可以用缩写(且全部大写)
控件命名控件的名称中需要加上前缀之所以这样做是为了区分界面的控件和普通的对象由于界面修改往往非常频繁区分开来能使你更快速的找到控件从而修改界面举一个例子
界面有个TextBox个Label一个TextBox对应一个Label为了完成读写你至少要有条语句来从控件进行取赋值操作如果有前缀的话输入thistxt你就几乎马上能找到这个控件反之如果没有前缀由于窗口或页面对象拥有大量的属性和变量(> 个)你将花费大量时间来查找另外一个TextBox对应一个Label(一个代表值一个代表名称)它们往往指同一样事物如果有前缀就很容易区分这两个控件
控件
前缀
备注
Label
lbl
比如lblName
TextBox
txt
Button
btn
CheckBox
chk
RadioButton
rdo
CheckBoxList
chklst
RadioButtonList
rdolst
ListBox
lst
DropDownList
ddl
DataGrid
dg
DataList
dl
Image
img
Table
tbl
Panel
pnl
LinkButton
lnkbtn
ImageButton