DotNet编程规范(草)part2

2排版注释 1.         采用如下顺序组织类中的代码:
类说明(注释)
using语句组
名称空间声明
类声明 .NEt标准控件。 USER CONTROL或CUSTOM CONTROL
私有变量 公有变量 方法声明 2.         尽量使用using语句来避免使用类的全路径名称。 3.         using语句组中首先是框架的命名空间,其次是第三方的,最后是自定义的。 4.         每行缩进4个空格,不要使用tab键进行缩进。(这个有不同的意见) 5.         一般注释开始使用//双斜线,不要使用*注释,注释和代码使用同样的缩进。 6.         不要注释显而易见的代码,好的代码应该是自解释的。好的变量/函数名可减少注释。 7.         注释要简洁明了,注意不要因为错别字导致歧义。 8.         修改代码时,总是使代码周围的注释保持最新。 9.         注释放在被注释语句的上面,并与其上的代码用空行分隔。 10.     在每个文件头必须包含以下注释说明 /*---------------------------------------------------------------- Copyright (C) 2007 石化盈科信息技术有限公司版权所有。 文件名: 文件功能描述: 创建人: 创建时间 ----------------------------------------------------------------*/ 11.     每个类前有如下注释说明(一个文件包含一个类的时候,可选) /*---------------------------------------------------------------- 类名: 类功能描述: 创建人:可选 创建时间:可选 ----------------------------------------------------------------*/ 12.     每个函数必须有如下注释说明 (可以参考C# 的自己的格式,但应包含下列内容) /*--------------------------------------------------------------- ///函数名: ///功能描述: ///参数列表说明: ///调用的主要函数列表: ///创建人:可选 ///创建时间:可选 ///修改人: ///修改时间: ///修改内容描述: -------------------------------------------------------------------*/ 13.     每行只定义一个变量,变量的注释放在变量定义的右边。 14.     一行代码不应超过80个字符。 15.     全局变量必须要有注释。 16.     所有的成员变量在类的开始进行定义,并用空行于其他的方法分开。 17.     局部变量的定义尽量靠近使用的地方。 18.     左花括号总是位于新行的开始,而不是位于类名或函数名后。 19.     一元运算符与运算数之间可不用间隔,二元运算符前后用空格隔开。 20.     如: int a; int b; int c; a = 9; a++; b = 9; c = a + b; for (a = 0; a < c; a++) { b++; } 21.     if,for,whil等语句的执行体部分一定要用花括号括起来,即时只有一语句。 22.     匿名方法的代码排版和普通函数体保持统一风格,作花括号在新行和delegate的声明左对齐。 23.     使用#Region将代码组织在一起. 以便管理源代码。 24.     避免在函数中使用#if # else 来包含代码,应适用 condition 方法。 public class MyClass { [Conditional(“MySpecialCondition”)] public void MyMethod() { } } 3编码惯例 1.         避免在一个文件中定义多个类。 2.         一个文件中只定义一个命名空间。 3.         一个函数不要超过200行。 4.         函数的参数如果超过5个,建议使用结构进行封装。 5.         不要随意改动机器生成的代码。尽可能使用局部类将需要维护的代码分离出来。 6.         使用常量代替对数值的硬编码。 7.         对于只读变量使用readonly 指示符。 8.         一个程序集中避免出现多个Main函数。 9.         仅对最需要的类型标记为public,其他的标记为internal。 10.     避免使用friend程序集,这样增加了程序集的耦合度。 11.     代码避免依赖于从某个特定位运行的程序集。 12.     应用程序集(.exe)中代码越少越好,业务逻辑尽量封装到类库中。 13.     不要自定义枚举的内部数据表示类型,避免给枚举类型显示赋值,除非是2的幂。 14.     避免使用?:操作符。 15.     避免在条件判断表达式中使用返回bool的函数。应该将其赋给变量,然后再进行判断。 16.     尽量使用从0计数的数组。 17.     使用属性,避免使用public/protect变量。 18.     使用 for语句显示初始化数组。 19.     避免使用new继承修饰符,而是使用override。 20.     对非密封类总是将public和protected方法标记为virtual。 21.     除非为了互操作,否则不要使用不安全的代码。 22.     不要显示类型转换,应适用as操作符进行类型定义转换。 23.     对于有索引的集合使用基于0的索引。 24.     使用EventHandler代替自己定义的事件处理委托。 25.     使用EventHelper发布事件,而不要显示的抛出事件。 26.     避免显示声明委托的实例,应如下定义委托: delegate void SomeDelegate(); void SomeMethod() { } SomeDelegage someDelegate = SomeMethod; 27.     不要使用只有一个方法的接口,接口中方法的数目不要超过20个。 28.     不要把事件作为接口的成员。 29.     优先使用接口,其次考虑使用抽象类。 30.     优先使用明确的接口实现。 31.     未经明确声明不要使用一个对象具有的接口。 MyObject myObject; IMyInterface myInterface; myInterface = myObject as IMyInterface; 32.     使用资源代替把呈现给用户的字符串进行硬编码。 33.     不要把与部署有关的字符串进行硬编码。 34.     使用String.Empty 给空字符串赋值。 35.     创建一个长字符串时,使用StringBuilder代替string。 36.     不要再结构体中提供函数。 37.     当使用静态成员变量是提供静态构造函数。 38.     能使用前绑定就不要使用后绑定。 39.     给switch语句提供default子句,进行异常判断。 40.     除非在一个构造函数中调用另一个构造函数,否则尽量不要使用this引用。(不明白)。 41.     除非名称冲突或者需要调用父类的构造函数,否则不要使用base引用。(不明白) 42.     不要使用GC.AddMemeryPresure 43.     不要依赖HandleCollector 44.     出于性能的考虑,除了溢出检测,不要使用check关键字。 < 以下提到了限制的概念还不明白 > 45.     使用泛型的代码中避免与System.Object进行类型转换,而是使用限制或as算符。 //避免 class MyClass  {    void SomeMethod(T t)    { object temp = t;      SomeClass obj = (SomeClass)temp;    } }
       //正确 class MyClass where T : SomeClass {   void SomeMethod(T t)   {
             SomeClass obj = t;    } } 46.     泛型接口不要定义限制。接口层的限制通常能用强类型代替。 47.     不要再接口中定义与方法相关的限制。 48.     不要再委托中定义限制。 49.     如果类或方法定义了泛型和非泛型两种方式,优先使用泛型。 当实现一个继承自非泛型的接口的接口时,要显示声明所有方法,并把非泛型方法委托给泛型方 
 


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部