C# 系统编写规范总结版.docx

上传人:b****5 文档编号:4575538 上传时间:2022-12-06 格式:DOCX 页数:20 大小:26.98KB
下载 相关 举报
C# 系统编写规范总结版.docx_第1页
第1页 / 共20页
C# 系统编写规范总结版.docx_第2页
第2页 / 共20页
C# 系统编写规范总结版.docx_第3页
第3页 / 共20页
C# 系统编写规范总结版.docx_第4页
第4页 / 共20页
C# 系统编写规范总结版.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

C# 系统编写规范总结版.docx

《C# 系统编写规范总结版.docx》由会员分享,可在线阅读,更多相关《C# 系统编写规范总结版.docx(20页珍藏版)》请在冰豆网上搜索。

C# 系统编写规范总结版.docx

C#系统编写规范总结版

代码编写规范(C#)

目录

第一章规范目的2

第二章适用范围2

第三章注释规范2

3.1概述2

3.2自建代码文件注释3

3.3类属性注释3

3.4方法注释3

3.5代码间注释4

3.6异常捕获4

第四章总体命名规则5

第五章命名范例和规范6

5.1命名注记6

5.2命名详细说明6

5.2.1类名使用Pascal大小写形式6

5.2.2方法使用Pascal大小写形式6

5.2.3变量和方法参数使用Camel大小写形式6

5.2.4不要使用匈牙利方法来命名变量7

5.2.5用有意义的,描述性的词语来命名变量7

5.2.6文件名要和类名匹配7

5.2.7类中命名8

第六章良好的编程习惯9

第七章编码规则12

7.1错误检查规则12

7.2大括号规则12

7.3缩进规则13

7.4小括号规则13

7.5If Then Else规则13

7.6比较规则13

7.7Case规则14

7.8对齐规则14

7.9单语句规则14

7.10单一功能规则14

7.11简单功能规则14

7.12明确条件规则14

7.13选用FALSE规则14

7.14独立赋值规则14

7.15定义常量规则14

7.16模块化规则15

7.17交流规则15

第八章 编程准则15

8.1变量使用15

8.2数据库操作15

8.3对象使用15

8.4模块设计原则15

8.5结构化要求15

附件16

1.数据类型缩写表数据类型缩写16

2.控件缩写(以下只列举常用的控件,不是所有的控件均列举)16

第一章规范目的

一、为了统一团队软件开发设计过程的编程规范。

二.使程序开发人员能很方便的理解每个目录,变量,控件,类,方法的意义

三.为了保证编写出的程序都符合相同的规范,保证一致性、统一性而建立的程序编码规范。

四.编码规范和约定必须能明显改善代码可读性,并有助于代码管理、分类范围适用于所有基于.NET平台的软件开发工作

第二章适用范围

本规范适用于开发组全体人员,作用于软件项目开发的代码编写阶段和后期维护阶段。

第三章注释规范

3.1概述

别每行代码,每个声明的变量都做注释。

在需要的地方注释。

可读性强的代码需要很少的注释。

如果所有的变量和方法的命名都很有意义,会使代码可读性很强并无需太多注释。

行数不多的注释会使代码看起来优雅。

但如果代码不清晰,可读性差,那就糟糕。

如果应为某种原因使用了复杂艰涩的原理,为程序配备良好的文档和重分的注释。

对一个数值变量采用不是0,-1等的数值初始化,给出选择该值的理由。

简言之,要写清晰,可读的代码以致无须什么注释就能理解。

对注释做拼写检查,保证语法和标点符号的正确使用,以外还要注意:

a)       注释要求英文及英文的标点符号。

b)       注释中,应标明对象的完整的名称及其用途,但应避免对代码过于详细的描述。

c)       每行注释的最大长度为100个字符。

d)       将注释与注释分隔符用一个空格分开。

e)       不允许给注释加外框。

f)       编码的同时书写注释。

g)       重要变量必须有注释。

h)       变量注释和变量在同一行,所有注释必须对齐,与变量分开至少四个“空格”键。

如:

  int  m_iLevel,m_iCount;     // m_iLevel ....tree level

                                    // m_iCount ....count of tree items 

    string m_strSql;            //SQL

i)       典型算法必须有注释。

