C#编码规范文档版本V0.01
1.目的
规范C#代码的书写,提高代码的可读性,使开发人员在代码上更好的协作,减少新开发成员熟悉现有代码的时间,间接提高软件代码的可维护性。
2.命名规范
1)命名约定
标识符构成:
所有标识符应由一个或多个完整的英文单词构成,除通用的缩略词如IO、Http、id等或是项目特定的专用缩略词如项目名称的缩写等,不应使用未被普遍接受的单词缩略形式。
可以适当使用下划线“_”。
2)大小写约定
Pascal : 组成标识符的所有单词的首字母大写,如Get、BackColor。
Camel : 组成标识符的第一个单词全小写,后续单词首字母大小,如get、backColor。
全大写:组成标识符的所有单词的所有字母全部大写。
缩略词:
➢不要使用半个单词的缩写形式,如GetWin,而应使用GetWindow。
➢不要使用不被普遍认可的首字母缩写。
在适当情况下,使用通用的首字母缩写,如UI表示User interface,而OLAP表示On-line Analytical Processing。
两个字母的缩
写单独使用时可以适当使用全大写书写风格替代Pascal风格。
➢不要在标识符或参数名中使用首字母缩写,必须使用时,应使用Camel形式。
➢Id不是首字母缩写,不应使用全大写方式。
3)C#命名规范
以.Net 公共语言规范(CLSCompliant)为基础,规定标识符的命名规则。
4)代码书写风格
使用Visual Studio默认书写风格,在签入代码之前,应使用Ctrl + K, Ctrl + D快捷键格式化代码,保证源码管理服务器对代码差异的正确评估。
5)编码要求
1.单个类、方法的代码行数不应过长,否则应考虑进行拆分。
2.局部变量引用Disposable类实例的,必须使用using 语法进行Dispose 操作。
或在
特殊情况下,使用try{..} finally {…} 进行手动Dispose操作。
3.类的实例字段包含Disposable 类型的,类必须也要实现IDisposable接口。
4.属性的get 访问器不应有任何副作用。
5.如果枚举的值可以组合使用,应对其标注FlagsAttribute 特性。
这种情况下枚举类
型名称建议使用复数。
6.枚举应该包含0 值,以对应未初始化状态的值。
7.类型之间的耦合应尽量简单。
如果A使用B,B使用C,则A应尽量不直接使用
C。
如A中某方法的代码:this.BInstance.GetC().DoSomething();
应该尽量改为:this. BInstance.MakCDoSomthing();
8.谨慎区分返回值与异常。
对于错误使用异常机制报告而不是返回值。
9.尽量catch 具体的异常类型,而不是Exception类型。
10.处理异常时需重新抛出该异常时,使用throw; 而不是throw ex; 后者会重置堆栈跟
踪信息。
11.在finally 块中释放资源。
6)关于自动生成的代码
7)注释
➢所有C#代码文件必须包含文件头注释,格式如下:
//======================================================
// Product Name
// Module Name
//======================================================
// 版权声明
//======================================================
// 内容描述
//======================================================
// 创建人
// 创建日期
// 最后修改人
// 最后修改日期
//======================================================
// 备注
//======================================================
➢所有类、结构、枚举、委托、方法、属性、字段都必须书写文档注释。
➢复杂的代码段应有必要的解释性注释。
➢文档注释中所有参数必需说明用途、用法。
➢文档注释中,所有方法、属性访问器,如可能产生异常,应注明异常类型及前提。
➢如果注释无法清楚的表明代码的用途,添加简单的example 注释。
➢属性注释请使用以下语法结构:
获取或设置….. 。
获取…. 。
8)关于自动生成的代码
自动生成的代码不应进行任何手动修改。
3.设计规范
1)分层设计
采用分层设计,表现层、业务逻辑层、数据访问层是必须的。
2)面向接口编程
面向接口编程,而不是面向类编程。
3)测试友好
所编写的代码必须容易测试。
4)耦合简单
与某一个类有直接关系的其它类的数量应尽量少。
类与类之间尽量用接口进行耦合。
附录I 特殊类名后缀
对于事件处理程序委托,使用两个参数无返回值的形式,其中第一个参数为System.Object类型,表示事件源,第二个参数为System.EventArgs类型的派生类,表示事件参数,如果可能,使用System.EventHandler<T>泛型。
附录I 首选词条
参考文档:
/zh-cn/library/y8hcsad3.aspx。