C#开发命名规范
#### 前言
>命名规则是为了让整个程序代码统一以增强其可读性而设置的。每一个单位在开发一个软件之前都会编写一份编码规范的文档。
> 常用的命名方法有两种,一种是 Pascal 命名法(帕斯卡命名法),另一种是 Camel 命名法(驼峰命名法)。Pascal 命名法是指每个单词的首字母大写;Camel 命名法是指第一个单词小写,从第二个单词开始每个单词的首字母大写。
#### 软件架构
1. 数据库中每一张表对应一个实体类/数据传输对象(DTO)
2. 实体类名称使用表名,也可带有Dto后缀
3. 三层架构应当合理使用,不应生搬硬套
4. 三层架构元素推荐使用后缀
- XxxxxxDto 数据传输对象
- XxxxxxDAOFactory DAO工厂
- IXxxxxxDAO DAO接口
- IXxxxxxService 服务接口
- XxxxxManager 业务逻辑接口
#### 类
##### 标题
1. 使用能够反映类功能的名词或名词短语命名类。
2. 不要使用“I”、“C”、“_”等特定含义前缀
3. 自定义异常类应以Exception结尾
4. 文件名要能反映类的内容,最好是和类同名
##### 字段
1. 字段名采用camel规则
##### 属性
1. 属性使用Pascal规则
##### 方法
1. 方法名采用Pascal规则
2. 方法名应使用动词或动词短语
3. 类中访问修饰符或功能相同的方法应该放在一起
4. 且公共或实现接口的方法在前
##### 方法参数
1. 参数采用camel规则命名
2. 使用描述性参数名称,参数名称应当具有足够的说明性
3. 检查方法所有输入参数的有效性
##### 常量
1. 只读常量使用Pascal命名规则
##### 静态字段或属性
1. 静态字段或属性采用Pascal规则
#### 枚举
1. 枚举名使用Pascal规则命名
2. 枚举值从小到大顺序定义
#### 接口
1. 接口定义使用Pascal规则
2. 必须以大写“I”开头
3. 接口名称要有意义,中间不要有下划线“_”等字符
4. 如果类实现了接口,名称尽量和接口相同, 只是省掉“I”字符
#### 事件
1. 委托名称采用Pascal规则
2. 定义事件的委托要使用EventHandler后缀,且包括sender和e两个参数
3. 事件用到的参数,名称要带EventArgs后缀
#### 命名空间
1. 命名空间名称采用Pascal规则
2. 命名空间名称尽量反映其内容所提供的整体功能
#### 注释规范
##### 文件头部注释
1. 文件都包含文件头,要说明文件名、作者、创建时间、变更记录
##### 类及其成员注释
1. 对方法和类使用“///”三斜线注释
2. 代码行文注释采用“//”和“/**/”进行,应该尽量说明问题
#### 行文规范
##### 缩写规范
1. 标识符应当直观可望文知意,不提倡使用任何缩写
2. 字符串变量推荐是用“str”或“s”开头,采用string.Empty来初始化
3. 普通对象可以“obj”获"o"开头
4. 缩写可自行定义,一般取单词的前/后字符组成,以含义直观为准则
5. 不要让缩写破坏标识符的含义
##### 排版
1. 每行语句至少占一行,如果语句过长(超过一屏),则该语句断为两行显示
2. 把相似的内容放在一起,比如字段、属性、方法、事件等,使用“#region--#endregion”命令分组
3. 多个程序元素进行对等操作时, 操作符之前、之后或者前后都要加空格
4. 每个方法的源程序行数原则上应该少于200行
5. 语句嵌套层次不得超过3层
6. 避免相同的代码段在多个地方出现
##### 语句结构
1. 如果使用了异常结构,一定要处理异常, 一般是要写日志文件
2. 分支语句不应该使用复杂长条件, 应该将长条件封装成方法
3. switch语句,case后面必须接break
4. 禁止使用goto语句进行跳转
5. 行文中严禁出现“魔数”,特定含义的常数必须定义成枚举或常量
6. 不同类型的操作符混合使用时,使用括号给出优先级
7. 不允许使用复杂的操作符组合等。
8. 循环、判断语句的程序块部分用花括号括起来, 即使只有一条语句
9. 每个类和方法完成单一的功能,不设计多用途面面俱到的类或方法
10. 严禁使用未经初始化的变量,变量通常使用构造方法来初始
##### 代码缩进
1. 碰到大括号要换行
##### 大小写
1. 不要创建名称相同,但大小写区别的任何元素
2. 应当大写仅有两个字符的缩写
3. 不要把易混淆的数字和字符放在一起
4. 使用英文命名标识符
##### 重名规范
1. 不允许变量名、类名、属性名、 方法名等与系统标识符重名
健健
健健