j)       在循环和逻辑分支地方的上行必须就近书写注释。

k)       程序段或语句的注释在程序段或语句的上一行

l)       在代码交付之前,必须删掉临时的或无关的注释。

m)       为便于阅读代码,每行代码的长度应少于100个字符。

3.2自建代码文件注释

对于自己创建的代码文件(如函数、脚本),在文件开头,编写如下注释:

//****************************************************************************

//**Copyright(c)2010-2011灵动软件培训第一组

//**创建人:

//**类名称\文件名:

//**类功能:

数据维护

//**描述:

//**创建日期:

//**修改人:

//**修改日期:

//**整理日期:

//****************************************************************************

3.3类属性注释

在类的属性必须以以下格式编写属性注释:

            /// 

            /// 

/// 

3.4方法注释

在类的方法声明前必须以以下格式编写注释:

#region方法原型方法说明

///

///方法说明

///

方法原型

{

方法体;

}

#endregion

如:

#regionpublicstaticvoidOutData(DataGridViewparamDataGridView)数据导出

///

///数据导出

///

///要操作的DataGridView控件

publicstaticvoidOutData(DataGridViewparamDataGridView)

{

}

#ednregion

3.5代码间注释

代码间注释分为单行注释和多行注释:

//<单行注释>

           /*多行注释1

             多行注释2

             多行注释3*/

代码中遇到语句块时必须添加注释(if,for,foreach,……),添加的注释必须能够说明此语句块的作用和实现手段(所用算法等等)。

3.6异常捕获

不要“捕捉了异常却什么也不做“。

如果隐藏了一个异常,你将永远不知道异常到底发生了没有。

发生异常时,给出友好的消息给用户,但要精确记录错误的所有可能细节,包括发生的时间,和相关方法,类名等。

只捕捉特定的异常,而不是一般的异常。

好:

voidReadFromFile(stringfileName)

{

try

{

//readfromfile.

}

catch(FileIOExceptionex)

{

//logerror.

//re-throwexceptiondependingonyourcase.

throw;

}

}

不好:

voidReadFromFile(stringfileName)

{

try

{

//readfromfile.

}

catch(Exceptionex)

{

//Catchinggeneralexceptionisbad...wewillneverknowwhetherit

//wasafileerrororsomeothererror.

//Hereyouarehidinganexception.

//Inthiscasenoonewilleverknowthatanexceptionhappened.

return"";

}

}

不必在所有方法中捕捉一般异常。

不管它,让程序崩溃。

这将帮助你在开发周期发现大多数的错误。

你可以用应用程序级(线程级)错误处理器处理所有一般的异常。

遇到”以外的一般性错误“时,此错误处理器应该捕捉异常,给用户提示消息,在应用程序关闭或用户选择”忽略并继续“之前记录错误信息。

不必每个方法都用try-catch。

当特定的异常可能发生时才使用。

比如,当你写文件时,处理异常FileIOException.

别写太大的try-catch模块。

如果需要,为每个执行的任务编写单独的try-catch模块。

这将帮你找出哪一段代码产生异常,并给用户发出特定的错误消息

如果应用程序需要,可以编写自己的异常类。

自定义异常不应从基类SystemException派生,而要继承于.IApplicationException。

第四章总体命名规则

一、名字应该能够标识事物的特性(尽量做到见名知意)。

二、名字一律使用英文单词,绝对不能为拼音。

三、名字尽量不使用缩写,除非它是众所周知的。

      

四、名字可以有两个或三个单词组成,但不应多于三个,控制在3至30个字母以内。

五、在名字中,多个单词用第一个字母大写(其它字母小写)来分隔。

例如:

IsSuperUser。

名字尽量使用前缀而不是后缀。

六、 名字中的单词尽量使用名词,如有动词,也尽量放在后面。

例如:

FunctionUserDelete(而不是FunctionDeleteUser)。

    

第五章命名范例和规范

5.1命名注记

Pascal大小写形式-所有单词第一个字母大写,其他字母小写。

Camel大小写形式-除了第一个单词,所有单词第一个字母大写,其他字母小写。

5.2命名详细说明

5.2.1类名使用Pascal大小写形式

publicclassHelloWorld

{

...

}

