1
2
3
3.1
3.2
3.3
3.4
3.5
4
4.1
4.2
4.3
5
5.1
5.2
5.3
5.4
1
- 一个软件的生命周期中,80%的花费在于维护;
- 几乎没有任何一个软件,在其整个生命周期中,均由最初的开发人员来维护;
- 编码规范可以改善软件的可读性,可以让程序员尽快而彻底地理解新的代码。为了执行规范,每个软件开发人员必须一致遵守编码规范;
- 使用统一编码规范的主要原因,是使应用程序的结构和编码风格标准化,以便于阅读和理解这段代码;
- 好的编码约定可使源代码严谨、可读性强且意义清楚,与其它语言约定相一致,并且尽可能的直观。
2
- 本规范主要以C#为开发语言的规范,为鲍亮实验室的原则性规范;
- 由于本规范是为撰写程序而设计,所以适用于一切有关程序撰写的工作事项。对于具体的每个项目,可能需要对之进行裁剪和补存。
- 适用人员:软件工程专业的学生;
- 适用产品:以C#编写的程序。
3
3.1
- 所有的方法和函数都应该以描述这段代码的功能的一段简明注释开始(方法是干什么)。这种描述不应该包括执行过程细节(它是怎么做的),因为这常常是随时间而变的,而且这种描述会导致不必要的注释维护工作,甚至更糟—成为错误的注释。代码本身和必要的嵌入注释将描述实现方法。
- 当参数的功能不明显且当过程希望参数在一个特定的范围内时,也应描述传递给过程的参数。被过程改变的函数返回值和全局变量,特别是通过引用参数的那些,也必须在每个过程的起始处描述它们。
3.2
以一个物理文件为单元的都需要有模块头部注释规范,例如:C#中的.cs文件
用于每个模块开头的说明,主要包括:(粗体字为必需部分,其余为可选部分)
- 文件名称(File Name): 此文件的名称
-
功能描述(Description):
此模块的功能描述与大概流程说明 -
数据表(Tables):
所用到的数据表,视图,存储过程的说明,如关系比较复杂,则应说明哪些是可擦写的,哪些表为只读的。 - 作者(Author):
- 日期(Create Date):
-
参考文档(Reference)(可选):
该档所对应的分析文档,设计文檔。 - 引用(Using)
(可选)﹕
开发的系统中引用其它系统的Dll、对象时,要列出其对应的出处,是否与系统有关﹙不清楚的可以不写﹚,以方便制作安装档。 - 修改记录(Revision History):若档案的所有者改变,则需要有修改人员的名字、修改日期及修改理由。
- 分割符:*************************** (前后都要)
示例如下:
3.3
1>
///
/// …
///
///
///
2>
3>
4>
标记 |
说明 |
备注 |
|
提供了一种将说明中的文本标记为代码的方法 |
|
|
提供了一种将多行指示为代码的方法 |
|
|
可以指定使用方法或其他库成员的示例。一般情况下,这将涉及到 |
|
|
对可从当前编译环境中获取的异常的引用。 |
|
|
得以引用描述源代码中类型和成员的另一文件中的注释。 |
|
|
用于定义表或定义列表中的标题行。 |
|
|
用于诸如、 或 等标记内,使您得以将结构添加到文本中。 |
|
|
应当用于方法声明的注释中,以描述方法的一个参数。 |
|
|
提供了一种指示词为参数的方法。 |
|
|
得以将成员的访问记入文档。 |
|
|
用于添加有关某个类型的信息,从而补充由 所指定的信息。 |
|
|
应当用于方法声明的注释,以描述返回值。 |
|
|
得以从文本内指定链接。 |
|
|
对可以通过当前编译环境进行调用的成员或字段的引用。 |
|
|
应当用于描述类型或类型成员。 |
|
|
得以描述属性。 |
|
示例图如下:
5>
作者
建立日期
修改记录
最后修改日期
6>
7>
3.4
1>
2>
3>
3.5
1>
2>
3>
4
4.1
1>
2>
3>
有两种适合的书写方法,适应于不同类型的标识符:
PasalCasing:标识符的第一个单词的字母大写;
camelCasing:标识符的第一个单词的字母小写。
4>
标识符 |
大小写 |
示例 |
命名空间 |
Pascal |
namespace Com.Techstar.ProductionCenter |
类型 |
Pascal |
public class DevsList |
接口 |
Pascal |
public interface ITableModel |
方法 |
Pascal |
public void UpdateData() |
属性 |
Pascal |
Public int Length{…} |
事件 |
Pascal |
public event EventHandler Changed; |
私有字段 |
Camel |
private string fieldName; |
非私有字段 |
Pascal |
public string FieldName; |
枚举值 |
Pascal |
FileMode{Append} |
参数 |
Camel |
public void UpdateData(string fieldName) |
局部变量 |
Camel |
string fieldName; |
5>
6>
7>
8>
4.2
1>
实验室名称(Lab)+ 项目名称 + 模块名称(可选),例如:
中心服务器程序集:Lab.SeverCenter;
中心服务器业务逻辑程序集:Lab.SeverCenter.Business;
2>
采用和程序集命名相同的方式:实验室名称(Lab)+ 项目名称 + 模块名称。 另外,一般情况下建议命名空间和目录结构相同。例如:
中心服务器:Lab.SeverCenter;
中心服务器下的用户控件:Lab.SeverCenter.UserControl;
中心服务器业务逻辑:Lab.SeverCenter.Business;
中心服务器数据访问:Lab.SeverCenter.Data;
3>
l
l
l
l
4>
l
l
l
l
public class List
public class MyClass
l
5>
l
l
l
6>
l
a)
b)
c)
l
l
l
l
l
l
4.3
缩写的基本原则是取组件类名各单词的第一个字母,如果只有一个单词,则去掉其中的元音,留下辅音。缩写全部为小写。
组件类型 |
缩写 |
例子 |
Label |
Lbl |
lblNote |
TextBox |
Txt |
txtName |
Button |
Btn |
btnOK |
ImageButton |
Ib |
ibOK |
LinkButton |
Lb |
lbJump |
HyperLink |
Hl |
hlJump |
DropDownList |
Ddl |
ddlList |
CheckBox |
Cb |
cbChoice |
CheckBoxList |
Cbl |
cblGroup |
RadioButton |
Rb |
rbChoice |
RadioButtonList |
Rbl |
rblGroup |
Image |
Img |
imgBeauty |
Panel |
Pnl |
pnlTree |
TreeView |
Tv |
tvUnit |
WebComTable |
Wct |
wctBasic |
ImageDateTimeInput |
Dti |
dtiStart |
ComboBox |
Cb |
cbList |
MyImageButton |
Mib |
mibOK |
WebComm.TreeView |
Tv |
tvUnit |
PageBar |
Pb |
pbMaster |
5
5.1
1>
为了保持更好的阅读习惯,请不要把多个变量声明写在一行中,即一行只声明一个变量。
例如:
String strTest1, strTest2;
应写成:
String strTest1;
String strTest2;
2>
l
l
l
l
l
l
l
l
l
3>
l
l
a)
b)
l
a)
b)
c)
d)
l
a)
void UpdateData(int a, int b)
b)
a += c + d;
d++;
c)
for (expr1; expr2; expr3)
d)
char c;
int a = 1;
c = (char) a;
5.2
所有外部资源都必须显式释放。例如:数据库连接对象、IO对象等。
5.3
1>
2>
3>
正确做法:
错误做法:
5.4
1>
2>
3>
4>
5>
6>
7>
8>
9>
10>
例: 正确DataColumn[“Name”]
11>
12>