C#编码规范
C#编码规范
当团队的所有开发人员都在同一个代码上工作时,也就是代码集体拥有的情况,大家都不希望别人改变代码的外观以适应他们自己的风格。因此,通过在项目之初达成一个编码标准,就可以增加团队的生产率和沟通效果。
1.命名规范
像C#这样的面向对象语言允许开发人员采用叙述性的方式较灵活地命名类、方法、字段等。对于这些类型的事物,如果可以更清楚地描述事物的含义,那么千万不要害怕使用较长的名称。大家应该使用完整的单词,而不是缩略语。
.NET有两种主要类型的字母大小写形式:Pascal和camel。对于Pascal字母大小写形式来说,所创建名称的第一个单词的第一个字母是大写的,该名称中的后续单词也是如此,例如ThisIsPascalCase。而对于camel字母大小写形式来说,所创建名称的第一个单词的第一个字母是小写的,而该名称中的后续单词使用大写的字母,例如thisIsCamelCase。
匈牙利表示法(Hungarian notation)是一种在名称内部使用的类型描述方法,可以对所命名的事物的类型提供一个提示。我们在自己的.NET编码规范内相对保守地使用这种方法。在扩展Exception基类的类的命名(例如IllegalArgumentException)以及GUI组件的前缀(例如sumbitBottom)中将发现这种方法的应用。
项 |
大小写形式 |
相关例子 |
注释 |
文件 |
Pascal |
DatabaseConnector |
使用名词来描述类 |
类 |
Pascal |
DatabaseConnector |
类的名称应该与定义它们的文件的名称匹配 |
接口 |
Pascal |
IDatabaseConnector |
接口名称以一个字母I开头 |
方法 |
Pascal |
CalculateBalance |
使用动词来描述方法 |
私有和受保护的实例字段 |
camel |
private float accountBalance |
|
公共实例字段 |
Pascal |
CustomerName |
|
私有和受保护的类字段 |
camel |
protected static int numberOfAccounts |
|
公共类字段 |
Pascal |
public static bool HasGoodCredit |
|
static final |
全部大写 |
public static final decimal MINNUM_BALANCE = 100 |
|
局部变量 |
camel |
string accountNumber = |
|
参数 |
camel |
public void |
|
属性 |
Pascal |
public string AccountNumber |
|
命名空间 |
Pascal |
namespace DataLayer |
|
单元测试方法 |
Pascal |
TestFindAllCustomers |
单元测试名称以单词Test开头。 |
解决方案 |
Pascal |
NorthWindTrader |
|
项目 |
Pascal |
DataLayer |
2.缩进
我们可以将Visual Studio 配置为使用制表符或者空格来进行缩进,同时还可设置缩进的字符单位。日常受用的规范使用4个空格的缩进单位。
代码的行长对于可读性也非常重要。试着将每一行的代码控制在80个字符之内。当每行的字符不超过80个,而又需要换行时,请遵循下述规则:
·在操作符前断开
·在逗号后断开
·对齐括号
3.声明
在声明类字段、实例字段或者局部变量时,每行只声明一个。而当在一起进行几个声明时,需对准字段或者变量的名称。对于局部变量来说,应该在声明变量时就进行初始化,除非您在初始化变量时,还需要执行一些其他的动作,例如计算。
声明应该位于进行声明的类或者方法的顶部,这样就可以使未来对声明的查看变得更容易。该规则的一个例外就是for循环内局部变量的声明和初始化。
4.语句
C#中有多种类型的语句。每一行代码包含的内容不应该超过一个语句。
对于if、if-else、和if else-if else 语句来说,总是使用大括号,而对于for、foreach、while、和do-while语句来说,也总是使用大括号(大括号两部分都应该独占一行)。
在return语句中,一般不要使用括号,除非为了使返回值更加明显。
下面是使用switch语句的格式:
switch (expression)
{
case constant-expression:
statements;
break;
default:
statements;
break;
}
而try-catch-finally语句则采用下述格式:
try
{
statements;
}
catch (exception)
{
statements;
}
finally
{
statements;
}
5.注释
C#中可以使用的注释类型也有几种。下表为每一种类型列出了一个例子,说说明了每一种类型的应用时机。
类型 |
相关例子 |
应用时机 |
文档注释 |
/// <summary> /// This class represents a bank account /// </summary> |
用于文档类和方法 |
行末注释 |
int myCount = 0; // Keep track of how many times ... |
用于描述某些含义不太清晰的事物的目的 |
单行注释 |
// Here is where we gather account data |
用于描述后续事物或者代码块的目的 |
多行注释 |
/* Here is where we gather account data */ |
用于在代码块处进行注释,或者用于描述后续多行代码的目的 |
6.空行与空格
尽管编译器可以忽略空行与空格,但是空行与空格可以将不同逻辑的代码单元分离,从而提高代码的可读性。
在下述几种情况下应该使用一个空行:
·方法之间
·声明和语句之间
·代码的逻辑段之间
·单行或者多行注释之前
在下述几种情况下应该使用一个空格:
·带圆括号的关键字之后
·参数列表的逗号之后
·数据操作符的前后
·在for语句中,用于将语句的3个逻辑段分开
7.解决方案和项目组织
每个解决方案都应该拥有下述项目:
·业务项目(business project)仅存放业务项目。
·数据项目(data project)处理数据库和其他用于检索或者更新数据目的的遗留系统的访问。
·表示项目(presentiation project)处理使用系统的终端用户所需的所有视图。
·测试项目(test project)存放应用程序所有的单元测试。