C#编码规范

一、 命名惯例和规范

注:

Pascal:大小写形式-所有单词第一个字母大写,其他字母小写。
驼峰式:大小写形式-除了第一个单词,所有单词第一个字母大写,其他字母小写。

1:类名使用 Pascal 大小写形式

public class HelloWorld{ ...}

2:方法使用 Pascal 大小写形式

public class HelloWorld{ void SayHello(string name) {  ... }}

3:变量和方法参数使用 驼峰式 大小写形式

Public int totalCount = 0;

4:根据类的具体情况进行合理的命名

以Class声明的类,都必须以名词或名词短语命名,体现类的作用。如:

Class Indicator {}

当类只需有一个对象实例(全局对象,比如Application等),必须以Class结尾,如

Class ScreenClass

当类只用于作为其他类的基类,根据情况,以Base结尾:

Class IndicatorBase

5:不要使用匈牙利方法来命名变量 (m_xxxx)

string m_sName; int nAge;

6:用有意义的,描述性的词语来命名变量

别用缩写。用name, address, salary等代替 nam, addr, sal

别使用单个字母的变量象i, n, x 等. 使用 index, temp等

用于循环迭代的变量例外:

string m_sName; int nAge;

7:文件名要和类名匹配

例如,对于类HelloWorld, 相应的文件名应为 HelloWorld.cs

8:接口的名称前加上I

interface ImyInterface   {……}

9:在私有成员变量前面加上m_。对于m_后面的变量名使用骆驼命名方法:(注意第五条)

public class SomeClass  
{  
    private int m_Number;   
}

二、 良好的编程习惯

1:避免使用大文件。如果一个文件里的代码超过300~400行,必须考虑将代码分开到不同类中。

2:避免写太长的方法。一个典型的方法代码在1~50行之间。如果一个方法发代码超过50行,应该考虑将其分解为不同的方法。

3:方法名需能看出它作什么。别使用会引起误解的名字。如果名字一目了然,就无需用文档来解释方法的功能了。

public class SomeClass   <br>{  <br>    private int m_Number;   <br>}

4: 一个方法只完成一个任务。不要把多个任务组合到一个方法中,即使那些任务非常小。

5:别在程序中使用固定数值,用常量代替。

6:必要时使用enum 。别用数字或字符串来指示离散值。

例如:正确

Public enum MailType {  Html,  PlainText,  Attachment }
public void SendMail (string message, MailType mailType)
{ 
       switch ( mailType ) 
       {  
              case MailType.Html:   
                   // Do something   
                   break;  
              case MailType.PlainText:   
                   // Do something   
                   break;  
              case MailType.Attachment:   
                   // Do something   
                   break;  
              default:   
                   // Do something   
                   break; 
        }
}

不正确:

        public void SendMail (string message, string mailType)
        { 
                    switch ( mailType ) 
                    {  
                               case "Html":   
                                         // Do something   
                                         break;  
                               case "PlainText":   
                                         // Do something   
                                         break;  
                               case "Attachment":   
                                         // Do something   
                                         break;  
                               default:   
                                         // Do something   
                                         break; 
                    }
         }

7:别把成员变量声明为 public 或 protected。都声明为 private

8:不在代码中使用具体的路径和驱动器名。 使用相对路径,并使路径可编程。

9:视情况使用StringBuilder替代String

String对象是不可改变的。每次使用System.String类中的方法之一时,都要在内存中创建一个新的字符串对象,这就需要为该新对象分配新的空间。

在需要对字符串执行重复修改的情况下,与创建新的String对象相关的系统开销可能会非常昂贵。如果要修改字符串而不创建新的对象,则可以使用System.Text.StringBuilder类。

例如,当在一个循环中将许多字符串连接在一起时,使用StringBuilder类可以提升性能。

10:所有的类成员变量应该被声明在类的顶部,并用一个空行把它们和方法以及属性的声明区分开

11:避免在同一个文件中放置多个类

