C#编码规范
2005-04-24 11:02
489 查看
编写人: kkding
日 期: 2003-12-22
当前版本: V0.5
作者
日期
批准日期
标志
备注
0.5
kkding
2003-12-22
C
注:C-创建; M-修改; D-删除; A-添加
目录
1 目的....3
2 范围....3
3 规范内容....3
3.1 文件规范...3
3.1.1 文件命名...3
3.1.2 文件内容格式...3
3.2 代码格式...4
3.3 注释(Comment)规范...5
3.3.1 模块(类)注释规范...5
3.3.2 类属性注释规范...6
3.3.3 方法注释规范...6
3.3.4 代码间注释规范...6
3.4 变量(Variable)命名规范...6
3.4.1 程序文件(*.cs)中的变量命名规则...6
3.4.2 控件命名规则...8
3.4.3 常量命名规范...9
3.4.4 类(Class)命名规范...9
3.4.5 接口(Interface)命名规范...10
3.4.6 方法(Method)命名规范...10
3.4.7 命名空间(NameSpace)命名规范...10
4 实施建议....10
编码规范对于程序员而言尤为重要,有以下几个原因:
-一个软件的生命周期中,80%的花费在于维护
-几乎没有任何一个软件,在其整个生命周期中,均由最初的开发人员来维护
-编码规范可以改善软件的可读性,可以让程序员尽快而彻底地理解新的代码
-如果你将源码作为产品发布,就需要确任它是否被很好的打包并且清晰无误,一如你已构建的其它任何产品
为了执行规范,每个软件开发人员必须一致遵守编码规范。每个人。
引用
命名空间
类体
变量(代理事件):用#region变量………#endregion包括
属性:用#region属性………#endregion包括
构造:
方法(事件的实现):用#region方法………#endregion包括
u 在代码中垂直对齐左括号和右括号。
if(x==0)
{
Response.Write("用户编号必须输入!");
}
不允许以下情况:
if(x==0){
Response.Write("用户编号必须输入!");
}
或者:
if(x==0){Response.Write("用户编号必须输入!");}
u 为了防止在阅读代码时不得不滚动源代码编辑器,每行代码或注释在1024*800的显示频率下不得超过一显示屏
u 当一行被分为几行时,通过将串联运算符放在每一行的末尾而不是开头,清楚地表示没有后面的行是不完整的。
u 每一行上放置的语句避免超过一条。
u 在大多数运算符之前和之后使用空格,这样做时不会改变代码的意图却可以使代码容易阅读。
例:
intj=i+k;
而不应写为
intj=i+k;
u 将大的复杂代码节分为较小的、易于理解的模块。
u 编写SQL语句时,对于关键字使用全部大写,对于数据库元素(如表、列和视图)使用大小写混合。
u 将每个主要的SQL子句放在不同的行上,这样更容易阅读和编辑语句,例如:SELECTFirstName,LastName
FROMCustomers
WHEREState='WA'
///<summary>
///定义某某类的方法
///</summary>
///<seecref="Author">作者</see>
///<seecref="Email">email@e-citycard.com</see>
///<seecref="Data">2003-12-17</see>
如果模块有修改,则每次修改必须添加以下注释:
///<remark>备注版本修改信息,修改了那些,时间,每次依次增加remark</remark>
///<summary>
///属性说明
///</summary>
///<summary>
///说明:<对该方法的说明>
///</summary>
///<paramname="<参数名称>"><参数说明></param>
///<returns>/<对方法返回值的说明,该说明必须明确说明返回的值代表什么含义>
///</returns>
单行注释:
//<单行注释>
多行注释:
/*多行注释1
多行注释2
多行注释3*/
代码中遇到语句块时必须添加注释(if,for,foreach,……),添加的注释必须能够说明此语句块的作用和实现手段(所用算法等等)。
程序中变量名称=变量的前缀+代表变量含意的英文单词或单词缩写。
1. 类模块级的变量类型的缩写作前缀
publicclasshello
{
privatestrings_Name;
privateDateTimedt_Date;
}
2. 类的属性所对应的变量,采用属性名前加类型的缩写作前缀前缀的形式
publicclasshello
{
privatestrings_Name;
publicstringName
{
get
{
returnm_Name;
}
}
}
3. 过程级的变量不使用前缀
publicclasshello
{
voidsay()
{
stringSayWord;
}
}
4. 过程的参数使用“p_”作为参数
publicclasshello
{
voidsay(stringp_SayWord)
{
}
}
补充说明:
针对异常捕获过程中的Exception变量命名,在没有冲突的情况下,统一命名为e;
如果有冲突的情况下,可以重复e,比如:ee。
Try
{
//yourcode
try
{
//code
}
catch(Exceptionee)
{
//yourcode
}
}
catch(Exceptione)
{
//yourcode
}
补充:如果捕获异常不需要作任何处理,则不需要定义Exception实例
例:
try
{
//yourcode
}
catch(Exception)
{
}
5. 鉴于大多数名称都是通过连接若干单词构造的,请使用大小写混合的格式以简化它们的阅读。每个单词的第一个字母都是大写.
6. 即使对于可能仅出现在几个代码行中的生存期很短的变量,仍然使用有意义的名称。仅对于短循环索引使用单字母变量名,如i或j。
7. 在变量名中使用互补对,如min/max、begin/end和open/close。
8. 不要使用原义数字或原义字符串,如for(i=1,i<7;i++)。而是使用命名常数,如for(i=1,i<NUM_DAYS_IN_WEEK;i++)以便于维护和理解。
例:
privateconstbool WEB_ENABLEPAGECACHE_DEFAULT =true;
privateconstint WEB_PAGECACHEEXPIRESINSECONDS_DEFAULT=3600;
privateconstbool WEB_ENABLESSL_DEFAULT =false;
注:
变量名和常量名最多可以包含255个字符,但是,超过25到30个字符的名称比较笨拙。此外,要想取一个有实际意义的名称,清楚地表达变量或常量的用途,25或30个字符应当足够了。
2. 名字尽量不使用缩写,除非它是众所周知的。
3. 名字可以有两个或三个单词组成,但通常不应多于三个。
4. 在名字中,所有单词第一个字母大写,缩写都要大写。
例如 IsSuperUser,包含ID的,ID全部大写,如CustomerID。
5. 使用名词或名词短语命名类。
6. 少用缩写。
7. 不要使用下划线字符(_)。
例:
例:
interfaceIDBCommand;
interfaceIButton;
另:方法开头尽量使用e文动词表示,
如:GetMoney,SetMoney
l 系统设计人员、编码人员、测试人员可以较好的建议,适当地修改完善《C#编码规范》
l 对本文档修改要做出记录,变更版本号。
日 期: 2003-12-22
当前版本: V0.5
版本号 |
日期
批准日期
标志
备注
0.5
kkding
2003-12-22
C
注:C-创建; M-修改; D-删除; A-添加
目录
1 目的
为了保证企业编写出的程序都符合相同的规范,保证一致性、统一性而建立的程序编码规范。编码规范对于程序员而言尤为重要,有以下几个原因:
-一个软件的生命周期中,80%的花费在于维护
-几乎没有任何一个软件,在其整个生命周期中,均由最初的开发人员来维护
-编码规范可以改善软件的可读性,可以让程序员尽快而彻底地理解新的代码
-如果你将源码作为产品发布,就需要确任它是否被很好的打包并且清晰无误,一如你已构建的其它任何产品
为了执行规范,每个软件开发人员必须一致遵守编码规范。每个人。
2 范围
适用于企业所有基于C#.NET平台的软件开发工作。3 规范内容
3.1 文件规范
3.1.1 文件命名
与类名名称相同3.1.2 文件内容格式
开头注释引用
命名空间
类体
变量(代理事件):用#region变量………#endregion包括
属性:用#region属性………#endregion包括
构造:
方法(事件的实现):用#region方法………#endregion包括
3.2 代码格式
u 所有的缩进为4个空格,以空格代替Tab。选中”插入空格(P)”u 在代码中垂直对齐左括号和右括号。
if(x==0)
{
Response.Write("用户编号必须输入!");
}
不允许以下情况:
if(x==0){
Response.Write("用户编号必须输入!");
}
或者:
if(x==0){Response.Write("用户编号必须输入!");}
u 为了防止在阅读代码时不得不滚动源代码编辑器,每行代码或注释在1024*800的显示频率下不得超过一显示屏
u 当一行被分为几行时,通过将串联运算符放在每一行的末尾而不是开头,清楚地表示没有后面的行是不完整的。
u 每一行上放置的语句避免超过一条。
u 在大多数运算符之前和之后使用空格,这样做时不会改变代码的意图却可以使代码容易阅读。
例:
intj=i+k;
而不应写为
intj=i+k;
u 将大的复杂代码节分为较小的、易于理解的模块。
u 编写SQL语句时,对于关键字使用全部大写,对于数据库元素(如表、列和视图)使用大小写混合。
u 将每个主要的SQL子句放在不同的行上,这样更容易阅读和编辑语句,例如:SELECTFirstName,LastName
FROMCustomers
WHEREState='WA'
3.3 注释(Comment)规范
注释规范包括:模块(类)注释规范、类的属性、方法注释规范、代码间注释3.3.1 模块(类)注释规范
模块开始必须以以下形式书写模块注释:///<summary>
///定义某某类的方法
///</summary>
///<seecref="Author">作者</see>
///<seecref="Email">email@e-citycard.com</see>
///<seecref="Data">2003-12-17</see>
如果模块有修改,则每次修改必须添加以下注释:
///<remark>备注版本修改信息,修改了那些,时间,每次依次增加remark</remark>
3.3.2 类属性注释规范
在类的属性必须以以下格式编写属性注释:///<summary>
///属性说明
///</summary>
3.3.3 方法注释规范
在类的方法声明前必须以以下格式编写注释///<summary>
///说明:<对该方法的说明>
///</summary>
///<paramname="<参数名称>"><参数说明></param>
///<returns>/<对方法返回值的说明,该说明必须明确说明返回的值代表什么含义>
///</returns>
3.3.4 代码间注释规范
代码间注释分为单行注释和多行注释:单行注释:
//<单行注释>
多行注释:
/*多行注释1
多行注释2
多行注释3*/
代码中遇到语句块时必须添加注释(if,for,foreach,……),添加的注释必须能够说明此语句块的作用和实现手段(所用算法等等)。
3.4 变量(Variable)命名规范
3.4.1 程序文件(*.cs)中的变量命名规则
程序中变量名称=变量的前缀+代表变量含意的英文单词或单词缩写。
1. 类模块级的变量类型的缩写作前缀
publicclasshello
{
privatestrings_Name;
privateDateTimedt_Date;
}
2. 类的属性所对应的变量,采用属性名前加类型的缩写作前缀前缀的形式
publicclasshello
{
privatestrings_Name;
publicstringName
{
get
{
returnm_Name;
}
}
}
3. 过程级的变量不使用前缀
publicclasshello
{
voidsay()
{
stringSayWord;
}
}
4. 过程的参数使用“p_”作为参数
publicclasshello
{
voidsay(stringp_SayWord)
{
}
}
补充说明:
针对异常捕获过程中的Exception变量命名,在没有冲突的情况下,统一命名为e;
如果有冲突的情况下,可以重复e,比如:ee。
Try
{
//yourcode
try
{
//code
}
catch(Exceptionee)
{
//yourcode
}
}
catch(Exceptione)
{
//yourcode
}
补充:如果捕获异常不需要作任何处理,则不需要定义Exception实例
例:
try
{
//yourcode
}
catch(Exception)
{
}
5. 鉴于大多数名称都是通过连接若干单词构造的,请使用大小写混合的格式以简化它们的阅读。每个单词的第一个字母都是大写.
6. 即使对于可能仅出现在几个代码行中的生存期很短的变量,仍然使用有意义的名称。仅对于短循环索引使用单字母变量名,如i或j。
7. 在变量名中使用互补对,如min/max、begin/end和open/close。
8. 不要使用原义数字或原义字符串,如for(i=1,i<7;i++)。而是使用命名常数,如for(i=1,i<NUM_DAYS_IN_WEEK;i++)以便于维护和理解。
3.4.2 控件命名规则
控件命名=Web控件缩写前缀 +“_”+变量名控件 | 缩写 |
Label | lbl |
TextBox | txt |
CheckBox | chk |
Button | cmd |
ListBox | lst |
DropDownList | drp |
等等 |
3.4.3 常量命名规范
常量名也应当有一定的意义,格式为NOUN或NOUN_VERB。常量名均为大写,字之间用下划线分隔。例:
privateconstbool WEB_ENABLEPAGECACHE_DEFAULT =true;
privateconstint WEB_PAGECACHEEXPIRESINSECONDS_DEFAULT=3600;
privateconstbool WEB_ENABLESSL_DEFAULT =false;
注:
变量名和常量名最多可以包含255个字符,但是,超过25到30个字符的名称比较笨拙。此外,要想取一个有实际意义的名称,清楚地表达变量或常量的用途,25或30个字符应当足够了。
3.4.4 类(Class)命名规范
1. 名字应该能够标识事物的特性。2. 名字尽量不使用缩写,除非它是众所周知的。
3. 名字可以有两个或三个单词组成,但通常不应多于三个。
4. 在名字中,所有单词第一个字母大写,缩写都要大写。
例如 IsSuperUser,包含ID的,ID全部大写,如CustomerID。
5. 使用名词或名词短语命名类。
6. 少用缩写。
7. 不要使用下划线字符(_)。
例:
publicclassFileStream
publicclassButton
publicclassString
3.4.5 接口(Interface)命名规范
和类命名规范相同,唯一区别是 接口在名字前加上“I”前缀例:
interfaceIDBCommand;
interfaceIButton;
3.4.6 方法(Method)命名规范
和类命名规范相同。另:方法开头尽量使用e文动词表示,
如:GetMoney,SetMoney
3.4.7 命名空间(NameSpace)命名规范
和类命名规范相同。4 实施建议
l 先对编码人员进行“专题”培训,让他们掌握此编码规则。l 系统设计人员、编码人员、测试人员可以较好的建议,适当地修改完善《C#编码规范》
l 对本文档修改要做出记录,变更版本号。