版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
xx有限公司C#编程规范xxx有限公司C#编程规范C#编码规范文档版本号:V1.0文档编号:XXXX_TS_REGU_C#文档密级:内部公开归属部门/项目:研发部编写人:xxxx生效日期:xxxx-xx-xx版权信息本文件涉及之信息,属xxxx有限公司所有。未经xxxx有限公司允许,文件中的任何部分都不能以任何形式向第三方散发。网址:/
文档修订记录版本号修订日期修订人修订说明修订状态审核日期审核人批准人V1.0xxxxxxx正式版Axxxxxxxxxxx修订状态:A--增加,M--修改,D--删除日期格式:YYYY-MM-DD目录1. 命名约定 命名约定1.1命名解释使用下面的三种大写标识符约定。1.Pascal大小写将标识符的首字母和后面连接的每个单词的首字母都大写。可以对三字符或更多字符的标识符使用Pascal大小写。例如:BackColor2.Camel大小写标识符的首字母小写,而每个后面连接的单词的首字母都大写。例如:backColor3.大写标识符中的所有字母都大写。仅对于由两个或者更少字母组成的标识符使用该约定。例如:System.IOSystem.Web.UI1.2区分大小写为了避免混淆和保证跨语言交互操作,请遵循有关区分大小写的使用的下列规则:1不要使用要求区分大小写的名称。对于区分大小写和不区分大小写的语言,组件都必须完全可以使用。不区分大小写的语言无法区分同一上下文中仅大小写不同的两个名称。因此,在创建的组件或类中必须避免这种情况。2不要创建仅是名称大小写有区别的两个命名空间。例如,不区分大小写的语言无法区分以下两个命名空间声明。namespaceee.cummixxxxs;namespaceEe.Cummixxxxs;3不要创建具有仅是大小写有区别的参数名称的函数。下面的示例是不正确的。voidMyFunction(strixxxxa,strixxxxA)4不要创建具有仅是大小写有区别的类型名称的命名空间。在下面的示例中,Pointp和POINTp是不适当的类型名称,原因是它们仅是大小写有区别。System.Windows.Forms.PointpSystem.Windows.Forms.POINTp5不要创建具有仅是大小写有区别的属性名称的类型。在下面的示例中,intColor和intCOLOR是不适当的属性名称,原因是它们仅是大小写有区别。intColor{get,set}intCOLOR{get,set}6不要创建具有仅是大小写有区别的方法名称的类型。在下面的示例中,calculate和Calculate是不适当的方法名称,原因是它们仅是大小写有区别。voidcalculate()voidCalculate()下表汇总了大写规则,并提供了不同类型的标识符的示例。标识符大小写示例命名空间PascalSystem.Drawixxxx类PascalUserInfo枚举类型PascalErrorLevel枚举值PascalFatalError事件PascalValueChaxxxxe异常类PascalWebException注意总是以Exception后缀结尾。静态字段PascalRedValue接口PascalIDisposable注意总是以I前缀开始。方法PascalToStrixxxx属性PascalBackColor参数CameltypeName方法内的变量CamelbackColor保护级、私有级变量CameluserName公有变量PascalUserName常量全部大写PAGECOUNT命名规则2.1命名空间命名规则1命名命名空间时的一般性规则是使用公司名称,后跟技术名称和可选的功能与设计,如下所示。CompanyName.TechnologyName[.Feature][.Design]//CompaneyName:公司名称//TechnologyName:技术名称,如项目名称例如:Microsoft.MediaMicrosoft.Media.Design给命名空间名称加上公司名称或者其他知名商标的前缀可以避免两个已经发布的命名空间名称相同的可能性。例如,Microsoft.Office是由Microsoft提供的OfficeAutomationClasses的一个适当的前缀。2在第二级分层名称上使用稳定的、公认的技术名称。将组织层次架构用作命名空间层次架构的基础。命名一个命名空间,该命名空间包含为具有.Design后缀的基命名空间提供设计时功能的类型。例如,System.Windows.Forms.Design命名空间包含用于设计基于System.Windows.Forms的应用程序的设计器和相关的类。3嵌套的命名空间应当在包含它的命名空间中的类型上有依赖项。例如,System.Web.UI.Design中的类依赖于System.Web.UI中的类。但是,System.Web.UI中的类不依赖于System.UI.Design中的类。4应当对命名空间使用Pascal大小写,并用句点分隔逻辑组件,如Microsoft.Office.PowerPoint中所示。如果您的商标使用非传统的大小写,请遵循您的商标所定义的大小写,即使它与规定的Pascal大小写相背离。例如,命名空间NeXT.WebObjects和ee.cummixxxxs阐释了对于Pascal大小写规则的适当背离。5如果在语义上适当,使用复数命名空间名称。例如,使用System.Collections而不是System.Collection。此规则的例外是商标名称和缩写。例如,使用System.IO而不是System.IOs。6不要为命名空间和类使用相同的名称。例如,不要既提供Debug命名空间也提供Debug类。7最后,请注意命名空间名称不必非得与程序集名称相似。例如,如果命名程序集MyCompany.MyTechnology.dll,它没有必要非得包含MyCompany.MyTechnology命名空间。2.2类命名规则1使用名词或名词短语命名类。2使用Pascal大小写。3少用缩写。4不要使用类型前缀,如在类名称上对类使用C前缀。例如,使用类名称FileStream,而不是CFileStream。5不要使用下划线字符(_)。6有时候需要提供以字母I开始的类名称,虽然该类不是接口。只要I是作为类名称组成部分的整个单词的第一个字母,这便是适当的。例如,类名称IdentityStore是适当的。7在适当的地方,使用复合单词命名派生的类。派生类名称的第二个部分应当是基类的名称。例如,ApplicationException对于从名为Exception的类派生的类是适当的名称,原因是ApplicationException是一种Exception。请在应用该规则时进行合理的判断。例如,Button对于从Control派生的类是适当的名称。尽管按钮是一种控件,但是将Control作为类名称的一部分将使名称不必要地加长。下面是正确命名的类的示例。publicclassFileStreampublicclassButtonpublicclassStrixxxx2.3接口命名规则1用名词或名词短语,或者描述行为的形容词命名接口。例如,接口名称IComponent使用描述性名词。接口名称ICustomAttributeProvider使用名词短语。名称IPersistable使用形容词。2使用Pascal大小写。3少用缩写。4给接口名称加上字母I前缀,以指示该类型为接口。在定义类/接口对(其中类是接口的标准实现)时使用相似的名称。两个名称的区别应该只是接口名称上有字母I前缀。5不要使用下划线字符(_)。6当类是接口的标准执行时,定义这一对类/接口组合就要使用相似的名称。两个名称的不同之处只是接口名前有一个I前缀。以下是正确命名的接口的示例。publicinterfaceIserviceProviderpublicinterfaceIformatable以下代码示例阐释如何定义IComponent接口及其标准实现Component类。publicinterfaceIComponent{//Implementationcodegoeshere.}publicclassComponent:IComponent{//Implementationcodegoeshere.}2.4属性类命名规则应该总是将后缀Attribute添加到自定义属性类。以下是正确命名的属性类的示例。publicclassObsoleteAttribute{ //代码}2.5枚举类型命名规则1对于Enum类型和值名称使用Pascal大小写。2少用缩写。3不要在Enum类型名称上使用Enum后缀。2.6静态字段命名规则1使用名词、名词短语或者名词的缩写命名静态字段。2使用Pascal大小写。3对静态字段名称使用匈牙利语表示法前缀。4建议尽可能使用静态属性而不是公共静态字段。2.7参数命名规则1使用描述性参数名称。参数名称应当具有足够的描述性,以便参数的名称及其类型可用于在大多数情况下确定它的含义。2对参数名称使用Camel大小写。3使用描述参数的含义的名称,而不要使用描述参数的类型的名称。开发工具将提供有关参数的类型的有意义的信息。因此,通过描述意义,可以更好地使用参数的名称。少用基于类型的参数名称,仅在适合使用它们的地方使用它们。4不要使用保留的参数。保留的参数是专用参数,如果需要,可以在未来的版本中公开它们。相反,如果在类库的未来版本中需要更多的数据,请为方法添加新的重载。5不要给参数名称加匈牙利语类型表示法的前缀。以下是正确命名的参数的示例。TypeGetType(strixxxxtypeName)strixxxxFormat(strixxxxformat,args()Asobject)2.8方法命名规则1使用动词或动词短语命名方法。2使用Pascal大小写。3避免在函数名中使用“_”。以下是正确命名的方法的实例。RemoveAll()GetCharArray()Invoke()2.9属性命名规则1使用名词或名词短语命名属性。2使用Pascal大小写。3不要使用匈牙利语表示法。4考虑用与属性的基础类型相同的名称创建属性。例如,如果声明名为Color的属性,则属性的类型同样应该是Color。请参阅本主题中后面的示例。以下代码示例阐释正确的属性命名。publicclassSampleClass{ publicColorBackColor{ //CodeforGetandSetaccessorsgoeshere.} }以下代码示例阐释提供其名称与类型相同的属性。publicenumColor{//InsertcodeforEnumhere.}publicclassControl{ publicColorColor {get{//Insertcodehere.} set{//Insertcodehere.}}}以下代码示例不正确,原因是Color属性是int类型的。publicenumColor{//InsertcodeforEnumhere.}publicclassControl{ publicintColor {get{//Insertcodehere.}set{//Insertcodehere.}}}在不正确的示例中,不可能引用Color枚举的成员。Color.Xxx将被解释为访问一个成员,该成员首先获取Color属性(在VisualBasic中为Integer类型,在C#中为int类型)的值,然后再访问该值的某个成员(该成员必须是System.Int32的实例成员)。2.10事件命名规则1对事件处理程序名称使用EventHandler后缀。2指定两个名为sender和e的参数。sender参数表示引发事件的对象。sender参数始终是object类型的,即使在可以使用更为特定的类型时也如此。与事件相关联的状态封装在名为e的事件类的实例中。对e参数类型使用适当而特定的事件类。3用EventArgs后缀命名事件参数类。4考虑用动词命名事件。5使用动名词(动词的“ixxxx”形式)创建表示事件前的概念的事件名称,用过去式表示事件后。例如,可以取消的Close事件应当具有Closixxxx事件和Closed事件。不要使用BeforeXxx/AfterXxx命名模式。6不要在类型的事件声明上使用前缀或者后缀。例如,使用Close,而不要使用OnClose。7通常情况下,对于可以在派生类中重写的事件,应在类型上提供一个受保护的方法(称为OnXxx)。此方法只应具有事件参数e,因为发送方总是类型的实例。以下示例阐释具有适当名称和参数的事件处理程序。publicdelegatevoidMouseEventHandler(objectsender,MouseEventArgse);以下示例阐释正确命名的事件参数类。publicclassMouseEventArgs:EventArgs{intx;inty;publicMouseEventArgs(intx,inty){this.x=x;this.y=y;}publicintX{get{returnx;}}publicintY{get{returny;}}}变量命名规则2.11.1私有变量使用Camel大小写。例如:privatestrixxxxuserName;使用时:this.userName;2.11.2公有变量使用Pascal大小写。例如:publicstrixxxxUserName;使用时:this.UserName;2.11.3保护级变量使用Camel大小写。例如:protectedstrixxxxuserName;使用时:this.userName;2.11.4过程级变量使用Camel大小写。例如:strixxxxuserName;使用时:userName2.11.5类模块级变量1)公有变量使用Pascal大小写。例如:publicclassSample{publicintUserName;}2)私有变量及属性变量名=“m_”+代表变量含意的英文单词或单词缩写,使用Pascal大小写,例如publicclassSample{ privateintm_UserName; publicintUserName{get{returnm_UserName;}set{m_UserName=value;}}}3)保护级变量使用Camel大小写。例如:protectedintuserName;常量命名规则1使用名词或名词短语命名属性;2使用描述常量含义的名称;3全部大写,单词间以下划线隔开。例如:privateconstintTOTAL_PAGE=100;界面控件命名规则控件的命名=控件缩写前缀+“_”+变量名。变量名使用Pascal大小写Winform控件缩写控件名缩写控件名缩写LabelLblTreeViewTvwLinkLabelLnklblTabControlTctlButtonBtnDateTimePickerdtpTextBoxTxtHscrollBarHsbMainMenuMmnuVscrollBarVsbCheckBoxChkTimerTmrRadioButtonRdobtnImageListImglstGroupBoxGbxToolBarTlbPictureBoxPicStatusBarStbPanelPnlOpenFileDialogOdlgDataGridDgrdSaveFileDialogSdlgListBoxLstFoldBrowserDialogFddlgCheckedListBoxCnklstFontDialogFdlgComboBoxCbxColorDialogCdlgListViewLvwPrintDialogPdlgGroupBoxGbxWebControl命名规则控件名缩写控件名缩写AdRotatorAdrtPanelPnlButtonBtnPlaceHolderPlhCalendarCRadioButtonRdobtnCheckBoxChkRadioButtonListRdolstCheckBoxListChklstRaxxxxeValidatorRgvalCompareValidatorCmpvalRegularExpressionRglvalCustomValidatorCtmValRepeaterRptDataGridDgrdRequiredFieldValidatorvRfvalDataListDlstTableTbDropDownListDdlTableCellTbcelHyperLinkLnkTableRowTbrowImageImgTextBoxTxtImageButtonImgbtnValidationSummaryValsumLabelLblXMLxmlcLinkButtonLnkbtnListBoxLstADO.Net命名规则命名=缩写+“_“+代表其含义的英文单词或单词缩写,使用Pascal大小写。即便类型缩写类型缩写ConnectionconDataTabledtCommandcmdDataRowdrowParameterparmDataColumndcolDataAdapterdadDataRelationdrelDataReaderdtrDataViewdvwDataSetds例如:privateDataSetds_UserInfo;代码规范 1所有的缩进为4个空格,使用VS.NET的默认设置。 2在代码中垂直对齐左括号和右括号。if(x==0) { Response.Write("用户编号必须输入!");}不允许以下情况:if(x==0){ Response.Write("用户编号必须输入!");}或者:if(x==0){ Response.Write("用户编号必须输入!");}3当一行被分为几行时,通过将串联运算符放在每一行的末尾而不是开头,清楚地表示没有后面的行是不完整的。 4每一行上放置的语句避免超过一条。 5在大多数运算符之前和之后使用空格,这样做时不会改变代码的意图却可以使代码容易阅读。例: intj=i+k;而不应写为 intj=i+k; 6将大的复杂代码节分为较小的、易于理解的模块。7文件之中不得存在无规则的空行,比如说连续十个空行。一般来讲函数与函数之间的空行为2-3行; 8在函数体内部,在逻辑上独立的两个函数块可适当空行,一般为1-2行。 9每行长度尽量避免超过屏幕宽度,应不超过80个字符。 10尽量用公共过程或子程序去代替重复的功能代码段。 11使用括号清晰地表达算术表达式和逻辑表达式的运算顺序。如将x=a*b/c*d写成x=(a*b/c)*d可避免阅读者误解为x=(a*b)/(c*d)。 12避免采用过于复杂的条件测试。 13避免过多的循环嵌套和条件嵌套。 14一个函数不要超过200行。一个文件应避免超过2000行。 15避免采用多赋值语句,如x=y=z;注释规范注释规范包括:模块(类)注释规范、类的属性、方法注释规范、代码间注释4.1模块注释规范模块(类)开始必须以一下形式书写模块注释:///<summary> ///模块编号:<模块编号,可以引用系统设计中的模块编号> ///作用:<对此类的描述,可以引用系统设计中的描述> ///作者:作者中文名 ///编写日期:<模块创建日期,格式:YYYY-MM-DD> ///</summary>如果模块有修改,则每次修改必须添加以下注释:///<summary> ///Log编号:<Log编号,从1开始一次增加> ///修改描述:<对此修改的描述> ///作者:修改者中文名 ///修改日期:<模块修改日期,格式:YYYY-MM-DD> ///</summary>4.2类属性注释规范在类的属性必须以以下格式编写属性注释: ///<summary> ///属性说明///</summary>4.3方法注释规范在类的方法声明前必须以以下格式编写注释 ///<summary> ///说明:<对该方法的说明> ///</summary> ///<paramname="<参数名称>"><参数说明></param> ///<returns> ///<对方法返回值的说明,该说明必须明确说明返回的值代表什么含义>///</returns>不同的人在同一个类中开发的方法,要在方法中注释作者和时间。否则方法默认为模块作者。///<summary> ///说明:<对该方法的说明>///作者:作者中文名 ///编写日期:<模块创建日期,格式:YYYY-MM-DD> ///</summary> ///<paramname="<参数名称>"><参数说明></param> ///<returns> ///<对方法返回值的说明,该说明必须明确说明返回的值代表什么含义>///</returns>4.4代码间注释规范代码间注释分为单行注释和多行注释: 单行注释://<单行注释>多行注释:/*多行注释1多行注释2多行注释3*/代码中遇到语句块时必须添加注释(if,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论