12:一个文件应该只向在一个名称空间内定义类型。避免在一个文件中使用多个名称空间

13:避免写超过5个参数的方法。如果要传递多个参数,使用结构。

14:不要手动去修改任何机器生成的代码

15:只对那些亘古不变的数值使用const关键字,例如一周的天数。

16:避免显式指定枚举的值(不要直接给枚举赋值)

例如:正确

public enum Color   
{   
    Red,Green,Blue   
}

不正确

public enum Color   
{   
Red=1,Green=2,Blue=3   
}

17:避免为枚举指定一个类型

避免

public enum Color:long   
{   
Red,Green,Blue   
}

18:对于if语句,总使用一对{}把下面的语句块包含起来,哪怕只有一条语句也是如此。

推荐:

If(1 == 1)
{
       Console.WriteLine(“正确”);
}

不推荐:

If(1 == 1)
       Console.WriteLine(“正确”);

19:避免使用三元条件操作符。

20:避免显示类型转换。使用as关键字安全的转换到另一个类型。

Dog dog=new GermanShepherd();   
GermanShepherd shepherd=dog as GermanShepherd;  
if (shepherd!=null)   
{}

21:在使用一个对象、数组或代理之前,总要检查其是否为null

22:避免在接口中包含事件。

23:当使用抽象类的时候,提供一个接口。

24:使用String.Empty取代””

//避免  
string name=””;   
//正确  
string name=String.Empty;

25:使用条件方法来取代显式进行方法调用排除的代码(#if…#endif)

三、 注释

1: 文件头部注释

在代码文件的头部进行注释,标注出创始人、创始时间、修改人、修改时间、代码的功能,这在团队开发中必不可少,它们可以使后来维护/修改的同伴在遇到问题时,在第一时间知道他应该向谁去寻求帮助,并且知道这个文件经历了多少次迭代、经历了多少个程序员的手。
示例:


/******************************************************************************** 
 ** 作者: Eunge 
 ** 创始时间:2004-6-8 
 ** 修改人:Koffer 
 ** 修改时间:2004-12-9 
 ** 修改人:Ken 
 ** 修改时间:2005-01-29 
 ** 描述: 
 ** 主要用于产品信息的资料录入,… 
 *********************************************************************************/

我们甚至可以在这段文件头注释中加入版权信息、文件名、版本信息等。

2:函数、属性、类、公共变量注释

请使用///三斜线注释,这种注释是基于XML的,不仅能导出XML制作帮助文档,而且在各个函数、属性、类等的使用中,编辑环境会自动带出注释,方便你的开发。以protected,protected Internal,public声明的定义注释请都以这样命名方法。
例如:

/// <summary> 
 /// 用于从ERP系统中捞出产品信息的类 
 /// </summary> 
 class ProductTypeCollector 
 {
     /// <summary> 
     /// 保存C扫数据
     /// </summary> 
     public void SaveCScanData(){}
 }

3:/**/注释

不建议过多的使用此注释。

4:注释说明

注释应该只说明操作的一些前提假设、算法的内部信息等内容。

四、 异常处理

1:不要“捕捉了异常却什么也不做“。如果隐藏了一个异常,你将永远不知道异常到底发生了没有。

2:发生异常时,给出友好的消息给用户,但要精确记录错误的所有可能细节,包括发生的时间,和相关方法,类名等。

3:只捕捉特定的异常,而不是一般的异常。

4:不必在所有方法中捕捉一般异常。不管它,让程序崩溃。这将帮助你在开发周期发现大多数的错误。

5:不必每个方法都用try-catch。当特定的异常可能发生时才使用。比如,当你写文件时,处理异常FileIOException。

6:别写太大的 try-catch 模块。如果需要,为每个执行的任务编写单独的 try-catch 模块。 这将帮你找出哪一段代码产生异常,并给用户发出特定的错误消息

如果应用程序需要,可以编写自己的异常类。自定义异常不应从基类SystemException派生,而要继承于IApplicationException。

有好的建议,请在下方输入你的评论。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值