5.2.2方法使用Pascal大小写形式

publicclassHelloWorld

{

voidSayHello(stringname)

{

...

}

}

5.2.3变量和方法参数使用Camel大小写形式

publicclassHelloWorld

{

inttotalCount=0;

voidSayHello(stringname)

{

stringfullMessage="Hello"+name;

...

}

}

5.2.4不要使用匈牙利方法来命名变量

以前,多数程序员喜欢它-把数据类型作为变量名的前缀而m_作为成员变量的前缀。

例如:

stringm_sName;

intnAge;

然而,这种方式在.NET编码规范中是不推荐的。

所有变量都用camel大小写形式,而不是用数据类型和m_来作前缀。

5.2.5用有意义的,描述性的词语来命名变量

别用缩写。

用name,address,salary等代替nam,addr,sal

别使用单个字母的变量象i,n,x等.使用index,temp等

用于循环迭代的变量例外:

for(inti=0;i

{

...

}

如果变量只用于迭代计数,没有在循环的其他地方出现,许多人还是喜欢用单个字母的变量(i),而不是另外取名。

变量名中不使用下划线(_)。

命名空间需按照标准的模式命名

5.2.6文件名要和类名匹配

例如,对于类HelloWorld,相应的文件名应为helloworld.cs(或,helloworld.vb)

缩进和间隔缩进用TAB.不用SPACES.注释需和代码对齐.花括弧({})需和括号外的代码对齐.用一个空行来分开代码的逻辑分组。

boolSayHello(stringname)

{

stringfullMessage="Hello"+name;

DateTimecurrentTime=DateTime.Now;

stringmessage=fullMessage+",thetimeis:

"+currentTime.ToShortTimeString();

MessageBox.Show(message);

if(...)

{

//Dosomething

//...

returnfalse;

}

returntrue;

}

这段代码看起来比上面的好:

boolSayHello(stringname)

{

stringfullMessage="Hello"+name;

DateTimecurrentTime=DateTime.Now;

stringmessage=fullMessage+",thetimeis:

"+currentTime.ToShortTimeString();

MessageBox.Show(message);

if(...)

{

//Dosomething

//...

returnfalse;

}

returntrue;

}

5.2.7类中命名

在类中,各个方法需用一空行,也只能是一行分开。

花括弧需独立一行,而不象if,for等可以跟括号在同一行。

好:

if(...)

{

//Dosomething

}

不好:

if(...){

//Dosomething

}

即使对于可能仅出现在几个代码行中的生存期很短的变量,仍然使用有意义的名称。

仅对于短循环索引使用单字母变量名,如 i 或 j。

 鉴于大多数名称都是通过连接若干单词构造的,请使用大小写混合的格式以简化它们的阅读。

每个单词的第一个字母都是大写.

 在变量名中使用互补对,如 min/max、begin/end 和 open/close。

 (i = 1;i --  不要使用原义数字或原义字符串,如 For<= 7;i++)。

而是使用命名常数,如 For (i = 1;i <= NUM_DAYS_IN_WEEK;i++) 以便于维护和理解。

5.2.8控件命名

控件命名 = 控件名称前二到三个字母 + 名称,如Labl控件(labUserName)

具体常用控件缩写见附录。

5.2.9常量命名

常量名也应当有一定的意义,格式为 NOUN 或 NOUN_VERB。

常量名均为大写,字之间用下划线分隔。

例:

        private const bool   WEB_ENABLEPAGECACHE_DEFAULT           = true;

        private const int    WEB_PAGECACHEEXPIRESINSECONDS_DEFAULT = 3600;

        private const bool   WEB_ENABLESSL_DEFAULT                 = false;

注:

变量名和常量名最多可以包含 255 个字符,但是,超过 25 到 30 个字符的名称比较笨拙。

此外,要想取一个有实际意义的名称,清楚地表达变量或常量的用途,25 或 30 个字符应当足够了。

5.3类(Class)命名

a)       名字应该能够标识事物的特性。

b)       名字尽量不使用缩写,除非它是众所周知的。

c)       名字可以有两个或三个单词组成,但通常不应多于三个。

d)       在名字中,所有单词第一个字母大写。

例如  IsSuperUser,包含ID的,ID全部大写,如CustomerID。

