C#代码规范精简表

C#代码规范精简表

一、  目的

  1. 为了统一公司软件开发设计过程的编程规范
  2. 使开发人员能很方便的理解每个目录,变量,控件,类,方法的意义
  3. 为了保证编写出的程序都符合相同的规范,保证一致性、统一性而建立的程序编码规范。
  4. 编码规范和约定必须能明显改善代码可读性,并有助于代码管理、分类范围适用于企业所有基于.NET平台的软件开发工作

二、  范围

本规范适用于.NET开发人员,作用于软件项目开发的代码编写阶段和后期维护阶段。

三、  注释规范

  1. 公共类型必须添加注释,详细请参考命名规范例子所示:

 

  1. 修改BUG需要改变代码时必须添加注释,包含改动时间,BUG编号,修改原因等信息如下所示:

//改动人:### 改动时间:### Bug编号:##:修改内容:###

  1. 核心逻辑代码必须要有注释

例如:

If(string.Compare(str1,str2).E         quase(0))

{

 A ab=new A;

/*

以下代码包含:

1:从库存查询结果

2: 按 结果拆分为消耗品和 再生品

3:导出到Excel

*/

}

 

四、  命名规范

  1. 名字应该能够标识事物的特性。
  2. 类名以、方法名称、公共属性 首写字母必须大写,并只能由字母组成。类变量以m_## 组成,方法体变量以 _## 组成。

例:

///<summary>

///新Bug实体类

///<summary>

public class NewBugInstance()

{   

 

     private string m_BugInstance;//局部变量规范

 

     ///<summary>

///公共字段模板

///<summary>

         public string BugInstance

{

   get;

   set;

}

 

     ///<summary>

///公共字段模板

///<summary>

     public bool Equase()

{

   int _Temp;//方法体变量模板

   //修改人:张三,修改时间:2012-0604,Bug编号:BUG123,修改内容:将字符串比较时的”==”改成string.Compare()或者String.Equase().

If(string.Compare(str1,str2).Equase(0))

{

}

}

}

 

  1. 基础命名规范

抽象基类

-Base

示例:SessionBase

接口

I-

示例:ICheckMethod

异常

-Exception

示例:SocketException

x

-EventArgs

示例:DoWhereEventArgs

事件委托

-EventHandler

示例:DoWhereEventHandler

特性

-Attribute

示例:DataNameAttribute

泛型类型参数

T-

示例:TSession,TCurSession

  1. 窗体命名以Frm_###。

///<summary>

///添加人物窗口

///<summary>

public class Frm_AddName

{

}

 

  1. 常量必须由大写字母组成,有二个以上单词的以下划线分开。

如:

DATA_TEMPLATE_NAME = ”数据模板名字”;

五、  异常处理规范

  1. 异常处理时catch模块必须添加日志记录否则应加对应的注释说明不需要日志的原因。并避免直接使用Exception日志类型为Error类型
  2. 关键代码记录日志为Information 类型。

try

{
}

catch

{

//字符串转数字检查,不需要记录日志。

}

try

{

Log.Information(“程序已正常完成”);
}

catch(ArgumentNullException ex)

{

    Log.Error(ex);

}

六、  性能规范

  1. 方法返回类型不应该为Object类型。
  2. 字符串比较时不要使用ToLower或者ToUpper string 比较建议使用string.Compare 或者Equals。

例:应将if(str.Tostring().Tolower()==str1.Tostring().Tolower())

改成

if(string.Compare(str,str1,false).Equase(0))

或者

str.Equase(str1, StringComparison.CurrentCultureIgnoreCase)

字符串为空判断时使用string. IsNullOrEmpty。

例:应将:if(str==string.Empty|| str == null) 或if(str==””)

    改成:if(string.IsNullOrEmpty(str))

  1. 使用StringBuilder 代替“+”进行字符串串联。

例:

  应将:

String _str = “123”;

For(int i=0 i<10000;i++)

{

Str+=str;

}

改成

StringBuilder _strBuilder = new StringBuilder(“123”);

For(int i=0 i<10000;i++)

{

   _strBuilder.Append(“123”);

}

  1. 考虑使用string.Format()方法而不是字符串拼接来输出结果。
  2. 检测空字符串用string.IsNullOrEmpty

七、  设计规范

  1. 一个方法体内代码行数不应超过100行
  2. 方法体内的功能最好单一化
  3. 一个方法体内不能有太多的If…else…操作。一个方法体内不能超过三个if else 的条件判断超出部分应进行方法提炼。

例如:

   应该避免

If(a)

{

If(c)

{

If(d)

  {

If(e)

{

}

  }

Else

{

}

}

}

  1. 避免手动的增加空格以及TAB键。

VS调整格式请用通用的CTRL+E+D;

  1. 避免在代码中写入常数字符串,应该有通用的常数定义类来专门定义。

例如:

  应将

If(A.Equase(“strValue”))

{

   _strValue=”strValue”;

}

 

改成:

 

private const string CONT_NAME_VALUE = “strValue”;

If(A.Equase(CONT_NAME_VALUE))

{

   _strValue= CONT_NAME_VALUE

}

  1. 使用查询表达式代替循环var q = foos.Where(x => x > 100);
  2. 对象初始化Button btn = new Button { Text = "Click me!", BackColor = Color.FromArgb(255, 255, 255) };
  3. 尽可能只用系统定义的委托,而不是自己定义委托类型。系统定义的委托包括:各种泛型参数数目的Func, Action; 一个Predicate<T>;各种EventHandler。
  4. 在任何时候都应避免使用ref/out传递参数,尤其对引用类型(禁止引用的引用)。尝试改进你的设计。
  5. 当函数需要返回多个值时,应当使用元组而不是使用输出参数。.NET 4.0中提供了Tuple泛型类,位于System命名空间。
  6. 空字符串写成string.Empty

 

posted @ 2013-11-13 19:09  米西摩姆  阅读(312)  评论(0编辑  收藏  举报