软件开发代码规范C版.doc_第1页
软件开发代码规范C版.doc_第2页
软件开发代码规范C版.doc_第3页
软件开发代码规范C版.doc_第4页
软件开发代码规范C版.doc_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、文档编号版本密级1.0本部门开放工作规范共15页软件开发代码规范(C#版)拟制:日期:2007-2-13审核:日期:审核:日期:批准:日期:版权所有 *有限公司修订纪录日期修订版本描述作者2007-2-131.00初稿完成2007-5-101.01修正2007-11-21.02修正目 录1、第一章 命名规范41.1、第一节 总则41.2、第二节 变量命名规范41.2.1、CodeBehind内部命名规范41.2.2、控件命名规范51.3、第三节常量命名规范51.4、第四节命名空间、类、方法命名规范51.5、第五节接口命名规范61.6、第六节命名规范小结62、第二章 代码注释规范62.1、第一节

2、模块级注释规范(命名空间、类等)62.2、第二节方法级注释规范72.2.1 、属性注释72.2.2 、方法注释72.3、第三节代码间注释规范83、第三章编写规范83.1、第一节 格式规范83.2、第二节 编程规范93.2.1 、程序结构要求93.2.2 、可读性要求93.2.3 、结构化要求103.2.4 、正确性与容错性要求103.2.5 、可重用性要求103.2.6 、interface使用注意事项113.2.7 、类使用注意事项113.2.8 、流程控制语句注意事项123.2.8 、其他应注意事项13注:Pascal命名法则:即名称中所有单词的第一个字母大写其他字母使用小写形式。Came

3、l命名法则:即名称中第一个单词各个字母全部小写,其他部分遵循Pascal命名法则。1、 第一章 命名规范1.1、 第一节 总则1 本命名规则除特殊提及外统一使用Camel命名法则。如:controlMenu2 命名时尽量不使用拼音,更不可使用拼音缩写(专有名词除外)。3 如果使用品牌名称命名时其大小写尽量保持和品牌名称一致的样式。如:LuX则命名时,不要写成LUX,或者Lux,而应该保持与原品牌名称风格一致使用LuX4 使用专有名词或英文缩写命名时采用大写形式。如:CNNIC5 禁止使用仅区分大小写的方式命名。如:Abc与abc仅用大写A来区分,这样写在类C系语言中不会出错,但是不利于系统的迁

4、移1.2、第二节 变量命名规范1.2.1、CodeBehind内部命名规范1公有字段/属性使用Pascal 命名规则,私有变量/保护变量/局部变量使用Camel 命名规则,遵循动宾结构。例:public class Hello private string userName; private DateTime loginTime; private bool isOnline; public string UserName get return this.userName; 2 即使对于可能仅出现在几个代码行中的生存期很短的变量,仍然使用意义描述性的名称。仅对于短循环索引使用单字母变量名,如 i

5、 或 j3在变量名中使用互补对,如 Min/Max、Begin/End 和 Open/Close。4当一个方法内部变量繁多的时候,可以使用Camel命名法则,其中第一个单词可以使用变量类型的缩写来说明以示区别。例:string strName;int intAge;object objPerson;1.2.2、控件命名规范1控件命名使用控件缩写加名称的方式例:控件缩写声明Labellblprotected Label lblName;TextBoxtxtprotected TextBox txtContent;CheckBoxchkprotected CheckBox chkRight;But

6、tonbtnprotected Button btnOK;ListBoxlbxprotected ListBox lstItem;DropDownListddlprotected DropDownList ddlArea;etc.1.3、第三节常量命名规范常量名也应当有一定的意义,格式为 NOUN 或 NOUN_VERB。常量名均为大写,字之间用下划线分隔。例: private const bool WEB_ENABLEPAGECACHE_DEFAULT = true; private const int WEB_PAGECACHEEXPIRESINSECONDS_DEFAULT = 3600

7、; private const bool WEB_ENABLESSL_DEFAULT = false;注:变量名和常量名最多可以包含 255 个字符,但是,超过 25 到 30 个字符的名称比较笨拙。此外,要想取一个有实际意义的名称,清楚地表达变量或常量的用途,25 或 30 个字符应当足够了。1.4、第四节命名空间、类、方法命名规范1名字应该能够标识事物的特性。2名字尽量不使用缩写,除非它是众所周知的。3名字可以有两个或三个单词组成,但通常不应多于三个。4使用名词或名词短语命名类。5尽可能少用缩写。6不要使用下划线字符 (_)。7命名空间名称使用此格式:Snda + 项目名称 + 逻辑层名称

8、例:namespace Snda.CodeTest.BRpublic class FileStreampublic void InPut(string para)1.5、第五节接口命名规范和类命名规范相同,唯一区别是接口在名字前加上大写“I”前缀 例: interface IDBCommand;interface IButton;1.6、第六节命名规范小结1、使用Pascal命名方式命名类、方法、属性和常量2、使用Camel命名方式命名局部变量和方法的参数3、接口使用Pascal命名方式,并且在前面添加“I”4、方法命名使用动宾结构,比如ShowDialog( )5、有返回值的方法命名应有单词

9、来描述,比如GetObjectState( )6、避免使用带命名空间的类型,尽量用using关键字7、避免把using语句放到命名空间内8、控件命名使用控件缩写加名称的方式9、常量命名采用全部大写的形式,要想一个有实际意义的名称,清楚地表达常量的用途2、第二章 代码注释规范2.1、第一节模块级注释规范(命名空间、类等)模块须以以下形式书写模块注释:/ / (功能模块简述)/ / / 名称:(或者编号,当模块繁多的时候以编号检索)/ 功 能:/ 程序设计:/ 开发日期:/ 备注:/ 修 改 人:/ 修改日期:/ 备注:(如果多次修改,请重复以上三项)/ public class TestSpac

10、e注意:详细说明都写在内部,为的是既方便IDE动态帮助又方便自动化出工程文档,适用以下注释规范,不再赘述。修改人和修改日期每次修改的时候都要自行添加上去。2.2、第二节方法级注释规范2.2.1 、属性注释属性必须以以下形式给予注释,如果有备注的需求请加在内部:/ / 简述属性功能/ / / 备注/ public string Name;2.2.2 、方法注释/ / (简述方法功能)/ / param name=/ / 对方法返回值的说明,该说明必须明确说明返回的值代表什么含义/ / (使用示例)/ / 名称:(或者编号,当模块繁多的时候以编号检索)/ 功 能:/ 程序设计:/ 开发日期:/ 备

11、注:/ 修 改 人:/ 修改日期:/ 备注:(如果多次修改,请重复以上三项)/ public void TestMethod(string Para)2.3、第三节代码间注释规范代码间注释分为单行注释和多行注释: 单行注释:/ 多行注释: /*多行注释1 多行注释2 多行注释3*/代码中遇到语句块时必须添加注释(if,for,foreach,),添加的注释必须能够说明此语句块的作用和实现手段(所用算法等等)。但是显而易见的代码不易注释。行间的注释量不得大于代码量的,不小于2.4、第四节功能变更注释规范当对某个现有的功能进行修改时,需要在该功能所在的方法内部加上注释,阐明变更内容、变更时间、变更

12、人。假如这一功能变更非常重要,请在模块描述中也加上相关注释。建议格式如下:/功能变更:XXXXX updated by who YYMMDD3、第三章编写规范3.1、第一节 格式规范1 所有的缩进为1个Tab(设置1个Tab占4个空格空间),使用VS.NET的默认设置。2 在代码中垂直对齐左括号和右括号。例:if (x = 0) this.Response.Write(用户编号必须输入!); 允许以下情况:if (x = 0) this.Response.Write(用户编号必须输入!);不允许以下情况:if (x = 0) this.Response.Write(用户编号必须输入!); 3

13、为了防止在阅读代码时不得不滚动源代码编辑器,每行代码或注释在1024*800的显示频率下不得超过一显示屏。4 当一行被分为几行时,通过将串联运算符放在每一行的末尾而不是开头,清楚地表示没有后面的行是不完整的。5 每一行上放置的语句避免超过一条。6 在大多数运算符之前和之后使用空格,这样做时不会改变代码的意图却可以使代码容易阅读。例: int j = i + k;而不应写为 int j=i+k;7 将大的复杂代码节分为较小的、易于理解的模块。3.2、第二节 编程规范3.2.1 、程序结构要求1 程序结构清晰,简单易懂,单个函数的程序行数不得超过100行。2 打算干什么,要简单,直截了当,代码精简

14、,避免垃圾程序。3 尽量使用.NET库函数和公共函数(无特殊情况不要使用外部方法调用Windows的核心动态链接库API)。4 不要随意定义全局变量,尽量使用局部变量。3.2.2 、可读性要求1 保持注释与代码完全一致。2 去除无效的注释3 处理过程的每个阶段都有相关注释说明。4 利用缩进来显示程序的逻辑结构,缩进量一致并以Tab键为单位,定义Tab为 4个空格。5 循环、分支层次不要超过五层。6 注释可以与语句在同一行,也可以在上行,视语句的长短而定。7 一目了然的语句不加注释。8 注释的作用范围可以为:定义、引用、条件分支以及一段代码。9 去除IDE自动生成的注释,比如:.private

15、void Page_Load(object sender, EventArgs e) /to do.(删除这段注释)3.2.3 、结构化要求1 禁止出现两条等价的支路。2 除了在switch关键字的作用域内,禁止goto语句。3 用 if 语句来强调只执行两组语句中的一组。禁止 else goto 和 else return。4 用 case实现多路分支。5 避免从循环引出多个出口。6 函数只有一个出口。7 尽量不使用条件赋值语句。8 避免不必要的分支。9 不要轻易用条件分支去替换逻辑表达式。3.2.4 、正确性与容错性要求1 程序首先是正确,其次是优美。2 无法证明你的程序没有错误,因此在编

16、写完一段程序后,应先回头检查。3 改一个错误时可能产生新的错误,因此在修改前首先考虑对其它程序的影响。4 所有变量在调用前必须被初始化。5 对所有的用户输入,必须进行合法性检查。6 尽量不要比较浮点数的相等,如: 10.0 * 0.1 = 1.0 , 不可靠,因为不同CPU的浮点运算能力是不同的7 程序与环境或状态发生关系时,必须主动去处理发生的意外事件,如文件能否逻辑锁定、打印机是否联机等,对于明确的错误,要有明确的容错代码提示用户,在这样不确定的场合都使用try throw catch。8 单元测试也是编程的一部份,提交联调测试的程序必须通过单元测试。9 尽量使用规范的容错语句.例:try

17、catchfinally3.2.5 、可重用性要求1 重复使用的完成相对独立功能的算法或代码应抽象为服务或类。2 服务或类应考虑OO思想,减少外界联系,考虑独立性或封装性。3.2.6 、interface使用注意事项1避免一个接口中只有一个成员。尽量使每个接口中包含35个成员。接口中的成员不应该超过20个。避免接口成员中包含事件。2推荐使用显式的接口实现。3.2.7 、类使用注意事项1避免方法的返回值是错误代码。2尽量定义自定义异常类。当需要定义自定义的异常时:a) 自定义异常要继承于ApplicationException。b) 提供自定义的序列化功能。3只对外公