e)       使用名词或名词短语命名类。

 

f)       少用缩写。

 

g)       不要使用下划线字符 (_)。

例:

    public class FileStream

public class Button

public class String

5.4接口(Interface)命名

      和类命名规范相同,唯一区别是  接口在名字前加上“I”前缀

      例:

      interface IDBCommand;

     interface IButton;

第六章良好的编程习惯

遵从以下良好的习惯以写出好程序

a)避免使用大文件。

如果一个文件里的代码超过300~400行,必须考虑将代码分开到不同类中。

b)避免写太长的方法。

一个典型的方法代码在1~25行之间。

如果一个方法发代码超过25行,应该考虑将其分解为不同的方法。

c)方法名需能看出它作什么。

别使用会引起误解的名字。

如果名字一目了然,就无需用文档来解释方法的功能了。

好:

voidSavePhoneNumber(stringphoneNumber)

{

//Savethephonenumber.

}

不好:

//Thismethodwillsavethephonenumber.

voidSaveData(stringphoneNumber)

{

//Savethephonenumber.

}

d)一个方法只完成一个任务。

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

好:

//Savetheaddress.

SaveAddress(address);

//Sendanemailtothesupervisortoinformthattheaddressisupdated.

SendEmail(address,email);

voidSaveAddress(stringaddress)

{

//Savetheaddress.

//...

}

voidSendEmail(stringaddress,stringemail)

{

//Sendanemailtoinformthesupervisorthattheaddressischanged.

//...

}

不好:

//Saveaddressandsendanemailtothesupervisortoinformthattheaddressisupdated.

SaveAddress(address,email);

voidSaveAddress(stringaddress,stringemail)

{

//Job1.

//Savetheaddress.

//...

//Job2.

//Sendanemailtoinformthesupervisorthattheaddressischanged.

//...

}

e)使用C#或VB.NET的特有类型,而不是System命名空间中定义的别名类型。

好:

intage;

stringname;

objectcontactInfo;

不好:

Int16age;

Stringname;

ObjectcontactInfo;

f)别在程序中使用固定数值,用常量代替。

g)别用字符串常数。

用资源文件。

h)避免使用很多成员变量。

声明局部变量,并传递给方法。

不要在方法间共享成员变量。

如果在几个方法间共享一个成员变量,那就很难知道是哪个方法在什么时候修改了它的值。

i)必要时使用enum。

别用数字或字符串来指示离散值。

好:

enumMailType

{

Html,

PlainText,

Attachment

}

voidSendMail(stringmessage,MailTypemailType)

{

switch(mailType)

{

caseMailType.Html:

//Dosomething

break;

caseMailType.PlainText:

//Dosomething

break;

caseMailType.Attachment:

//Dosomething

break;

default:

//Dosomething

break;

}

}

不好:

voidSendMail(stringmessage,stringmailType)

{

switch(mailType)

{

case"Html":

//Dosomething

break;

case"PlainText":

//Dosomething

break;

case"Attachment":

//Dosomething

break;

default:

//Dosomething

break;

}

}

j)别把成员变量声明为public或protected。

都声明为private而使用public/protected的Properties.

k)不在代码中使用具体的路径和驱动器名。

使用相对路径,并使路径可编程。

l)永远别设想你的代码是在“C:

”盘运行。

你不会知道,一些用户在网络或“Z:

”盘运行程序。

m)应用程序启动时作些“自检”并确保所需文件和附件在指定的位置。

必要时检查数据库连接。

出现任何问题给用户一个友好的提示。

n)如果需要的配置文件找不到,应用程序需能自己创建使用默认值的一份。

如果在配置文件中发现错误值,应用程序要抛出错误,给出提示消息告诉用户正确值。

o)错误消息需能帮助用户解决问题。

永远别用象"应用程序出错","发现一个错误"等错误消息。

而应给出象"更新数据库失败。

请确保登陆id和密码正确。

"的具体消息。

p)显示错误消息时,除了说哪里错了,还应提示用户如何解决问题。

不要用象"更新数据库失败。

"这样的,要提示用户怎么做:

"更新数据库失败。

请确保登陆id和密码正确。

"显示给用户的消息要简短而

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1