c# 程序编码规范

来源:互联网 发布:excel引用重复数据 编辑:程序博客网 时间:2024/05/05 11:08


程序编码规则


驼峰式 Camel 命名法

变量名和函数名称是由二个或多个单词链接在一起的时候,第一个单词以小写字母开头,其他单词以大写字母开头。如:firstNamelastName

帕斯卡Pascal命名法

变量名和函数名称是由二个或多个单词链接在一起的时候,每个单词都以大写字母开头

大小写与命名

要采用大小写混合,提高名字的可读性

1.所有变量都用 驼峰式Camel 大小写形式。如:firstNamelastName

2.使用可以准确说明变量/字段/类的完整的英文描述符

3.不用单个字母的变量,循环迭代的变量例外

4.变量名中不使用下划线 

 

大小写对照表

标识符

大小写

示例

命名空间

Pascal

namespace Com.Techstar.ProductionCenter

类型

Pascal

public classDevsList

接口

Pascal

public interface ITableModel

方法

Pascal

public void UpdateData()

属性

Pascal

Public int Length{…}

事件

Pascal

public event EventHandler Changed;

私有字段

Camel

private string fieldName;

非私有字段

Pascal

public string FieldName

枚举值

Pascal

FileMode{Append}

参数

Camel

public void UpdateData(string fieldName)

局部变量

Camel

string fieldName;

 

类和接口命名

1.      类的名字名词,避免使用单词的缩写,除非它的缩写已经广为人知,如HTTP

2.      接口的名字以字母I开头

命名空间命名

好处:可避免类引用时的冲突和混淆

1.命名空间和目录结构相同

 

方法命名

1.第一个单词一般是动词

2.如果方法返回一个成员变量的值,方法名一般为Get+成员变量名,如若返回的值bool变量,一般以Is作为前缀,另外,如果必要,考虑用属性来替代方法

 

3. 如果方法修改一个成员变量的值,方法名一般为:Set +成员变量名,同上,如果必

要,考虑用属性来替代方法。

变量命名

按照使用范围来分,我们代码中的变量的基本上有以下几种类型:

a.类的公有变量;

b.类的私有变量(受保护同公有);

c.方法的参数变量;

d.方法内部使用的局部变量。

这些变量的命名规则基本相同,见标识符大小写对照表。:

Tab

 

Tab作为缩进,并设置缩进大小为4

 

使一个代码块内的代码都统一缩进一个Tab长度。

空行

在一个类中,各个方法需用一空行(最好是一个空行)

局部变量和它后边的语句之间

方法内的功能逻辑部分之间

{”,“}

开括号“{”放在块的所有者的下一行,单起一行;

闭括号“}”单独放在代码块的最后一行,单起一行。

空格

参数之间的逗号后加一空格.        如:method1(int i1, int i2)

二元操作符和操作数之间用空格隔开.        如:i + c;

强制类型转换时,在类型和变量之间加一空格.        如:(int) i ;

 

注释

注释应该增加代码的清晰度

保持注释的简洁,不是任何代码都需要注释的,过多的注释反而会影响代码的可读性

建议先写注释,后写代码,注释和代码一起完成

注释类型

C#的注释要认真写,打///就能帮你补全了,没理由偷懒。

 块注释

主要用来描述文件,类,方法,算法等,放在所描述对象的前边

行注释

主要用在方法内部,对代码,变量,流程等进行说明。整个注释占据一行。

尾随注释

与行注释功能相似,放在代码的同行,但是要与代码之间有足够的空间,便于分清。

例:int m = 4 ; /注释

如果一个程序块内有多个尾随注释,每个注释的缩进保持一致。

注释哪些部分

项目

注释哪些部分

参数

参数用来做什么

任何约束或前提条件

字段/属性

字段描述

类的目的

已知的问题

类的开发/维护历史

接口

目的

它应如何被使用以及如何不被使用

局部变量

用处/目的

成员函数注释

成员函数做什么以及它为什么做这个

哪些参数必须传递给一个成员函数

成员函数返回什么

已知的问题

任何由某个成员函数抛出的异常

成员函数是如何改变对象的

包含任何修改代码的历史

如何在适当情况下调用成员函数的例子适用的前提条件和后置条件

成员函数内部注释

控制结构

代码做了些什么以及为什么这样做

局部变量

难或复杂的代码

处理顺序

 

声明

每行只有一个声明,如果是声明i,j,k之类的简单变量可以放在一行;

除了for循环外,声明放在块的最开始部分。for循环中的变量声明可以放在for语句中。如:for(int i = 0; I < 10; i++)

避免块内部的变量与它外部的变量名相同。

表达式和语句

每行建议只有一条语句。

if-else,if-elseif语句,任何情况下,都应该有“{”“}”

switch语句,每个switch里都应包含default子语句

 

属性和方法的选择

@ 基本原则是方法表示操作,属性表示数据。如果其他各方面都一样,优先使用属性而不是方法。

@使用属性,如果该成员表示类型的逻辑attribue

@如果属性的值存储在内存中,而提供属性的目的仅仅是为了访问该值,使用属性而不要使用方法

@如果该操作每次返回的结果不同,那么使用方法

@如果该操作比访问字段慢一个或多个数量级,使用方法。

@如果该操作有严重的副作用,使用方法。

属性的设计规范:

如果不应该让调用方法改变属性值,创建只读属性;

´ 不要提供只写属性;

@为所有的属性提供合理的默认值,这样可以确保默认值不会导致漏洞或效率低的代码;

@允许用户以任何顺序来设置属性的值;

@避免在属性的获取方法抛出异常。

属性的获取方法应该是个简单的操作,不应该有任何的条件。如果一个获取方法会抛出异常,按么可能它更应该设计为方法。

字段设计规范

不要提供公有的或受保护的字段。代之以属性来访问字段;

用公有的静态只读字段来定义预定义的对象实例

例如:publicstatic readonly Color Red = new Color(0x0000FF);

参数设计中枚举和布尔参数的选择规范

 用枚举。在代码阅读,书写中,枚举都比布尔的可读性好很多

1.不使用单个字母的变量

2.一个方法只完成一个任务。不要把多个任务组合到一个方法中,即使那些任务非常小

3.避免写太长的方法

4.不在程序中使用固定数值,用常量代替

5.不用字符串常数

6.必要时使用enum,不用数字或字符串来指示离散值

7.不将成员变量声明为 public或 protected,声明为private

8.方法名需能看出它作什么,不使用会引起误解的名字

9.花括弧需独立一行

10变量名中不使用下划线

11.尽量使用英文,如果实在没有合适的英文进行描述

 

 

0 0