天涯一飘絮

导航

 

 

 在大家往下看的时候,请注意一点,本文描述的命名规范是用于公开成员的规范
    如果是内部的命名,这些可以根据团队内部而定

 

(公开成员)命名规范

一、  大小写约定

1、风格

通常使用以下两种风格来命名

PascalCasing

CamelCasing

 

PascalCasing约定被用于粗了参数名以外的所有表示名,它把标识符中每个单词的首字母(包括长度为两个字符以上的首字母缩写词)大写,比如

PropertyDescriptor

HtmlTag

两个字母长的首字母缩写是一个特例,这种情况下两个字母都要大写,比如:

IOStream

 

camelCasing约定于参数的名字,它把标识符中除了第一个单词外的所有单词首字母大写 例如

propertDecriptor

htmlTag

对于两个字母长的字母,两个都要小写,例如

ioStream

 

标识符
 大小写
 样例
 
命名空间
 Pascal
 Namespace System.Security
 
类型
 Pascal
 Public class StreamReader
 
接口
 Pascal
 Public interface IEnumerable
 
方法
 Pascal
 Public virtual string ToString()
 
属性
 Pascal
 Public int Length{get;}
 
事件
 Pascal
 Public event EventHandler Exited
 
字段(静态)
 Pascal
 Public static readonly int StuCount
 
枚举值
 Pascal
 Public enum Color{ Red, Yellow }
 
参数
 Camel
 Public int ToInt32(string value)
 


 

2、首字母缩写词大小写

         一般来说,要避免在标识符中使用首字母缩写词,除非它是普遍使用的,能够立即被使用者所理解的。比如 HTML, IO , XML,不怎么使用的要避免.

         这里值得注意的是,首字母缩写与单词缩写是两码事,绝对不能在标识符中使用单词缩写

         从定义上说,首字母缩写词必须至少有两个字母。由三个或三个以上的字母组成的首字母缩写遵循Pascal规范,只有第一个字母大写 比如 Html, Xml

         对于两个字的首字母缩写,除非它是参数名,否则一律都是大写,作为参数名一律都是小写 例如

         System.IO;

         Public void StartIO(Stream, ioStream);

 

3、复合词和常用术语的大小写

         在涉及到大小写时,大多数符合词术语要作为单个单词处理,比如

         Everyone, Anything

 

4、是否区分大小写

         不要因为编程语言区分大小写而以大小写来区分标识名。

        

         //错误的命名

         Int StudentID,

         Int studentID,

        

//正确的命名

Int StudentID

Int NewStudentID

 

二、  通用命名约定

1、   单词选择

标识符的名字应该清楚的说明每个成员做什么,以及每个类型和参数表示什么,名字俄意义清晰要比长度短更重要。

 

名字应该与场景、系统的逻辑组成或者无力组成以及人们熟悉的概念相对应,不应该与技术等难于理解的东西挂钩。

 

不要使用下划线,连接字符以及其他任何非字母也非数字的字符

 

不要使用匈牙利命名法

 

2、   使用单词缩写和首字母缩写词

一般来说,不要在表示符中使用单词缩写或者首字母缩写词。对于名字来说,可读性比简短更重要。

 

不要采用未被广泛接受的单词缩写和首字母缩写。也就是说,大多数并非领域专家的人能够立刻知道他们是什么意思。

例如:

要使用GetWindow 而不是GetWin

 

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

比如int ,string等

 

要给类型名使用语义上有意义的名字,而不要使用语言特有的关键字

比如 GetLength名字肯定比GetInt要好。

 

要使用常见的名字,比如value或者item,而不要重复类型的名字

比如 void Write( int value ) 不要使用 void Write(int int);

三、  为已有的API的新版本命名

有时候无法将一个新特性添加哀悼一个已经有的类型中去,即使已经有的类型名字意味着它是新特性的最佳归宿,在这种情况下需要添加新类型,类似的,需要提供额外的功能时,经常会无法对已有的成员进行扩展或重载,为此,只能用新名字来添加新成员。

 

要在创建已有的API的新版本时候使用旧API相似的名字。这有助突出API之间的关系

                            例如:

                            Public class AppDomain{}.

                            Public class AppDomainSetup{}

 

                            要优先使用后缀二不是前缀来表示已有API的新版本

                            因为大多数开发环境是按字母顺序显示标识符的,因此旧API与新API在位置上会非常接

近。方便使用者寻找。

 

要使用数字后缀来表示已有API的新版本-----------如果已有API的名字是唯一有意义的名字,不适合添加后缀。

 

四、  命名空间的命名

与其他命名规范一样,为命名控件命名的目标必须清晰,这对使用框架的程序员来说,他们能立刻知道命名控件大概有一些什么。以下是命名空间的一般行规则。

 

公司名字.产品/技术.特色

或者公司名字.子命名空间

例如:

Microsoft.VisualStudio

Microsoft.VisualStudio.Design

 

要用公司或者组织的名字作为命名空间前缀,这样就可以避免与别人冲突

 

不要使用同样的名字来命名命名空间与位于该命名空间中的类型

例如

如果定义了命名空间 Debug ,那么不要在该命名空间下提供一个名字为Debug的类型或者子命名空间

 

命名空间与类型名的冲突

 

不要使用太一般化的类型名, 比如Element, Node, Log以及Message,这样的名字可能会在常见场景中引起类型名冲突。应该给这些一般化的类型名加上修饰语

比如 FormElement, EventLog, SoapMessage

 

五、  类、接口、结构的命名

一般来说,类型名应该是名词词组,因为它们代表系统中的实体,一条很好的经验法则是:如果无法为类型找一个名词词组,那么可能应该重新考虑改类型的总体设计

考虑让派生类的名字以积累的名字结尾

                   这样做可读性非常好,而且可以清楚的解释他们之间的关系。

                   例如:

                   ArgumentOutofRangeException 它是一种 Exception

                   但是在运用的时候要作出合理的判断

                   比如Buttom中并没有出现Control字样

 

                   要让接口的名字以字母I打头,这样可以显示出该类型是一个接口

 

                   要确保对接口的实现的名字值差一个I,如果改类是改接口的标准实现

                   例如 Component:Icomponent

 

六、  类型成员的命名

1、   方法的命名

方法是用来执行操作的,因此,框架设计的规范要求方法名必须是动词或者动词词组。它还用来把方法同属性和类姓名区别开,属性和类型名是名词或者形容词

 

要针对方法所执行的任务给它命名,而不要根据一些实现细节

例如 :  Add表示添加 没必要使用AddStuInfoToDb

2、   属性的命名

与其他成员不同,属性应该使用名词词组或者形容词词组来命名。这是因为属性代表数据,因此它的名字应该要反映出这点

 

要用肯定行的短语来命名布尔属性,如果有帮助,还可以有选择行的给布尔属性添加,Is,Can,Has等前缀

 

考虑用属性的类型名来命名属性。

 

七、  字段的命名

要用名词和名词短语来命名字段,不要给字段加任何前缀

再次强调,这些标准只针对公有成员,私有则不作强制要求

 

八、  参数的命名

使用camelCasing风格。

要使用具有描述行的参数名

考虑根据参数的意思而不是参数的类型来命名

 

posted on 2009-01-15 10:55  冰云  阅读(215)  评论(0编辑  收藏  举报