转:C# 命名规则与开发习惯
Pascal:将标识符的首字母和后面连接的每个单词的首字母都大写。可以对三字符或更多字符的标识符使用 Pascal 大小写。
Camel:标识符的首字母小写,而每个后面连接的单词的首字母都大写。
Camel:标识符的首字母小写,而每个后面连接的单词的首字母都大写。
标识符 | 大小写方式 | 示例 |
---|---|---|
类 | Pascal | AppDomain |
枚举类型 | Pascal | ErrorLevel |
枚举值 | Pascal | FatalError |
事件 | Pascal | ValueChange |
异常类 | Pascal | WebException
注意 总是以 Exception 后缀结尾。 |
只读的静态字段 | Pascal | RedValue |
接口 | Pascal | IDisposable
注意 总是以
|
方法 | Pascal | ToString |
命名空间 | Pascal | System.Drawing |
参数 | Camel | typeName |
属性 | Pascal | BackColor |
受保护的实例字段 | Camel | redValue
注意 很少使用。属性优于使用受保护的实例字段。 |
公共实例字段 | Pascal | RedValue
注意 很少使用。属性优于使用公共实例字段。 |
命名命名空间时的一般性规则是使用公司名称,后跟技术名称和可选的功能与设计。
以下规则概述命名类的指南:
- 使用名词或名词短语命名类。
- 使用 Pascal 大小写。
- 少用缩写。
- 不要使用类型前缀,如在类名称上对类使用
C
前缀。例如,使用类名称FileStream
,而不是CFileStream
。 - 不要使用下划线字符 (_)。
- 有时候需要提供以字母 I 开始的类名称,虽然该类不是接口。只要 I 是作为类名称组成部分的整个单词的第一个字母,这便是适当的。例如,类名称
IdentityStore
就是适当的。 - 在适当的地方,使用复合单词命名派生的类。派生类名称的第二个部分应当是基类的名称。例如,
ApplicationException
对于从名为Exception
的类派生的类是适当的名称,原因是ApplicationException
是一种Exception
。请在应用该规则时进行合理的判断。例如,Button
对于从Control
派生的类是适当的名称。尽管按钮是一种控件,但是将Control
作为类名称的一部分将使名称不必要地加长。
以下规则概述接口的命名指南:
- 用名词或名词短语,或者描述行为的形容词命名接口。例如,接口名称 IComponent 使用描述性名词。接口名称 ICustomAttributeProvider 使用名词短语。名称 IPersistable 使用形容词。
- 使用 Pascal 大小写。
- 少用缩写。
- 给接口名称加上字母
I
前缀,以指示该类型为接口。 - 在定义类/接口对(其中类是接口的标准实现)时使用相似的名称。两个名称的区别应该只是接口名称上有字母
I
前缀。 - 不要使用下划线字符 (_)。
命名属性时的一般性规则是将后缀
Attribute
添加到自定义属性类。枚举 (Enum) 值类型从 Enum 类继承。以下规则概述枚举的命名指南:
- 对于 Enum 类型和值名称使用 Pascal 大小写。
- 少用缩写。
- 不要在 Enum 类型名称上使用
Enum
后缀。 - 对大多数 Enum 类型使用单数名称,但是对作为位域的 Enum 类型使用复数名称。
- 总是将 FlagsAttribute 添加到位域 Enum 类型。
以下规则概述静态字段的命名指南:
- 使用名词、名词短语或者名词的缩写命名静态字段。
- 使用 Pascal 大小写。
- 不要在静态字段名称中使用匈牙利语表示法的前缀。
- 建议尽可能使用静态属性而不是公共静态字段。
以下规则概述参数的命名指南:
- 对参数名称使用 Camel 大小写。
- 使用描述性参数名称。参数名称应当具有足够的描述性,以便参数的名称及其类型可用于在大多数情况下确定它的含义。例如,提供上下文相关帮助的可视化设计工具会按开发人员键入的实际内容显示方法参数。在这种情况下,方法参数名称的表述必须清楚明白,开发人员才能提供正确的参数。
- 使用描述参数的含义的名称,而不要使用描述参数的类型的名称。开发工具将提供有关参数的类型的有意义的信息。因此,通过描述意义,可以更好地使用参数的名称。少用基于类型的参数名称,仅在适合使用它们的地方使用它们。
- 不要使用保留的参数。保留的参数是专用参数,如果需要,可以在未来的版本中公开它们。相反,如果在类库的未来版本中需要更多的数据,请为方法添加新的重载。
- 不要给参数名称加匈牙利语类型表示法的前缀。
以下规则概述方法的命名指南:
- 使用动词或动词短语命名方法。
- 使用 Pascal 大小写。
以下规则概述属性的命名指南:
- 使用名词或名词短语命名属性。
- 使用 Pascal 大小写。
- 不要使用匈牙利语表示法。
- 考虑用与属性的基础类型相同的名称创建属性。例如,如果声明名为 Color 的属性,则属性的类型同样应该是 Color。
以下规则概述事件的命名指南:
- 使用 Pascal 大小写。
- 不要使用匈牙利语表示法。
- 对事件处理程序名称使用
EventHandler
后缀。 - 指定两个名为 sender 和 e 的参数。sender 参数表示引发事件的对象。sender 参数始终是 object 类型的,即使在可以使用更为特定的类型时也如此。与事件相关联的状态封装在名为 e 的事件类的实例中。对 e 参数类型使用适当而特定的事件类。
- 用
EventArgs
后缀命名事件参数类。 - 考虑用动词命名事件。例如,命名正确的事件名称包括 Clicked、Painting 和 DroppedDown。
- 使用动名词(动词的“ing”形式)创建表示事件前的概念的事件名称,用过去式表示事件后。例如,可以取消的 Close 事件应当具有
Closing
事件和Closed
事件。不要使用BeforeXxx
/AfterXxx
命名模式。 - 不要在类型的事件声明上使用前缀或者后缀。例如,使用
Close
,而不要使用OnClose
。 - 通常情况下,对于可以在派生类中重写的事件,应在类型上提供一个受保护的方法(称为 OnXxx)。此方法只应具有事件参数 e,因为发送方总是类型的实例。
另外需要注意:
- 所有的成员变量前加前缀 m_。
- 常量全部大写,单词之间以 “_” 分隔。
- 使用某个控件的值时,尽量命名局部变量。
- 把引用的系统的namespace和自定义或第三方的分开。
- 生成和构建一个长的字符串时,一定要使用StringBuilder,而不用string。
- 文件名要能反应类的内容,最好是和类同名,一个文件中一个类。
流浪是注定的宿命;
漂泊是无尽的轮回。
漂泊是无尽的轮回。