C# .NET编码规范

时光总嘲笑我的痴心妄想 提交于 2020-11-16 00:09:13

#编码规范
##术语定义
1. Pascal-标识符每个单词的首字母都大写。UserName
2. Camel-首字母小写。userId   

##文件命名组织
1. 文件命名:Pascal命名法,类名.cs    
2. 文件注释: 版权声明,文件功能简述,创建标识,修改标识。在修改处做详细注释   

##代码外观
1. 列宽: 110个字符  
2. 换行:在逗号后,操作符前换行  

##缩进
1. Tab替换成4个空格。 

##空行
1. 两个空行:接口与类之间、枚举与类之间、类与类之间
2. 一个空行:方法、属性、不同的逻辑块、返回语句之前、注释前、方法中变量声明与语句之间。  

##空格
1. 关键字与左括号之间:for (int ...)
2. 多个参数用逗号隔开,每个逗号后加一个空格:Add(a, b, c)
3. 除了"."之外,二元操作符用空格与操作数隔开,一元操作符、++/--不需要。a += c + b; n++;
4. 语句中的表达式:for (expr1; expr2; expr3)

##括号
1. (不要紧靠关键字,中间用一个空格。if (expr)
2. (与方法名之间不要空格。Add(....)
3. 没有必要,不要在返回语句使用()

##花括号{}
1. {放在关键字或方法名下一行并对齐。通常单独一行。
    if (n > 10)
    {

    }
2. if、while、do后面一定要使用{},无论{}中为空或只有一条语句。
    if (n > 10)
    {
        Work(n);
    }

##声明
1. 每行只做一个声明
2. 初始化:建议在声明时就对其进行初始化。string str = "";
3. 位置:建议在代码块开始处,声明变量
4. 字段的声明:不要使用public,protected,字段名用下划线开头,首字母小写。int _userId = 1;

##命名规范
###命名概述
1. 避免使用会导致多义性的名称:AnalyzeThis、xxK8
2. 只要合适,末尾或开头加计算限定符:Avg、Sum、Min、Max、Index
3. 在变量中使用互补对,min/max、begin/end、open/close
4. 布尔变量包含Is表示Yes/No,True/False值。fileIsFound
5. 状态变量,不使用诸如Flag的术语,使用更具描述性的名称:documentFormatType
6. 生存期很短的临时变量,尽量使用有意义的名称。考虑命名常数的使用:NUM_DAYS_IN_WEEK

###缩写
1. 尽量不使用缩写,除非是众所周知的。如UI、OLAP

###命名空间
1. 公司名称.项目名称.功能或设计
2. 命名空间和类不使用相同的名称

###类名、接口名
1. Pascal大小写
2. 使用名词、名词短语
3. 不使用"_"、避免缩写
4. 接口以“I"做前缀

###特性类
1. 总是将后缀"Attribute"加到自定义特性类名。ObsoleteAttribute

###枚举
1. Pascal大小写、不用缩写、不加Enum后缀
2. 使用单数名称,但是作为位域的Enum类型使用复数名称
3. 总是FlagsAttribute添加到位域Enum类型

###参数
1. 名称具有描述性
2. Camel大小写

###方法
1. 使用动词或动词短语。RemoveAll,GetCharArray,Invoke
2. Pascal大小写

###属性
1. 使用名词或名称短语
2. Pascal大小写

###事件
1. 事件处理程序名称使用EventHandler后缀
2. sender,e为参数
3. 用EventArgs后缀命名事件参数类
4. 考虑动词命名
5. 使用ing形式表示事件前的概念的事件,用过去式表示事件后。Closing事件/Closed事件
6. 对于可以在派生类中重写的事件,应提供一个受保护的方法OnClosing,只有e参数,发送方总是类型的实例。

###常量
1. 所有单词大写,多个单词用"_"隔开。PAGE_TITLE

###字段
1. private/protected使用Camel大小写
2. public使用Pascal大小写
3. 用"_"做前缀。private string _userName;

###静态字段
1. 使用名词、名称短语,Pascal大小写,s_或g_做前缀
2. 建议尽可能使用静态属性,不用公共静态字段

##其它
###表达式
1. 避免在表达式中用赋值语句
2. 避免对浮点类型做等于或不等于判断

###类型转换
1. 避免强制类型转换
2. 如不得不做类型转换,尽量用显示方式、

###接口可能抛出异常    

1. 接口会抛出异常的情况下,注释要做好 
2. 接口一般不处理异常,只抛出异常给用户处理    

###空的数据集合

1. 如要返回空的数据的集合,不要返回null, 返回空的、个数为0的集合    

  

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!