18、布必要的操作。4使程序集尽量为最小化代码(EXE客户程序)。使用类库来替换包含的商务逻辑。5不要提供public的成员变量,使用属性代替他们。6避免在继承中使用new而使用override替换。7在不是sealed的类中总是将public 和 protected的方法标记成virtual的。8避免显式的转换,使用as操作符进行兼容类型的转换。例:Dog dog = new GermanShepherd(); GermanShepherd shepherd = dog as GermanShepherd; if (shepherd != null ) 9当类成员包括委托的时候在调用委托之前一定要

19、检查它是否为null例:public class MySource public event EventHandler MyEvent; public void FireEvent() EventHandler temp = MyEvent; if(temp != null ) temp(this,EventArgs.Empty); 10不要提供公共的事件成员变量,使用事件访问器替换这些变量。例:public class MySource MyDelegate m_SomeEvent ; public event MyDelegate SomeEvent add m_SomeEvent +=

20、value; remove m_SomeEvent -= value; 11避免在结构里面提供方法。建议使用参数化构造函数,可以重裁操作符。12类成员间调用请尽量使用this关键字。13除非你想重写子类中存在名称冲突的成员或者调用基类的构造函数否则不要使用base来访问基类的成员。3.2.8 、流程控制语句注意事项1即使if语句只有一句,也要将if语句的内容用大括号扩起来。2避免在条件语句中调用返回bool值的函数。可以使用局部变量并检查这些局部变量。例:bool IsEverythingOK() /避免 if (IsEverythingOK () /替换方案 bool ok = IsEver

21、ythingOK(); if (ok) 3总是使用基于零开始的数组。4在循环中总是显式的初始化引用类型的数组。例:public class MyClass MyClass array = new MyClass100; for(int index = 0; index array.Length; index+) arrayindex = new MyClass(); 5除非在不完全的switch语句中否则不要使用goto语句。3.2.8 、其他应注意事项1避免将多个类放在一个文件里面。2一个文件应该只有一个命名空间,避免将多个命名空间放在同一个文件里面。3一个文件最好不要超过500行的代码(不

22、包括机器产生的代码)。4避免方法中有超过5个参数的情况。使用结构来传递多个参数。5每行代码不要超过80个字符。6不要手工的修改机器产生的代码。如果需要编辑机器产生的代码,编辑格式和风格要符合该编码标准。7不要硬编码数字的值,总是使用构造函数设定其值或采用常数的方式。8只有是自然结构才能直接使用const,比如一个星期的天数。9避免在只读的变量上使用const。如果想实现只读,可以直接使用readonly。例:public class MyClass public readonly int Number; public MyClass(int someValue) Number = someVa

23、lue; public const int DAYS_IN_WEEK = 7; 10代码的每一行都应该通过白盒方式的测试。11在捕获(catch)语句的抛出异常子句中(throw),总是抛出原始异常维护原始错误的堆栈分配。例:catch(Exception exception) MessageBox.Show(exception.Message); throw; /和throw exception一样。 12避免在单个程序集里使用多个Main方法。13数据访问中凡是使用DateReader对象的,必须使用using语句来即时释放资源;对于Stream、StreamReader之类的对象,也要使

24、用using语句来即时释放资源14避免指定特殊类型的枚举变量。例:/避免public enum Color : long Red,Green,Blue 15不要硬编码可能更改的基于配置的字符串,比如连接字符串。16当需要构建长的字符串的时候,使用StringBuilder不要使用string17能使用早期绑定就不要使用后期绑定。18使用应用程序的日志和跟踪。19总是选择使用C#内置(一般的generics)的数据结构。比如:使用int 而不用 Int32,使用object 而不用Object,使用string 而不用 String 等。20将所有的系统命名空间组织在一起,将所有自定义的命名空间组织在一起例:using System;using Sy

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论