本文转自:http://www.cnblogs.com/godwar/archive/2010/08/10/1796434.html
【IT168 技术文档】 本文是一套面向C# programmer 和C# developer 进行开发所应遵循的开发规范。按照此规范来开发C#程序可带来以下益处:
1. 引言: 本规范是初版,只适用于一般情况的通用规范,并不能覆盖所有的情况。
2. 文件组织
2.1 C# 源文件
类名或文件名要简短,不要超过2000LOC,将代码分割开,使结构清晰。将每个类放在一个单独的文件中,使用类名来命名文件名(当然扩展名是.cs)。这种约定会使大家工作更简单。
2.2 目录设计
为每一个命名空间创建一个目录。(用MyProject/TestSuite/TestTier作为MyProject.TestSuite.TestTier的路径,而不用带点的命名空间名做路径)这样可以更容易地将命名空间映射到目录层次划分。
3. 缩进
3.1 换行
当一个表达式超过一行时,根据这些通用原则进行处理:
方法调用换行示例:
算术表达式换行示例:
推荐:
不好的格式——应避免:
推荐使用第一种方法,因为是在括号表达式之外折行(高层次折行原则)。注意要用制表符到缩进的位置,然后用用空格到折行的位置。在我们的例子中是:
'>'表示是制表符,'.'表示是空格符。(制表符后是空白是用制表符缩进)。一个好的编码习惯就是在所用的编辑器中显示制表符和空格符。
3.2 空白
利用空格进行缩进从未有过统一的标准。一些人喜欢用两个空格,一些人喜欢用四个空格而还有一些人喜欢用八个空格,甚至有的人喜欢用更多的空格。好的做法是用制表符。制表符有一些优点:
这里,我们定义制表符为标准缩进符。
不要用空格缩进—用制表符!
4. 注释
4.1 块注释
块注释通常应该是被避免的。推荐使用///注释作为C#的标准声明。如果希望用块注释时你应该用以下风格:
因为样可以为读者将注释块与代码块区分开。虽然并不提倡使用C风格的单行注释,但你仍然可以使用。一旦用这种方式,那么在注释行后应有断行,因为很难看清在同一行中前面有注释的代码:
块注释在极少情况下是有用的。通常块注释用于注释掉大的代码段。
4.2 单行注释
你应该用//注释风格“注释掉”代码(快捷键,Alt+/)。它也可以被用于代码的注释部分。
单行注释被用于代码说明时必须缩进到相应的编进层级。注释掉的代码应该放在第一行被注释掉以使注释掉的代码更容易看清。
一条经验,注释的长度不应该超过被解释代码的长度太长,因为这表示代码过于复杂,有潜在的bug。
4.3 文件注释
在.net 框架,Microsoft 已经介绍了一个基于XML 注释的文件。这些文件是包括XML 标签的正规的单行的C#注释。他们遵循单行注释的模式:
多行XML 注释遵循这种模式:
为了被认作是XML注释行,所有的行都必须用三个反斜线开始。标签有以下两类:
第一类包括像, or 的标签。描述一个程序的API元素的这些文档说明项必须写清楚以方便其他程序员。如上面的多行注释示例所示,这些标签通常带有名称或cref属性。编译器会检查这些属性,所以它们必须是有效、正确的。第二类用诸如, or 标签,用于控制备注说明的布局。
文件可以用‘文件’菜单中的‘创建’菜单产生。文件以HTML格式产生。
5. 声明
5.1 每行的声明数
推荐每行只有一个声明,因为它可以方便注释。
当声明变量时,不要把多个变量或不同类型的变量放在同一行,例如:
上面的例子也显示了变量名不明显的缺陷。当命名变量时要清晰。
5.2 初始化
局部变量一旦被声明就要初始化。例如:
或
注意:如果你初始化一个dialog,设计使用using语句:
5.3 类和接口声明
当编写C#类和接口时,应遵循以下格式化规则:
例如:
对于一个大括号的位置参考10.1部分。
6. 语句
6.1 简单语句
每行都应该只包含一条语句。
6.2 返回语句
一个返回语句不要用最外围圆括号。不用:
用:
6.3 If, if-else, if else-if else 语句
if, if-else and if else-if else 语句看起来应该像这样:
6.4 for / foreach 语句
一个for语句应该如下形式:
或者放置一行(考虑用一个while语句代替)
foreach语句应该像下面所示 :
注意:在一个循环中,即使只有一个语句通常也用括弧括起来。
6.5 While/do-while 语句
一个while语句应该写成如下形式:
一个空while语句应该是以下格式:
一个do-while语句应该是如下格式:
6.6 Switch 语句
一个switch语句应该如下格式:
6.7 Try-catch 语句
一个try-catch statement语句应该遵循以下格式:
7. 空白
7.1 空行
空行提高可读性。它们分开那些逻辑上自身相关联的代码块。两行空格行应该用于以下之间:
7.2 内部空格
在一个逗号或一个分号之后应该由一个空格,例如:
不要用:
或
单个空格包围操作符(除了像加的一元操作符和逻辑非),例:
7.3 表格格式化
行的一个逻辑块应该作为一个表格被格式化:
对于表格的格式化用空格而不用制表符因为在某些制表符缩进设置会使表格格式化看起来是很奇怪。
8. 命名习惯
8.1 大写格式
8.1.1 Pascal Casing
习惯大写每个单词的第一个字母(就像在TestCounter)。
8.1.2 Camel Casing
习惯除了第一个单词外大写每个单词的第一个字母例如testCounter。
8.1.3 全大写情况
对于只有一两个字符缩写组成的标识符才用全大写的情况。有三个或更多个字符组成的标识符应该用Pascal情况代替。例如:
8.2. 命名指导方针
通常根据指导方针在名字和命名内用低线字符对Hungarian 符号来说被认为是坏习惯。
Hungarian 符号是一组应用于命名来映射变量类型的前缀和后缀。这种命名风格在早期的Windows程序中被广泛应用,但现在被取消了至少不提倡了。如果你遵循这个指南用Hungarian 符号是不允许的。
但要记住一个好的变量名描述了语义而不失类型。
对于这个规则有个例外就是GUI编码。包括像按钮(buttton)的GUI元素,所有领域和变量名都应该带有它们类型名的后缀不是缩写。例如:
8.2.1 类命名指导方针
8.2.2 接口命名指导方针Guidelines
8.2.3 枚举命名指导方针
8.2.4 只读和常量命名
8.2.5 参数/非常量领域命名
8.2.6 变量命名
8.2.7 方法命名
8.2.8 属性命名
8.2.9 事件命名
8.2.10 大写总结
Type |
Case |
Notes |
Class / Struct |
Pascal Casing |
|
Interface |
Pascal Casing |
Starts with I |
Enum values |
Pascal Casing |
|
Enum type |
Pascal Casing |
|
Events |
Pascal Casing |
|
Exception class |
Pascal Casing |
End with Exception |
public Fields |
Pascal Casing |
|
Methods |
Pascal Casing |
|
Namespace |
Pascal Casing |
|
Property |
Pascal Casing |
|
Protected/private Fields |
Pascal Casing |
|
Methods |
Pascal Casing |
9. 编程习惯
9.1 可见性
不要任何公共实例或类变量,让它们为私有的。对于私有成员最好不用“private”作修饰语什么都不写。私有是默认情况,每个C#程序员都应该知道这一点。
用属性代替。你可以用公共静态(或常量)对于这个规则是以例外,带它不应该是规则。
9.2 没有“幻”数
不要用幻数,也就是在源代码中直接用常数值。替代这些后者以防变化(比方说,你的应用程序可以处理3540用户代替427你的代码在50行中通过分散25000LOC)是错误和没有收益的。声明一个带有数的常量来代替:
10. 编码举例
括弧应该在以下情况之后以新行开始:
10.2 变量命名举例
代替:
注意:索引变量通常叫i, j, k 等等。但Note: Indexer variables generally should be called i, j, k etc. But 万一像这样,使得重新考虑这个原则更有意义。一般来说,当同一个计数器或索引器被重用,给它们有意义的名字。