C#进阶(一)
.NET中命名规则(附:匈牙利命名法)
在你的代码中使用注释语句和下边就要讲的统一命名法则是一个很好的习惯,它们会使你的代码更加通用。我(作者)已经在微软工作了近五年的时间了。我不知道你是否跟我一样,在集成和除BUG时遇到很多问题----因为开发者没有遵守统一的命名法则和写注释语句。
在以前版本的Visual Studio中,微软曾建议使用匈牙利命名法来写代码,并鼓励开发这位写出统一格式的代码而使用相同的法则。例如:
变量
命名
CString
SzString
char
CmyChar
char*
PmyChar
Long
LMyVariable
LPCSTR
LpStr
Int
NMyNumber
在最近发布的.NET和它的编程语言中,微软更换了他的这一法则。如果你用过Delphi编程,你会看到新的法则与Delphi(Pascal)有些相似。
为避免代码冲突(这样做也会让你的代码更为通用),就要使用命名法则,这是一个很好的编程习惯。好啦,这里介绍一些常用的法则。
◆命名变量、方法、以及属性
变量、方法和属性的名称的第一个字母应该大写,并且名称应该能表达出它们的用途(或者说是意义)。
变量
.NET 命名
匈牙利命名
描述
Cstring
EmployeeName
szName
Name of an employee.
Int
AttendanceCounter
nCounter
A counter of type long.
Long
NumberOfBytes
lBytes
A long type variable stores bytes.
有时我们习惯于在定义中使用下划线 "_",例如: Add_Data(int a, int b). 按照新的命名法则,这不是一个好的编程习惯,虽然它并没有错。你应该将定义 Add_Data 改为 AddData。 这不是微软的标准,你也不是必须按照这些法则。但是,在一些地方你会明白下边这些法则的合理性。
就我个人而言,我更喜欢匈牙利命名法。当然,变量也使用同样的法则。如果你记得匈牙利命名法的话,一个布尔型的变量定义以"b"打头,比如:
BOOL bFlag = TRUE;
新的法则不推荐使用Flag 和 "b":
bool IsFileFound = true;
你可以浏览一下MSDN,那里边有更多有关新的法则的说明。
◆命名组件以及集合(Assemblies)
为避免代码冲突, 按照命名法则给你的库(在 .NET 中称为assembly)命名是一个良好的编程习惯。假定你是MindCracker 公司的,你在开发一个用于扩充C# database 类的库, 把它的名字命名为MindCracker.DatabaseAssembly.ADOSet 要比MyAssembly.Database.ADOSet好的多。
再假定你的库有一个方法,它是从表中读取数据,并返回一个数据集。你如果取名为 DataSet return_data()的话,改为DataSet ReturnData()好啦.
你还应该在命名中遵循一个统一的单词顺序。例如,你有俩个表,分别为Employee 和 Manager ,并且你还为它们分别定义了一个向表里边插入一条记录的方法, 那么方法名AppendEmployee 和 AppendManager 要比AppendEmployee 和 ManagerAppend要好。
◆循环
循环或者是其它块儿结构应该对齐左右大括号,就像下边这样:
for (i = 0; i < 100; i++)
{
...
}
或者
for (i = 0; i < 100; i++){
...
}
我更喜欢的二种方法,因为很容易清楚一个块儿结构和嵌套块儿结构。
◆匈牙利命名法(efoxxx附)
匈牙利命名法是一名匈牙利程序员发明的,而且他在微软工作了多年。此命名法就是通过微软的各种产品和文档传出来的。多数有经验的程序员,不管他们用的是哪门儿语言,都或多或少在使用它
这种命名法的基本原则是:
变量名=属性+类型+对象描述
即一个变量名是由三部分信息组成,这样,程序员很容易理解变量的类型、用途,而且便于记忆。
下边是一些推荐使用的规则例子,你可以挑选使用,也可以根据个人喜好作些修改再用之。
⑴属性部分:
全局变量: g_
常量 : c_
类成员变量: m_
⑵类型部分:
指针: p
句柄: h
布尔型: b
浮点型: f
无符号: u
⑶描述部分:
初始化: Init
临时变量: Tmp
目的对象: Dst
源对象: Src
窗口: Wnd
下边举例说明:
hwnd: h表示句柄,wnd表示窗口,合起来为“窗口句柄”。
m_bFlag: m表示成员变量,b表示布尔,合起来为:“某个类的成员变量,布尔型,是一个状态标志”。