C#编程规范
- 前言
- 一、C# 代码风格要求
- 1.1 注释
- 1.2 类型(类、结构、委托、接口)、字段、属性、方法、事件的命名
- 1.3 不使用缩写
- 1.4 不使用单个字母的变量
- 1.5 一个.cs源文件至多定义两个类型
- 1.6 类型名称和源文件名称必须一致
- 1.7 所有命名空间、类型名称使用Pascal风格(单词首字母大写)
- 1.8 本地变量、方法参数名称使用Camel风格(首字母小写,其后每个单词的首字母大写)
- 1.9 私有方法、受保护方法,仍使用Pascal风格命名
- 1.10 类型内部的私有和受保护字段,使用Camel风格命名,但加“_”前缀
- 1.11 不能出现公有字段
- 1.12 如果if语句块的内容只有一行,可以不加花括号,并且最好和if语句位于同一行
- 1.13 调用类型内部其他成员,需加 this ;调用父类成员,需加 base
- 1.14 常用注意事项
- 1.15 类型成员的排列顺序
- 1.16 委托和事件的命名
- 1.17 返回bool类型的方法、属性的命名
- 1.18 常见集合类型后缀命名
- 1.19 常见字段、属性命名
- 总结
前言
在C#中通常使用的两种编码方式如下
Camel(驼峰式) : 大小写形式-除了第一个单词,所有单词第一个字母大写,其他字母小写。
Pascal(Pascal(帕斯卡): 大小写形式-所有单词第一个字母大写,其他字母小写。
一、C# 代码风格要求
1.1 注释
类型、属性、事件、方法、方法参数,根据需要添加注释。
如果类型、属性、事件、方法、方法参数的名称已经是自解释了,不需要加注释;否则需要添加注释。
当添加注释时,添加方式如下图所示:
1.2 类型(类、结构、委托、接口)、字段、属性、方法、事件的命名
优先考虑英文,如果英文没有合适的单词描述,可以使用拼音,使用中文是不符合要求的。
唯一可以使用中文的地方是枚举的枚举项,如下图所示:
1.3 不使用缩写
所有类型、方法、参数、变量的命名不得使用缩写,包括大家熟知的缩写,例如msg。
1.4 不使用单个字母的变量
不使用单个字母的变量, 像 i、m、n,使用index等来替换,用于循环迭代的变量除外。
1.5 一个.cs源文件至多定义两个类型
如果两个类型的关系是紧密相关的,比如 产品、产品类型,此时Product类,和ProductType枚举可以定义在同一个Product.cs文件中。
但不能在一个.cs文件中出现两个不相关的类型定义,例如将 Product类和Reseller类(分销商)定义在一个BasicInfo.cs文件中。
1.6 类型名称和源文件名称必须一致
当类型命名为Product时,其源文件命名只能是Product.cs。
1.7 所有命名空间、类型名称使用Pascal风格(单词首字母大写)
注意ProductType是私有类型,不管类型是公有的还是私有的,其命名总是采用Pascal风格。
1.8 本地变量、方法参数名称使用Camel风格(首字母小写,其后每个单词的首字母大写)
1.9 私有方法、受保护方法,仍使用Pascal风格命名
1.10 类型内部的私有和受保护字段,使用Camel风格命名,但加“_”前缀
1.11 不能出现公有字段
如果需要公有字段,使用属性进行包装。
1.12 如果if语句块的内容只有一行,可以不加花括号,并且最好和if语句位于同一行
1.13 调用类型内部其他成员,需加 this ;调用父类成员,需加 base
1.14 常用注意事项
- 避免使用大文件。如果一个文件里的代码超过300-400行,必须考虑将代码分开到不同的类中。同时避免写太长的方法,如果一个方法代码过长(暂时没有明确指出方法的行数),应该考虑将其分解为不同的方法
- 一个方法只完成一个任务。不要把多个任务组合到一个方法中,即使那些任务非常小
- 不在代码中使用具体的路径和驱动器名。 使用相对路径,并使路径可复用
- 不要“捕捉了异常却什么也不做“。如果隐藏了一个异常,你将永远不知道异常到底发生了没有
1.15 类型成员的排列顺序
类型成员的排列顺序自上而下依次为:
字段:私有字段、受保护字段
属性:私有属性、受保护属性、公有属性
事件:私有事件、受保护事件、公有事件
构造函数:参数数量最多的构造函数,参数数量中等的构造函数,参数数量最少的构造函数
方法:重载方法的排列顺序与构造函数相同,从参数数量最多往下至参数最少。
1.16 委托和事件的命名
委托以EventHandler作为后缀命名,例如SalesOutEventHandler。事件以其对应的委托类型,去掉EventHandler后缀,并加上On前缀构成。
例如,对于SalesOutEventHandler委托类型的事件,其事件名称为:OnSalesOut。
1.17 返回bool类型的方法、属性的命名
如果方法返回的类型为bool类型,则其前缀为Is、Can或者 Try,例如:
1.18 常见集合类型后缀命名
说明 | 后缀 | 示例 |
---|---|---|
数组 | Array | int[] productArray |
列表 | List | List productList |
DataTable/HashTable | Table | HashTable productTable |
字典 | Dictionary | Dictionay<string,string> productDictionary |
EF中的DbSet /DataSet | Set | DbSet productSet |
1.19 常见字段、属性命名
类型 | 名称 | 类型 | 名称 |
---|---|---|---|
Id(int型) | Id(“d”小写,弃用ID) | GuidId(Guid型) | Id |
Name | 名称 | Title | 标题 |
Remark | 备注、描述(弃用Memo、Description) | Category | 种类(弃用Class、Type) |
Linkman | 联系人 |
总结
程序员的一半工作都在考虑如何进行命名,良好的命名方式有助于代码的维护。这里总结一下常用命名:
使用Camel风格(首字母小写,其后每个单词的首字母大写):
- 类型内部的私有和受保护字段,但加“_”前缀;
- 本地变量、方法参数名称;
使用Pascal风格(单词首字母大写):
- 所有命名空间、类型名称;
- 私有方法、受保护方法;
bool类型的方法、属性:
- 前缀为Is、Can或者 Try;
委托和事件的命名:
- 委托以EventHandler作为后缀命名,例如 SalesOutEventHandle;
- 事件以其对应的委托类型,去掉EventHandler后缀,并加上On前缀构成,例如 OnSalesOut;