C#语言规范(其二)
2011-11-05 20:06 clarkhan 阅读(235) 评论(0) 编辑 收藏 举报概要:
C#中使用帕斯卡命名法(Pascal)和骆驼命名法(Camel)。
a、 骆驼命名法命名的名称像骆驼背一样跌宕起伏,该命名法要求名称的首单词要小写,随后的单词首字符要大写。如:string userName
b、 帕斯卡命名法与骆驼命名法类似,只不过要求首字母大写,而骆驼命名法是首字母小写。如:public void PrintEmployeePaychecks() {…}
命名规范
1.类
【规则1-1】使用Pascal规则命名类名。如:class BmpFileStream
【规则1-2】使用能够反映类功能的名词或名词短语命名类。
如:public class FileStream
【规则1-3】不要使用“_”、“C”、“I”等特定含义前缀。
【规则1-4】自定义异常类应以Exception尾。
如:public class EmailException:Exception { // 类体 }
【规则1-5】文件名要能反映类的内容,最好是和类同名。
2.类字段
【规则2-1】用camel规则来命名类成员变量名称,即首单词(或单词缩写)小写。
如:class Student
{
string stuName;
string stuNo;
string password;
}
【规则2-2】类字段变量名前可加“_”前缀。
如:class Student
{
string _stuName;
string _stuNo;
}
【规则2-3】坚决禁止在普通变量前加“m_”前缀。
如:class Student
{
string m_stuName;
string m_stuNo;
}
3.方法
【规则3-1】方法名采用Pascal规则,第一个字符要大写。
如:public void DoubleValue() {…}
public void Show() {…}
【规则3-2】方法名应使用动词或动词短语。
如:void RemoveAll() {…}
【规则3-3】类中访问修饰符或功能相同的方法应该放在一起,且公共或实现接口的方法在前。
如:class Test
{
Public void Invoke() {…}
Public void Insert() {…}
Private void RemoveAll() {…}
Private void GetCharArray() {…}
}
4.属性
【规则4-1】使用名词定义属性,属性使用Pascal规则,首字符大写。
如:public class Book
{
Public Color BookName
{…}
}
【规则4-2】属性和相应字段名称要关联,可以使用“重构”菜单来生成属性。
如:public class Book
{
Private string bookName;
Public Color BookName
{
Get{ return bookName;}
}
}
5.参数
【规则5-1】参数采用camel规则命名,首字符小写。
如:string Format(string format,object [] args) {…}
【规则5-2】使用描述性参数名称,参数名称应当具有足够的说明性。
【规则5-3】不要给参数加匈牙利语类型表示法的前缀。
如下面是不合理的:void Insert(string sName,string strAddress)
应该为:void Insert(string name,string address)
6.常量
【规则6-1】只读常量使用Pascal规则,首字符大写。
如:class Calendar
{
Public readonly Color RedColor;
Public const Tuesday;
}
【规则6-2】枚举名使用Pascal规则命名,枚举成员本质属于常量,命名规则同上。
如:enum CarColor {Red,Blue,Yellow}
【规则6-3】枚举值从小到大顺序定义。
【规则6-4】静态字段或属性采用Pascal规则,首字符大写。
7.接口
【规则7-1】接口定义使用Pascal规则,且必须以大写“I”开头。
如:public interface IdataPort
Public interface IFormatable
【规则7-2】接口名称要有意义,中间不要有下划线“_”等字符。
如:interface I_Data_Port是不合适的。
【规则7-3】如果类实现了接口,名称尽量和接口相同,只是省掉“I”字符。
如:public interface IComponent{//接口定义}
Public class Component : IComponent{//类实现}
8.事件
【规则8-1】委托名称采用Pascal规则,第一个字符大写。
如:public delegate void CountHandler(int x,int y)
【规则8-2】定义事件的委托要使用EventHandler后缀,且包括sender和e两个参
数。
如:delegate void MouseEventHandler(object sender,MouseEventArgs e)。
【规则8-3】事件用到的参数类,名称要带EventArgs后缀。。
如:public class MouseEventArgs{//参数类内容}
9.命名空间
【规则9-1】命名空间名称采用Pascal规则,首字符大写。
如:namespace HairCompany { //命名空间内容 }
【规则9-2】命名空间名称尽量反映其内容所提供的整体功能。
如:Microsoft.Media, Microsoft.Media.Design
注释规范
1.文件头部注释
【规则1-1】文件都包含文件头,要说明文件名、作者、创建时间、变更记录等。
【规则1-2】推荐采用.NET形式书写头部注释。
如:
///<summary>
///文件名:CarPrint.cs
///作者:小强
///创建日期:2007-05-23
///描述:完成打印功能
///修改日期:2007-11-23
///Email:perrymail@126.com
///</summary>
2.类及其成员注释
【规则2-1】对方法和类使用“///”注释。
【规则2-2】代码行文注释采用“//”和“/**/”进行,应该尽量说明问题。
【规则2-3】添加的注释必须能够说明此语句块的作用和实现手段。
【规则2-4】所有的注释都应该用英文或者中文,同一段注释不要混用两种语言。
【规则2-5】代码变更需要将旧代码注释,并且说明变更原因、变更作者和变更时间。
行文规范
1.缩写规范
【规则1-1】标识符应当直观可望文知意,不提倡使用任何缩写。
【规则1-2】字符串变量推荐以“str”或“s”开头,采用string.Empty来初始化。
【规则1-3】普通对象可以以“obj”开头。
【规则1-4】缩写可自行定义,一般取单词的前/后字符组成,以含义直观为准则。
【规则1-5】一般情况下不要让缩写破坏标识符的含义。
如:public Student GetStu()
应该使用:public Student GetStudent()
2.排版
【规则2-1】每行语句至少占一行,如果语句过长(超过一屏),则该语句断为两
行显示
【规则2-2】 把相似的内容放在一起,比如字段、属性、方法、事件等,使用“#region”命令分组。
【规则2-3】多个程序元素进行对等操作时,操作符之前、之后或者前后要加空格。
【规则2-4】每个方法的源程序行数原则上应该少于200行。
【规则2-5】语句嵌套层次不得超过3层。
【规则2-6】避免相同的代码段在多个地方出现。
3.语句结构
【规则3-1】如果使用了异常结构,一定要处理异常,一般要写日志文件。
【规则3-2】分支语句不应该使用复杂长条件。
如:if(txtName == null || txtName == string.Empty)
{ // 处理代码 }
应该将长条件封装成方法:if( txtNameEnable() ) {…}
【规则3-3】switch语句,case后面必须接break(这一点C#已经强行限制)。
【规则3-4】禁止使用goto语句进行跳转。
【规则3-5】行文中严禁出现“魔数”,特定含义的常数必须定义成枚举或常量。
如:if( objCar.Type == 1 ) objCar.Run();
应为:if( objCar.Type == Cars.BMP ) objCar.Run();
【规则3-6】不同类型的操作符混合使用时,使用括号给出优先级。
【规则3-7】不允许使用复杂的操作符组合等。
【规则3-8】循环、判断语句的程序块部分用花括号括起来,即使只有一条语句。
【规则3-9】在switch语句中总是要有default子句,建议使用断言。
CarType type = GetType();
Switch(type)
{
Case CarType.GMC: return new GMCCar(); break;
Case CarType.BMW: return new BMWCar(); break;
Default: Debug.Assert(false); break;
}
【规则3-10】每个类和方法完成单一的功能,不设计多用途面面俱到的类和方法。
【规则3-11】严禁使用未经初始化的变量,变量通常使用构造方法来初始化。
4.代码缩进
【规则4-1】碰到大括号要换行。
【规则1-2】不允许使用Java中的括号换行规范。
If(a>b){
//Java 语言规范
}
5.大小写
【规则5-1】不要创建名称相同,但大小写区别的任何元素。
【规则5-2】应当大写仅有两个字符的缩写。如:string stuID
【规则5-3】不要把混淆的数据和字符放在一起。如:lo == 10
【规则5-4】使用英文命名标识符。
6.重名规范
【规则6-1】不允许变量名、类名、属性名、方法名、等与系统标识符重名。
7.SQL编码规范
【规则7-1】SQL语句全部大写。如:SELECT psnName FROM Person
【规则7-2】对较为复杂的SQL语句加上注释,说明其功能。
【规则7-3】连接符OR、IN、AND、以及=、<=、>=等前后加上一个空格。
【规则7-4】使用明确的列代替SELECT *。
8.软件架构
【规则8-1】数据库中每一张表对应一个实体类/数据传输对象(DTO)
【规则8-2】实体类名称使用表名,也可带有Dto后缀。
【规则8-3】三层架构应当合理使用,不应生搬硬套。
【规则8-4】三层架构元素推荐后缀:
数据传输对象 XxxxDto
DAO工厂 XxxDAOFactory
DAO接口 IXxxxDAO
服务接口 IXxxxService
DAO的数据库实现 XxxxDAOOracle/XxxxDAOInfomix
业务逻辑 XxxxManager
9.系统
【规则9-1】在国内不要随便使用设计模式等代码模式,因为并不流行。
【规则9-2】系统输入、资源操作(如内存分配、文件及目录操作)、网络操作(如通信、调用等)、任务之间的操作(如通信、调用等)时必须进行错误、超时或者异常处理。【规则9-3】模块编写应该有完善的测试方面的考虑。
注:转自http://tianyongjian2p.blog.163.com/blog/static/17505638200982711232735/