c#开发规范.docx
- 文档编号:7663865
- 上传时间:2023-01-25
- 格式:DOCX
- 页数:15
- 大小:21.04KB
c#开发规范.docx
《c#开发规范.docx》由会员分享,可在线阅读,更多相关《c#开发规范.docx(15页珍藏版)》请在冰豆网上搜索。
c#开发规范
C#语言开发规范
(内部资料不得外传)
目录
1关于4
2文件组织4
2.1C#源文件4
2.2目录结构4
3排版4
3.1换行4
3.2空白5
4注释5
4.1块注释5
4.2单行注释5
4.3注释文档5
5定义6
5.1每行定义数6
5.2初始化6
5.3类及接口的定义6
6语句6
6.1简单语句6
6.2返回值语句6
6.3If,if-else,ifelse-ifelse语句6
6.4For/Foreach语句7
6.5While/do-while语句8
6.6Switch语句8
6.7Try-catch语句8
7空白9
7.1空行9
7.2类部空格9
7.3表格化格式10
8命名约定10
8.1大写样式10
8.2命名指导10
1关于
本文档为使用C#进行开发的程序员提供编码规范的指导,其提供的一些编码通用规则也可以供使用其他语言编程的开发者参考。
2文件组织
C#源文件
尽量保持类文件的简短,最好不要超过2000行,每个类分别存放在单独的文件中,文件名称=类名称+.cs
目录结构
每个命名空间对应一个目录.(例如命名空间GIS.MyMedia.Web.UI对应目录为GIS/MyMedia/Web/UI,这样可以方便的根据命名空间找到其相应的目录。
3排版
换行
当代码一行写不下时,参考如下规则换行:
-在逗号后面换行.
-在操作符后面换行.
-对于表达式选用高级别处换行,而不要在低级别处换行
-新行表达式应该与上一行同一级别的该表达式对齐
方法调用换行示例:
longMethodCall(expr1,expr2,
expr3,expr4,expr5);
算术表达式换行示例:
最佳风格:
Var=a*b/(c-g+f)+
4*z;
不良风格:
var=a*b/(c-g+
f)+4*z;
第一个编码为最佳风格,因为其在括号外换行,使用了高级别处换行的规则.注意在排版时,整个表达式前面的空白使用Tab,表达式内部的空白使用空格
>var=a*b/(c-g+f)+
>......4*z;
'>'代表tab,'.'代表空格.
空白
使用Tab键而不要使用空格来作为排版的缩进字符,使用Tab有如下好处:
-Tab键只有一个字符,减少击键次数。
-如果你想增加或者减少缩排的空间,可以选定需要缩排的代码块,然后使用Tab增加缩排空间,使用Shift-Tab减少缩排空间.
4注释
块注释
尽量避免使用大块注释.对于代码描述使用C#推荐的///描述格式.如果你想使用块注释建议使用如下风格:
/*Line1
*Line2
*Line3
*/
这种注释风格在视觉上和代码区分开来
在注释后应该紧跟一个空白行。
单行注释
使用//作为单行注释
一般注释的文本长度最好不要超过代码的长度,如果一行代码需要很多的文本来解释,往往说明该代码过于复杂而可能存在Bug。
注释文档
.net支持注释文档,通过在编译选项中指定XML的文件名称,可以让VS.net自动生成注释文档.这些注释都是包含特定的XML标签。
单行注释风格如下,例如:
///
///Thisclass...
///
多行注释风格如下:
///
///Thisexceptiongetsthrownassoonasa
///Bogusflaggetsset.
///
所有的xml注释必须以三个/开头。
Ndoc或者类似工具可以根据该注释文档生成.chm的帮助文件
5定义
每行定义数
一个声明对应于一行,这样可以方便注释,
intlevel;//indentationlevel
intsize;//sizeoftable
定义的命名必须清晰的代表该变量的含义
初始化
尽量在定义时初始化,如下:
stringname=myObject.Name;
or
intval=time.Hours;
注意:
如果在代码中引用并初始化对话框类,则应该使用语法:
using(OpenFileDialogopenFileDialog=newOpenFileDialog())
{
...
}
类及接口的定义
编写类及接口时,遵循如下规则:
不要在方法名称及圆括号间使用空格
大括号“{”应该出现在定义的下一行,“{”及“}”单独占一行
6语句
简单语句
每行应该仅包含一个语句.
返回值语句
返回语句不要使用最外面的圆括号
Don'tuse:
return(n*(n+1)/2);
use:
returnn*(n+1)/2;
If,if-else,ifelse-ifelse语句
if,if-else,ifelse-ifelse语句应该按照如下示例使用:
if(condition)
{
DoSomething();
...
}
if(condition)
{
DoSomething();
...
}
else
{
DoSomethingOther();
...
}
if(condition)
{
DoSomething();
...
}
elseif(condition)
{
DoSomethingOther();
...
}
else
{
DoSomethingOtherAgain();
...
}
For/Foreach语句
使用for语句的格式:
for(inti=0;i<5;++i)
{
...
}
空白的for语句:
for(initialization;condition;update);
foreach使用格式:
foreach(intiinIntList)
{
...
}
注意:
即便是循环语句仅一行代码,也要使用括号
While/do-while语句
while语句格式:
while(condition)
{
...
}
空白while语句格式
while(condition);
do-while语句格式
do
{
...
}while(condition);
Switch语句
switch语句格式:
switch(condition)
{
caseA:
...
break;
caseB:
...
break;
default:
...
break;
}
Try-catch语句
try-catch语句格式:
try
{
...
}
catch(Exception)
{
}
or
try
{
...
}
catch(Exceptione)
{
...
}
or
try
{
...
}
catch(Exceptione)
{
...
}
finally
{
...
7空白
空行
空白行可以提高可读性.
如下情况使用两个空白行:
-源文件的逻辑章节
-类及接口的定义(如果一个文件包含多个类及接口,可以使用一类一个文件的规则避免这种情况)
如下情况使用一个空白行:
-方法之间
-属性之间
-方法内部的变量声明及其初始化
-方法类部之间的不同逻辑块
类部空格
逗号或者分号后面紧跟一个空格:
TestMethod(a,b,c);don'tuse:
TestMethod(a,b,c)
or
TestMethod(a,b,c);
操作符前后都应该使用一个空格(一元操作符入出外,如自加/自减,逻辑与):
a=b;//don'tusea=b;
for(inti=0;i<10;++i)//don'tusefor(inti=0;i<10;++i)
//or
//for(inti=0;i<10;++i)
表格化格式
逻辑块内的多行代码应该格式化为表格格式:
stringname="Mr.Ed";
intmyValue=5;
TestaTest=Test.TestYou;
8命名约定
大写样式
Pascal规则
每个单词开头的字母大写(如TestCounter).
Camel规则
除了第一个单词外的其他单词的开头字母大写.如.testCounter.
Upper规则
仅用于一两个字符长的常量的缩写命名,超过三个字符长度应该应用Pascal规则.
publicclassMath
{
publicconstPI=...
publicconstE=...
publicconstFeigenBaumNumber=...
}
命名指导
名称
所有命名都应该尽可能使用完整的词,例如SpellCheck。
缩写词可能有许多种形式,因此可能产生混淆。
请注意:
缩写词可能很难理解。
如果整个单词太长,则使用完整的第一音节或经过仔细选择的缩写词。
区分大小写
为了避免混淆和保证跨语言交互操作,请遵循有关区分大小写的使用的下列规则:
-不要使用要求区分大小写的名称。
对于区分大小写和不区分大小写的语言,组件都必须完全可以使用。
不区分大小写的语言无法区分同一上下文中仅大小写不同的两个名称。
因此,在创建的组件或类中必须避免这种情况。
-不要创建仅是名称大小写有区别的两个命名空间。
例如,不区分大小写的语言无法区分以下两个命名空间声明。
namespaceee.cummings;
namespaceEe.Cummings;
-不要创建具有仅是大小写有区别的参数名称的函数。
下面的示例是不正确的。
voidMyFunction(stringa,stringA)
-不要创建具有仅是大小写有区别的类型名称的命名空间。
在下面的示例中,Pointp和POINTp是不适当的类型名称,原因是它们仅在大小写方面有区别。
System.Windows.Forms.Pointp
System.Windows.Forms.POINTp
-不要创建具有仅是大小写有区别的属性名称的类型。
在下面的示例中,intColor和intCOLOR是不适当的属性名称,原因是它们仅在大小写方面有区别。
intColor{get,set}
intCOLOR{get,set}
-不要创建具有仅是大小写有区别的方法名称的类型。
在下面的示例中,calculate和Calculate是不适当的方法名称,原因是它们仅在大小写方面有区别。
voidcalculate()
voidCalculate()
缩写
为了避免混淆和保证跨语言交互操作,请遵循有关区缩写的使用的下列规则:
-不要将缩写或缩略形式用作标识符名称的组成部分。
例如,使用GetWindow,而不要使用GetWin。
-不要使用计算机领域中未被普遍接受的缩写。
-在适当的时候,使用众所周知的缩写替换冗长的词组名称。
例如,用UI作为UserInterface的缩写,用OLAP作为On-lineAnalyticalProcessing的缩写。
-在使用缩写时,对于超过两个字符长度的缩写,请使用Pascal大小写或Camel大小写。
例如,使用HtmlButton或htmlButton。
但是,应当大写仅有两个字符的缩写,如,System.IO,而不是System.Io。
-不要在标识符或参数名称中使用缩写。
如果必须使用缩写,对于由多于两个字符所组成的缩写请使用Camel大小写,虽然这和单词的标准缩写相冲突。
类命名指导
-类名应该为名词及名词短语,尽可能使用完整的词.
-使用Pascal规则
-不要使用类前缀
-不要使用下划线字符(_)。
-有时候需要提供以字母I开始的类名称,虽然该类不是接口。
只要I是作为类名称组成部分的整个单词的第一个字母,这便是适当的。
例如,类名称IdentityStore就是适当的。
-在适当的地方,使用复合单词命名派生的类。
派生类名称的第二个部分应当是基类的名称。
例如,ApplicationException对于从名为Exception的类派生的类是适当的名称,原因是ApplicationException是一种Exception。
请在应用该规则时进行合理的判断。
例如,Button对于从Control派生的类是适当的名称。
尽管按钮是一种控件,但是将Control作为类名称的一部分将使名称不必要地加长。
接口命名规则
-接口名称应该为名词及名词短语或者描述其行为的形容词,尽可能使用完整的词.(ExampleIComponentorIEnumberable)
-使用Pascal规则
-使用字符I为前缀,并紧跟一个大写字母(即接口名的第一个字母大写)
枚举命名规则
-对于Enum类型和值名称使用Pascal大小写。
-少用缩写。
-不要在Enum类型名称上使用Enum后缀。
-对大多数Enum类型使用单数名称,但是对作为位域的Enum类型使用复数名称。
-总是将FlagsAttribute添加到位域Enum类型。
只读及常量变量命名
-静态常量使用名词及名词短语
-使用Pascal规则
参数及非常量变量命名
-使用描述性的命名,名称应该明确表达参数的意义及类型,优先满足参数的意义描述
-使用Camel规则
-不要对字段名或静态字段名应用前缀。
具体说来,不要对字段名称应用前缀来区分静态和非静态字段。
例如,应用g_或s_前缀是不正确的。
-WebUI类的变量命名使用如下规则
⏹InputTextBox类:
前缀txt+名称(Pascal规则),如:
txtCustomerName;
⏹Label类(包括div,span标签):
前缀lbl+名称(Pascal规则),如:
lblCustomerName;
⏹InputSelect类:
前缀sel+名称(Pascal规则),如:
selCustomerType;
⏹InputRadio类:
前缀rdo+名称(Pascal规则),如:
rdoSubscribe;
⏹InputCheckBox类:
前缀chk+名称(Pascal规则),如:
chkTV
⏹DataGrid类:
前缀grd+名称(Pascal规则),如grdCustomerList
⏹Button类:
前缀btn+名称(Pascal规则),如:
btnSubmit
⏹Form类:
任何一个页面最好只有一个Form,并且统一命名为thisForm;而且该Form起始于
标签之前,止于后变量命名
-在简单的循环语句中计数器变量使用i,j,k,l,m,n
-使用Camel命名规则
方法命名
-使用Pascal规则
-对方法名采用一致的动词/宾语或宾语/动词顺序。
例如,将动词置于前面时,所使用的名称诸如InsertWidget和InsertSprocket;将宾语置于前面时,所使用的名称诸如WidgetInsert和SprocketInsert。
-推荐名称应该为动词或动词短语.例如Save,SaveCustomer,而不要使用CustomerSave
-不要在方法中重复类的名称。
例如,如果某个类已命名为Book,则不要将某个方法称为Book.CloseBook,而可以将方法命名为Book.Close。
属性命名
-名称应该为名词及名词短语
–使用Pascal规则
–对于bool型属性或者变量使用Is(is)作为前缀,不要使用Flag后缀,例如应该使用IsDeleted,而不要使用DeleteFlag
集合命名
-名称应该为名词及名词短语
-使用Pascal规则
-名称后面追加“Collection”
事件命名
-eventhandlers命名使用EventHandler后缀.
-两个参数分别使用sender及e
-使用Pascal规则
-事件参数使用EventArgs后缀
-事件命名使用语法时态反映其激发的状态,例如Changed,Changing.
-考虑使用动词命名.
大小写规范总结
标识符
大小写
示例
类/结构
Pascal
AppDomain
枚举类型
Pascal
ErrorLevel
枚举值
Pascal
FatalError
事件
Pascal
ValueChange
异常类
Pascal
WebException
注意 总是以Exception后缀结尾。
只读的静态字段
Pascal
RedValue
接口
Pascal
IDisposable
注意 总是以I前缀开始。
集合
Pascal
CustomerCollection
注意总是以Collection结束
方法
Pascal
ToString
命名空间
Pascal
System.Drawing
参数
Camel
typeName
属性
Pascal
BackColor
受保护的实例字段
Camel
redValue
注意 很少使用。
属性优于使用受保护的实例字段。
公共实例字段
Pascal
RedValue
注意 很少使用。
属性优于使用公共实例字段。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- c# 开发 规范
![提示](https://static.bdocx.com/images/bang_tan.gif)