C#编码规范
C#编码规范
NameStandard
1. 类的命名规范:
1) 用名词或名词短语命名类。
2) 使用Pascal大写。 public class FileStream {}
3) 不加任何类前缀。
4) 文件名和类名要匹配。对于类HelloWorld, 相应的文件名应为 helloworld.cs 。
5) 当类只需有一个对象实例(全局对象如Application等),必须以Class结尾。 Class ScreemClass
6) 当类只用于作为其他类的基类,根据情况,以Base结尾。 Class CarBase
2. 接口的命名规范:
1) 使用名词或名词短语,或者描述行为的形容词来命名接口。例IComponent和IPersistable。
2) 使用Pascal大写。
3) 在接口名前加前缀I,以表示这个类型是一个接口。需要在类名前加上I而并不表示它是一个接口,只要I后面的字符是小写就可(例如,IdentityStore。)
4) 一对类/接口组合名称要相对应,两个名称的不同之处只是接口名前有一个I前缀。
public interface IComponent {}
public class Component : IComponent{}
3. 方法命名规范:
1) 用动词或动词短语命名方法。
2) 使用Pascal大写。RemoveAll()
3) 有返回值的方法的命名中要有返回值的描述,例如GetObjectState() ,如果返回值是bool,不要直接用做判断语句的条件。例如避免 if(IsEverythingOk()) 。
4. 属性命名规范:
1) 用名词或名词短语命名属性。
2) 用Pascal大写命名属性。成员变量与其属性的差别只在于第一个字母的大小写。
3) 属性与变量的类型要一样。
5. 变量命名规范:
1) 变量和方法参数使用Camel 大小写形式。 int totalCount = 0;
6. 总体规范:
1) 名字要有意义,用描述性的词语来命名,能通过名字知道功能(用于循环迭代的变量例外)。
2) 避免缩写。名字中不加下划线。
3) 使用有意义的名字定义名称空间,如产品名或者公司名 。把System系列名称空间组织到一起放上面,第三方提供的名称空间放到系统名称空间下面。
Remark:
Pascal大写—一种大小写形式,所有单词第一个字母大写,其他字母小写。
Camel大写—一种大小写形式,,除了第一个单词,所有单词第一个字母大写,其他字母小Structure&FormatStandard
1. 缩进用 TAB,不用 SPACES。
2. 在每个运算符前后都空一格。
3. 花括弧 ( {} ) 需和括号外的代码对齐。每个花括弧需独立一行。
4. 对于if语句,总使用一对{}把下面的语句块包含起来,哪怕只有一条语句也是如此。
5. 用一个空行来分开代码的逻辑分组。
6. 在一个类中,各个方法需用一空行,也只能是一行分开。
7. 注释需和代码对齐。只在必需的地方注释。行数不多的注释会使代码看起来优雅。(前提是你的代码命名有意义和逻辑结构清晰)。
8. 如果应为某种原因使用了复杂艰涩的原理,为程序配备良好的文档和重分的注释。
9. 避免在同一个文件中放置多个类。
10. 避免使用大文件。如果一个文件里的代码超过500行,必须考虑将代码分开到不同类中。
11. 总是使用接口。避免只有一个成员的接口,努力保证一个接口有3~5个成员。当使用抽象类的时候,提供一个接口。
12. 避免写太长的方法。如果一个方法发代码超过25行,应该考虑按不同操作将其分解为不同的方法,这样各个功能可以很容易被重用,而且各个方法内的代码改变也很容易理解。
13. 一个方法只完成一个任务。不要把多个任务组合到一个方法中,即使那些任务非常小。
14. 避免写超过5个参数的方法。如果要传递多个参数,使用结构。
15. 除了要在switch语句块中实现代码跳转,不要使用goto关键字。
16. 一定要让你的应用程序支持跟踪和日志。
ProgramStandard
1. 别在程序中使用固定数值,用常量代替。(0、1有例外)只对那些亘古不变的数值使用const关键字,例如一周的天数。
2. 别用字符串常数,用资源文件。
3. 不在代码中使用具体的路径和驱动器名。使用相对路径,并使路径可编程。且永远别设想你的代码是在“C:”盘运行。
4. 对一个数值变量采用不是0,-1等的数值初始化,给出选择该值的理由。
5. 避免使用很多成员变量。声明局部变量,并传递给方法。不要在方法间共享成员变量。否则很难知道是哪个方法在什么时候修改了它的值。
6. 别把成员变量声明为 public 或 protected。一般声明为 private 而使用 public/protected 的Properties。
7. 在最靠近一个局部变量被使用的地方声明该局部变量。
8. 避免 string name=””; 正确 string name=String.Empty;
9. 必要时使用enum,别用数字或字符串来指示离散值。enum MailType {Html, PlainText,Attachment} 使用各个离散时采用MailType.Html的形式,而不是逐个的“Html”。避免为枚举指定一个类型。
10. 使用C# 特有类型,而不是System命名空间中定义的别名类型。好: int age; string name; object contactInfo; 不好:Int16 age; String name; Object contactInfo;
11. 应用程序启动时作些“自检”并确保所需文件和附件在指定的位置。必要时检查数据库连接。出现任何问题给用户一个友好的提示。 如果需要的配置文件找不到,应用程序需能自己创建使用默认值的一份。
12. 异常处理 :
(1)错误消息而应给出具体错误消息和相应的用户需要做的操作。
(2)千万不要捕捉了异常却什么也不做。异常信息要精确记录错误的所有可能细节,包括发生的时间,和相关方法,类名等。
(3)别写太大的 try-catch 模块。如果需要,为每个执行的任务编写单独的 try-catch 模块。 这将帮你找出哪一段代码产生异常,并给用户发出特定的错误消息。
(4)如果应用程序需要,可以编写自己的异常类。自定义异常不应从基类SystemException派生,而要继承于. IApplicationException。对自定义的异常类加上后缀Exception。
(5)不必每个方法都用try-catch。当特定的异常可能发生时才使用。不必在所有方法中捕捉一般异常。不管它,让程序崩溃。这将帮助你在开发周期发现大多数的错误。
(6)数据库操作和文件操作时,finally很必要。