您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 信息化管理 > ZD-互联网GIS产品研发部-C#编程规范-V12
1/15互联网GIS产品研发部文件文档编号产品版本密级91.2产品名称:《ZD-互联网GIS产品研发部-C#编程规范-V1.2.doc》共15页C#编程规范Version1.2文档名称:ZD-互联网GIS产品研发部-C#编程规范-V1.2.doc2/15修订历史记录日期版本号修改说明修改人核准人2008-11-191.0首次撰写李源林2010-11-11.1完善规范内容郭明强黄友昕2010/12/241.12文档结构修改,并添加规范内容黄友昕2011/1/71.22011年1月6日晚开会讨论并修改郭明强、宋苗苗、雷磊、何亮、黄友昕等3/15C#编程规范1.命名规范1.1命名空间(Namespace)通常,一个工程使用一个命名空间,命名空间的语法是:公司名.产品名[.组件名的复数]对于平台研发,一个好的命名空间相当重要。好的公司应该对自己的所有产品做一个详细的命名空间规划,让人第一眼看你的命名空间就大概知道你的产品体系,例如:Microsoft.NerdDinner.DotNet.MVC.Controllers代表了微软公司NerdDinner项目.Net版本,MVC框架下的Controllers结构示例:ZDIMS.IGServer.Accelerator随便起一个命名空间的名字绝对不是一个好主意,一定要遵守上述规定。1.2类以Class声明的类,都必须以名词或名词短语命名,体现类的作用。如:ClassIndicator当类是一个特性(Attribute)时,以Attribute结尾,当类是一个异常(Exception)时,以Exception结尾:ClassColorSetExceptionClassCauseExceptionAttribute当类只需有一个对象实例(全局对象,比如Application等),必须以Class结尾,如ClassScreenClassClassSystemClass当类只用于作为其他类的基类,根据情况,以Base结尾:MustInheritClassIndicatorBase如果定义的类是一个窗体,那么名字的后面必须加前缀Form,如果是Web窗体,必须加前缀Page:ClassFormPrintClassPageStart4/151.3枚举和结构同样必须以名词或名词短语命名。最好体现枚举或结构的特点,如:enumColorButtons'以复数结尾,表明这是一个枚举structCustomerInfoRecord'以Record结尾,表明这是一个结构体1.4委派类型普通的委派类型以描述动作的名词命名,以体现委派类型实例的功能:DelegateDataSeeker()用于事件处理的委派类型,必须以EventHandler结尾,如:DelegateDataChangedEventHandler()1.5接口与其他类型不同,接口必须要由I作为前缀,并用形容词命名,突出表现实现接口的类将具有什么能力:InterfaceISortable上述所有规则的共同特点是,每个组成名称的词语都必须是大写开头,禁止完全大写或小写的名称。1.6方法的命名无论是函数还是子程序,方法都必须以动词或动词短语命名。无需区分函数和子程序,也无需指明返回类型。voidOpen(Stringpath)voidSetCopyNumber(Intnumber)1.7变量和属性1.字段与属性原则上,字段(Field)是不能公开的,要访问字段的值,一般使用属性。属性以简洁清晰的名词命名:privateIntconcentration=0;publicIntConcentration{get{returnconcentration;};5/15}2.成员变量以前,多数程序员喜欢把数据类型作为变量名的前缀而m_作为成员变量的前缀。例如:stringm_sName;intnAge;然而,这种方式在.NET编码规范中是不推荐的。所有变量都用Camel大小写形式,而不是用数据类型和m_来作前缀。用有意义的,描述性的词语来命名变量。别用缩写。用name,address,salary等代替nam,addr,sal。别使用单个字母的变量象i,n,x等。使用index,temp等。用于循环迭代的变量例外:for(inti=0;icount;i++){…}如果变量只用于迭代计数,没有在循环的其他地方出现,许多人还是喜欢用单个字母的变量(i),而不是另外取名。变量名中不使用下划线(_)。命名空间需按照标准的模式命名。文件名要和类名匹配,例如,对于类HelloWorld,相应的文件名应为helloworld.cs(或,helloworld.vb)3.数组型变量一般类型数组用变量名加复数如string[]nams;数组类型变量可在变量后面加上list或arr后缀。如ArrayListnameArrList=newArrayList();4.常量常数以表明常数意义的名词命名,一般不区分常数的类型:constIntDefaultConcentration=0.01在严格要求的代码中,常数以c_开头,如c_DefaultConcentration,但最好不要用它,它会带来输入困难。5.普通类型的变量普通类型的变量,只要用有意义的名字命名即可,不可使用简称和无意义的名称诸如A,x1等,下面给出了良好的例子:StringcustomerName不能起太长的名字,应该尽量简洁,如下面的例子:StringvariableUsedToStoreSystemInformation错误,太复杂了StringsystemInformation正确,简单明了特殊情况可以考虑一个或几个字母的变量:Graphicg;BinaryWriterbw;MemoryStreamms;Imageimg;6.控件类型变量对于控件,应该指明控件的类型,方法是直接在变量后面加以类名:ButtonbuttonNextPage按钮PanelpanelColorChoicer面版FileOpenDialogfileOpenDialogCard文件打开对话框6/15等等,无需规定某种类型的变量的前缀,只需把类型写在后面就行了,试对比下列代码:btnCancel.Text=&CancelcancelButton.Text=&Cancel显然后者更能使阅读者明白变量的类型是一个按钮。1.8事件事件是特殊的属性,只能在事件处理上下文中使用。命名的原则一般是动词或动词的分词,通过时态表明事件发生的时间:EventClickEventHandlerClickEventColorChangedEventHanglerColorChanged1.9标签标签就是用于Goto跳转的代码标识,由于Goto并不推荐使用,所以标签的使用也比较苛刻。标签必须全部大写,中间的空格用下划线_代替,而且应该以_开头,比如:_A_LABEL_EXAMPLE:如此定义标签是为了与其他代码元素充分区别。2.注释规范别每行代码,每个声明的变量都做注释。在需要的地方注释。可读性强的代码需要很少的注释,如果所有的变量和方法的命名都很有意义,会使代码可读性很强并无需太多注释。行数不多的注释会使代码看起来优雅。但如果代码不清晰,可读性差,那就糟糕。如果因为某种原因使用了复杂艰涩的原理,为程序配备良好的文档和重分的注释。对一个数值变量采用不是0,-1等的数值初始化,给出选择该值的理由。简言之,要写清晰,可读的代码以致无须什么注释就能理解。对注释做拼写检查,保证语法和标点符号的正确使用。(1)对于小段代码注释可以采用//。(2)对于大段代码注释,建议采用/*„„*/。(3)临时注释掉的代码需要说明注释原因。(4)做好变量的注释和关键代码处的注释。(5)注释方式要注意整齐美观,及时删除废代码。(6)函数注释///summary///设置图层显示条件////summary///paramname=sqlWhereClause显示条件语句如:ID20/param///returns成功与否/returnspublicboolSetDisplayCondition(string[]sqlWhereClause){7/15}(7)函数头注释每个源文件头部标示://Copyright(C)ZondyCyberCorporation.AllRightsReserved.//Creator:TomCreatetime:2009-08-27//Modifyby:***、***Modifytime:2010-08-27说明版权;由谁创建,创建时间;由谁修改,修改最后时间.3.编程风格遵从以下良好的习惯以写出好程序。3.1避免使用大文件如果一个文件里的代码超过300~400行,必须考虑将代码分开到不同类中。避免写太长的方法。一个典型的方法代码在1~25行之间。如果一个方法发代码超过25行,应该考虑将其分解为不同的方法。方法名需能看出它作什么。别使用会引起误解的名字。如果名字一目了然,就无需用文档来解释方法的功能了。好:voidSavePhoneNumber(stringphoneNumber){//Savethephonenumber.}不好://Thismethodwillsavethephonenumber.voidSaveData(stringphoneNumber){//Savethephonenumber.}一个方法只完成一个任务。不要把多个任务组合到一个方法中,即使那些任务非常小。好://Savetheaddress。SaveAddress(address);//Sendanemailtothesupervisortoinformthattheaddressisupdated.SendEmail(address,email);voidSaveAddress(stringaddress){//Savetheaddress.//…}8/15voidSendEmail(stringaddress,stringemail){//Sendanemailtoinformthesupervisorthattheaddressischanged.//…}不好://Saveaddressandsendanemailtothesupervisortoinformthattheaddressisupdated.SaveAddress(address,email);voidSaveAddress(stringaddress,stringemail){//Job1.//Savetheaddress.//…//Job2.//Sendanemailtoinformthesupervisorthattheaddressischanged.//…}3.2使用C#特有类型,而不是System命名空间中定义的别名类型好:intage;stringname;objectcontactInfo;不好:Int16age;Stringname;ObjectcontactInfo;3.3别在程序中使用固定数值,用常量代替别用字符串常数,用资源文件。避免使用很多成员变量,声明局部变量,并传递给方法。不要在方法间共享成员变量,如果在几个方法间共享一个成员变量,那就很难知道是哪个方法在什么时候修改了它的值。必要时使用enum,别用数字或字符串来指示离散值。好:enumMailType{Html,PlainText,9/15Attachment}voidSendMail(stringmessage,MailTypemailType){switch(mailType){caseMailType.Html://Dosomethingbreak;caseMailType.PlainText://Dosomethingbreak;caseMailType.Attachment://Dosomethingbreak;default://Dosomethingbreak;}}不好:voidSen
本文标题:ZD-互联网GIS产品研发部-C#编程规范-V12
链接地址:https://www.777doc.com/doc-471635 .html