代码改变世界

C#语言规范(其二)

2011-11-05 20:06  clarkhan  阅读(233)  评论(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/