Dotnet设计规范

一、框架设计基础

1、对框架来说,最关键的品质应该是一致性

2、所谓框架,即可重用面向对象程序库

3、框架设计原则:在设计框架时,必须从一组使用场景以及实现这些场景的样例代码开始

4、确保每个主要特性域的命名空间只包含那些用于最常见场景的类型。应该把用于更高级场景的类型放在子命名空间中

5、尽可能提供强类型API;限制抽象的数量;避免把低层API和高层API混在同一命名空间中

二、命名规范

1、除参数名之外的所有标识符,标识符中每个单词的首字母大写

2、避免在标识符的名字中使用首字母缩写词,除非他们是普遍使用的 例:IO、XML (首字母缩写词都要大写)

3、不应该仅仅通过大小写来区分名字

4、为标识符选择易于阅读的名字,看重可读性而不是更看重简短性,不使用下划线和匈牙利命名法

5、不要在标识符中使用单词缩写或首字母缩写词,即使被广泛接受的首字母缩写词,也只应该在必须的时候使用,因为可读性比简短性更为重要

6、避免使用语言特有的名字

7、考虑让派生类的名字以基类的名字结尾

8、要让接口名字以字母I开头

9、要确保一对类/接口的名字只差一个“I”前缀,如果该类是该接口的标准实现

10、不要给枚举类型名字添加“Enum”、“Flag”的后缀

11、不要给枚举类型值的名字添加前缀(把枚举类型名作为前缀)

12、方法名必须是动词或动词词组,属性和类型名是名词或形容词词组

13、命名布尔属性,可以有选择性的给布尔属性添加“Is”、“Can”或“Has”等前缀

14、要用动词或动词短语命名事件,并用现在时和过去时来赋予事件名以之前和之后的概念 例:Closing、Closed

15、要在命名事件处理函数时加上“EventHandler”后缀,如ClickedEventHandler(Object sender, ClickedEventArgs e)

16、要在事件处理函数中用sender和e作为两个参数的名字

17、要在命名事件的参数类时加上“EventArgs”后缀,如15项例子中

18、要用名词或名词短语来命名字段,不要给字段添加前缀,命名字段时使用PascalCasing大小写风格

19、要在命名参数时使用camelCasing大小写风格、使用具有描述性的参数名,根据参数意思而不是根据参数类型来命名参数

三、类型设计规范 

1、引用类型在堆上分配,有垃圾回收期管理,而值类型要么在栈上分配在栈展开时释放,要么内联在容纳它的类型中并在容纳它的类型释放时释放,因此值类型的分配与释放开销更低

2、引用类型赋值复制引用,而值类型赋值复制整个值,因此对大的引用类型赋值比大的值类型开销要低

3、考虑定义结构的情况:类型实例比较小且生命周期比较短,或经常被内嵌在其他对象中

4、值类型不能自其它类型继承,但它们可以实现借口,通过定义接口来达到与多重继承相类似的效果

5、命名空间把类型组织成一个相关的特性域的层次结构

6、尽量少用静态类,它仅被用作辅助类,来支持框架的面向对象的核心

7、C#不允许结构有默认构造函数

8、一般来说,尽量少用嵌套类型,想让一个类型能够访问外层类型的私有成员时才使用嵌套类型

9、不要用嵌套类型来进行逻辑分组,应该用命名空间来达到此目的

四、成员设计 

1、方法、属性、事件、构造函数以及字段通称为成员

2、成员重载,参数数量或参数类型不同

3、如果两个重载中的某个参数表示相同的输入,那么该参数的名字应该相同,顺序一致

4、要把最长的重载做成虚函数,以便可扩展性,较短的重载应该仅仅调用较长的重载

5、不要在重载参数中使用ref或out修饰符,要允许可选参数为null

6、要把静态构造函数声明为私有,不要在静态构造函数中抛出异常

7、不要提供公有的或受保护的实例字段,应该提供属性来访问字段,而不应该使字段为公有的或受保护的

8、要用常量字段来表示永远不会改变的常量

9、要用公有的静态只读字段来定义预定义的对象实例

10、不要把可变类型的实例赋值给只读字段

五、为扩展性而设计 

1、密封类(sealed class)既无法派生子类,也无法扩展。与此相反,非密封类

2、子类可以访问保护成员并覆盖虚成员

六、编程风格约定

1、避免使用块注释语法(/* */)

2、不要把注释放在行尾,除非注释非常短

posted @ 2011-07-11 13:45  wnan  阅读(222)  评论(0编辑  收藏  举报