一. 目标
1.安全
代码完成所需的功能之余,不要产生负作用,要稳定可靠.
2.易读
类,实例,成员变量,成员函数的命名一目了然
3.美观
尽量统一项目组内人员的编程风格,保证一致性,统一性.
二.具体注意事项.
(一)命名
1.命名原则
(1)所有的函数(变量/类/文件名)应该代表其实际的作用.应该使用具有意义的单词或多个词组合,但不要使用人名,项目组名.
(2)所有的函数(变量/类名)一律使用英文.
(3)使用多个单词时不需要使用连线(如下划线)
(4)多个词组合较长时,可以使用单词的缩写.
(5)不得使用非常相近的名字来表示几个不同含义的函数(变量/类).
(6)命名时请考虑名字的唯一性和含义的准确性.
(7)命名采用三种格式,Pascal(大小写),Camel(大小写混合),首字母全部大写格式如:ID
2.变量的命名
(1)变量名一般由"前缀+类型修饰+代表变量含意的英文单词或单词缩写"等部分组成.
如:
*前缀(以下划线分割):
t_:表示线程的全局变量.如:t_nCount
m_:表示类成员变量(包含类表态变量)如:m_dwFlags
_ 局部变量以”_”开头,如 _userName
*主体使用一个或多个单词表示变量代表的确切含义,参见下面的大小写规则。
*类型修饰(小写字母):
n |
l |
s |
u |
f |
b |
by |
ch |
sz |
str |
dou |
int |
long |
short |
uint |
float |
bool |
byte |
char |
char[] |
String |
double |
(2)针对异常捕获过程中的Exception变量命名,在没有冲突的情况下,统一命名为 e;
(3)使用C# 的特有类型,而不是System命名空间中定义的别名类型。如:
int age;
string name;
object contactInfo;
而不是:
Int16 age;
String name;
Object contactInfo;
这么做是基于如下两点原因:(1)规范性和一致性;(2)便于跨语言平台的移植。
3.函数的命名
(1)使用动宾词组表达函数所做的事.命名采用Pascal形式
如:ShowUserInfo(),BoundGridView()等
(2)同名的函数(重载函数)在功能上应该完全相同,在参数上的差别也应一目了然.
(3)不得出现名字非常相近但功能不符的函数.如:CreatePage1(),CreatePage2()等.
4.类命名
(1)名字应该能够标识事物的特性.如Public class Employee()
(2)名字尽量不使用缩写,除非它是众所周知的.
(3)名字可以有两个或三个以上单词组成,但通常不应多于三个。
(4)在名字中,所有单词第一个字母都大写。缩写都要大写。
(5)不要使用下划线连接符(_).
如:public classs EmployeeComputeSalary 即采用Pascal大小写形式。
5.控件命名规则
控件命名=Web控件缩写前缀+"_"+变量名
控件 |
Label |
TextBox |
ListBox |
DropDownList |
GridView |
DataGrid |
DataSet |
缩写 |
lbl |
tbx |
lbx |
ddl |
gv |
dg |
ds |
控件 |
Panel |
SqlDataSourse |
DataList |
Repeater |
|
|
|
缩写 |
pnl |
sds |
dl |
rpt |
|
|
|
6.文件命名
(1)文件命名要具有实际意义。
(2)源文件应尽量使用8.3格式,文件名只能包含字母,数字和下划线,不得使用其他的字母,超长的文件名应使用缩写方式减少文件名的长度,(视具体情况而定);
*缩写一般可以去掉无意字母以及不发音字母。
*单词的首字母一般应该保留。
*当一个单词必须编写成一个字母时,应该选用最有代表性的字母或首字母。
*多音节的单词可以去掉后面的音节而只保留有意义的音节。
*可以使用一些谐音表示一个单词,如2表示to,4表示four等等,
(3)当单词数量少,字母少时不需要缩写词。
(4)临时文件必须调用系统函数生成,禁止使用固定文件名,一般情况下,临时文件应在系统临时目录下(通过系统函数取到临时目录名)生成。
7.参数的命名
一般要采用大小写混合格式。如protect bool login(string userName,string userPass)
(二)代码格式书写规范
1.代码书写格式
(1)所有的缩进TAB键为4个空格,每个单词的首字符大写,其余小写。
(2)在代码中垂直对齐左括号和右括号。例:
if(x==0)
{
Response.Write("用户名必须输入!");
}
不允许以下情况:
if(x==0){
Response.Write("用户名必须输入!");}
或者 if(x==0){Response.Write("用户名必须输入!");}
(3)在大多数运算符之前和之后使用空格,这样做时不会改变代码的的意图却可以使代码容易阅读。
例:int j = i + k;而不应写为:int j=i+k;
(4)缩写SQL语句时,对于关键字使用全部大写,对于数据库元素(如表,列和视图)使用大小写混合)。
(5)将每个主要的SQL子句放在不同的行上,这样更容易阅读和编辑语句。
2注释的写法
(1)在你劳神的地方请加上详细的注释说明,除了最简单的存取成员变量的Set/Get成员函数之外,其余大部分的函数写上注释是良好的习惯,尽量使你的程序让别人很容易看懂。
(2)大多的注释会使程序很难看,但一些复杂的算法和数据结构和数据结构处还是要加上注释的,这样别人就容易看懂,否则时间长了,你自己都未必能看明白了。
(3)如果是对某一段程序(算法/结构)的注释,在程序头直接用//再空一格进行说明,一行不要超过80个字符。
(4)为了防止在阅读代码时不得不左右流动源代码编辑器,每行代码或注释在不得超过一显示屏。
(5)使用连续的多个//表示注释行(不要超过80字符)。
(6)文件头部应有注释,简单描述文件的内容
(7)对于程序中的比较关键的算法和函数,必须加注释。
3.cs文件的书写
(1)各个部分应使用注释行和空行分割,并在必要的地方写上注释。
(2)函数之间用注释各空行分割。中间的内容缩进一个TAB
三.其他
1.变量
(1)float和bool禁止用"=="判断.bool应该用逻辑运算关系符,而float应该用差值区间来判断"相等";
(2)类型转换一律用显示类型转换
(3)类型的长度一律用sizeof()获得;
(4)当声明一个变量时,务必要自已初始化一下变量;
2.函数
(1)功能单一,函数名要名符其实.
(2)要易懂,实现时不要过分追求技巧,优化放到后面去做.
(3)长度一般禁止超过200行.
(4)要检查输入值是否合法,实现(成员)函数时务必要求输入参数是在要求范围之内,尤其你定义的(成员)函数给别人调用时,要判断其合法性.
(5)调用函数时要严格按照接口规范调用,调用后要判断执行情况,并做适当的错误处理(尔后会给出错误和异常处理规范)
(6)尽量避免整块复制代码段,如果出现这样的情况要分析原因,如果这段代码完成独立的功能,应考虑使用函数,否则,应考虑使用宏定义,否则因为修改引起的不一致往往是错误的根源.
(7)除极其简单的函数外,其他的函数在稿处必须加上FMAT_TARCE(),参见错误异常处理规范.
(8)函数的出口尽量唯一,最好在出口处加上FMAT_TRCE();
(9)写代码时,尽量减少堆的分配次数,能使用Stack的尽量使用Stack
(10)函数编写必须精练,消除冗余的代码,删除不用的变量
(11)if/while等语句中和条件表达式的运算结果必须为显式的Bool量
(12)禁量少使用goto语句()
附:
标识符 大小写方式 示例
标识符大小写规则
标识符 |
大小写 |
示例 |
类 |
Pascal |
AppDomain |
枚举类型 |
Pascal |
ErrorLevel |
枚举值 |
Pascal |
FataError |
事件 |
Pascal |
ValueChanged |
异常类 |
Pascal |
WebException |
只读的静态字段 |
Pascal |
ReadValue |
接口 |
Pascal |
IDisposable |
方法 |
Pascal |
ToString |
命名空间 |
Pascal |
System.Drawing |
属性 |
Pascal |
BackColor |
参数 |
Camel |
typeName |