C#编码规范.doc

C#编码规范.doc

ID:20513352

大小:720.50 KB

页数:10页

时间:2018-10-10

上传者:U-20936
C#编码规范.doc_第1页
C#编码规范.doc_第2页
C#编码规范.doc_第3页
C#编码规范.doc_第4页
C#编码规范.doc_第5页
资源描述:

《C#编码规范.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

C#编码规范第10/10页1程序结构所有源代码的结构均采用以下顺序布局,对于没有的部分可以省略,便于阅读代码。//==============================================================================================#regionConstant#endregionConstant//----------------------------------------------------------------------------------------------#regionMembers#endregionMembers//----------------------------------------------------------------------------------------------#regionDefaults#endregionDefaults//----------------------------------------------------------------------------------------------#regionProperties#endregionProperties//==============================================================================================#regionConstructors#endregionConstructors//----------------------------------------------------------------------------------------------#regionInterfaceMethods#endregionInterfaceMethods//----------------------------------------------------------------------------------------------#regionStaticMethods#endregionStaticMethods//----------------------------------------------------------------------------------------------#regionOverrideMethods#endregionOverrideMethods//----------------------------------------------------------------------------------------------#regionPrivateMethods#endregionPrivateMethods//----------------------------------------------------------------------------------------------#regionProtectedMethods#endregionProtectedMethods//----------------------------------------------------------------------------------------------#regionPublicMethods#endregionPublicMethods//==============================================================================================#regionEvents#endregionEvents//==============================================================================================2命名规则和风格⑴类、方法、常量采用Pascal风格命名publicclassSomeClass{constintDefaultSize=100;publicSomeMethod(){}}长江大学计算机学院jky.yangtzeu.edu.cn C#编码规范第10/10页⑵成员变量采用Camel风格命名,但前面加一个底划线publicclassSomeClass{int_port=5000;publicSomeMethod(){}}⑶局部变量和方法参数采用Camel风格命名publicclassSomeClass{publicSomeMethod(intlen){stringsLine;}}⑷接口采用I作为前缀命名interfaceIMyInterface{}⑸自定义属性类型以Attr作为后缀命名⑹自定义异常类型以Ex作为后缀命名⑺采用动名词命名方法,例如ShowDialog()⑻有返回值的方法的命名应该能够描述其返回值,例如GetObjectState()⑼采用描述性的变量名。   a)避免采用单字母的变量名,如i或t;而是采用index或tempb)对public和protected成员避免采用用匈牙利命名法,如:采用Port不用nPort,c)尽量不要采用缩写(例如将number缩写为num)⑽总是使用C#预定义的类型,而不是使用System命名空间中的别名例如:采用object不用Object采用string不用String采用int不用Int32⑾对于泛型类型采用大写字母。当处理.NET类型的Type时保留其后缀Type//正确方法:publicclassLinkedList{……}//避免使用:    publicclassLinkedList{……}⑿采用有意义的命名空间名,例如产品名称或公司名称⒀避免使用类的全称,而是采用using声明⒁避免在命名空间内使用using语句⒂把所有系统框架提供的名称空间组织到一起,把第三方提供的名称空间放到系统名称空间的下面长江大学计算机学院jky.yangtzeu.edu.cn C#编码规范第10/10页using System;  using System.Collection.Generic;  using System.ComponentModel;  using System.Data; using MyCompany; using MyControls;⒃使用代理推导而不要显式的实例化一个化代理(C#2.0新特性)delegate void SomeDelegate();  public void SomeMethod()  {…}  SomeDelegate someDelegate=SomeMethod;⒄使用tab缩进,缩进4个空格⒅总是把花括号“{”和“}”独立放在新的一行⒆一个文件名应该能够反映它所对应的类名1编码实践1. 避免在同一个文件中放置多个类2. 避免在一个文件内写多于500行的代码(机器自动生成的代码除外)3. 避免写超过25行代码的方法4. 避免写超过5个参数的方法,如果要传递多个参数,使用结构5.运算符的两边均应插入一个空格,便于阅读代码6. 注释时,在注释符号后面插入一个空格,便于阅读代码//自定义类public class MyClass{...}7. 不要手动去修改任何机器生成的代码a) 如果修改了机器生成的代码,修改你的编码方式来适应这个编码标准b) 尽可能使用partial classes特性,以提高可维护性。(C#2.0新特性)8. 避免对那些很直观的内容作注释,代码本身应该能够解释其本身的含义。由可读的变量名和方法名构成的优质代码应该不需要注释9. 注释应该只说明操作的一些前提假设、算法的内部信息等内容10. 避免对方法进行注释a) 使用充足的外部文档对API进行说明b) 只有对那些其他开发者的提示信息才有必要放到方法级的注释中来11. 除了0和1,绝对不要对数值进行硬编码,通过声明一个常量来代替该数值12. 只对那些亘古不变的数值使用const关键字,例如一周的天数13. 避免对只读(read-only)的变量使用const关键字。在这种情况下,直接使用readonly关键字public class MyClass{public const int DaysInWeek=7;pubic readonly int Number;public MyClass(int someValue){Number=someValue;}长江大学计算机学院jky.yangtzeu.edu.cn C#编码规范第10/10页}14. 对每一个假设进行断言。平均起来,每5行应有一个断言using System.Diagnostics;object GetObject(){…}object someObject=GetObject();Debug.assert(someObject!=null);15. 每一行代码都应该以白盒测试的方式进行审读16. 只捕捉那些你自己能够显式处理的异常17. 如果在catch语句块中需要抛出异常,则只抛出该catch所捕捉到的异常(或基于该异常而创建的其他异常),这样可以维护原始错误所在的堆栈位置catch(Exception ex){MessageBox.Show(ex.Message);throw;//或throw exception;}18. 避免利用返回值作为函数的错误代码19. 避免自定义异常类20. 当自定义异常类的时候a) 让你自定义的异常类从Exception类继承b) 提供自定义的串行化机制23. 避免friend assemblies,因为这会增加程序集之间的耦合性24. 避免让你的代码依赖于运行在某个特定地方的程序集25. 在application assembly(EXE client assemblies)中最小化代码量。使用类库来包含业务逻辑26. 避免显式指定枚举的值//正确  public enum Color{Red,Green,Blue} //避免  public enum Color{Red=1,Green=2,Blue=3}29. 避免使用三元条件操作符30. 避免利用函数返回的Boolean值作为条件语句。把返回值赋给一个局部变量,然后再检测Bool IsEverythingOK(){…} //避免if(IsEverythingOk()){…}//正确bool ok=IsEverythingOK();if (ok){…}31. 总是使用以零为基数的数组长江大学计算机学院jky.yangtzeu.edu.cn C#编码规范第10/10页32. 总是使用一个for循环显式的初始化一个引用成员的数组public class MyClass{}const int ArraySize=100;MyClass[] array=new MyClass[ArraySize];For (int index=0;index或者GenericEventHandler41. 避免显示触发事件。使用EventsHelper安全的发布事件42. 总是使用接口43. 接口和类中方法和属性的比应该在2:1左右44. 避免只有一个成员的接口45. 努力保证一个接口有3~5个成员46. 不要让一个接口中成员的数量超过20,而12则是更为实际的限制47. 避免在接口中包含事件48. 当使用抽象类的时候,提供一个接口49. 在类继承结构中暴露接口50. 推荐使用显式接口实现51. 从来不要假设一个类型支持某个接口。在使用前总是要询问一下SomeType obj1;ImyInterface obj2;//Some code to initialize obj1,then:obj2=obj1 as ImyInterface;if(obj2!=null){长江大学计算机学院jky.yangtzeu.edu.cn C#编码规范第10/10页obj2.Method1();}else{//Handle erro in expected interface}53. 不要硬编码那些可能会随发布环境变化而变化的字符串,例如数据库连接字符串54. 使用String.Empty取代""//避免string name=””;//正确string name=String.Empty;55. 使用一个超过80字符的长字符串的时候,使用StringBuilder代替string56. 避免在结构中提供方法a) 参数化的构造函数是鼓励使用的b) 可以重载运行符58. 当早绑定(early-binding)可能的时候就尽量不要使用迟绑定(late-binding)59. 让你的应用程序支持跟踪和日志61. 总在switch语句的default情形提供一个断言int number=SomeMethod();swith(number){case 1:   trace.WriteLine(“Case 1:”)break;case 2:trace.Writeline(“Case 2:”);break;default:debug.Assert(false);break;}62. 除了在一个构造函数中调用其它的构造函数之外,不要使用this关键字//Example of proper use of 'this'public class MyClass{public MyClass(string message){...}public MyClass():this(“Hello”){...}}63. 不要使用base关键字访问基类的成员,除非你在调用一个基类构造函数的时候要决议一个子类的名称冲突//Example of proper use of 'base'public class Dog{public Dog(string name){...}virtual public void Bark(int howlong){...}}public class GermanShepherd:Dog长江大学计算机学院jky.yangtzeu.edu.cn C#编码规范第10/10页{public GermanShepherd(string name):base(name){...}override public void Bark(int howLong){base.Bark(howLong)}}66. 基于《Programming .NET components》2/e中第四章的内容实现Disponse()和Finalize()方法67. 总是在unchecked状态下运行代码(出于性能的原因),但是为了防止溢出或下溢操作,要果断地使用checked模式Int CalcPower(int number,int power){int result=1;for (int count=1;count<=power;count++){checked{result*=number;}}return result;}68. 使用条件方法来取代显式进行方法调用排除的代码(#if…#endif)1控件命名1.1数据类型命名数据类型数据类型简写标准命名举例Boolean                       bbIsPostBackInteger       nnRowCounterLong                            llPosSingleffMaxXDouble                         ddMaxValueChar                          ccDelimiterStringssFirstNameDateTime                     dtdtStartDateByte                         bytbytPixelValueDecimaldecdecAverageHeight长江大学计算机学院jky.yangtzeu.edu.cn C#编码规范第10/10页ShortshtshtAverageObject         obj                objReturnValueArray后面加sstudentsArrayList前面加arrayarrayStudentList前面加listlistStudent1.1Win控件命名控件类型控件类型简写标准命名举例LabellbllblMessageLinkLabelllblllblTodayButtonbtnbtnSaveTextBoxtxttxtNameMainMenumnmnFileMenuItemmimiFileOpenPopupMenupmpmPrintCheckBoxchkchkStockRadioButtonrdordoSelectedGroupBoxgbogboMainPictureBoxpicpicImagePanelpnlpnlBodyDataGridgrdgrdViewListBoxlstlstProductsCheckedListBoxlstlstCheckedComboBoxcbocboMenuListViewlvwlvwBrowserTreeViewtvwtvwTypeTabControlctlctlSegyInfoTabPageTabtabTrackInfoDateTimePickerdtpdtpStartDateHscrollBarhsbhsbImageVscrollBarvsbvsbImageTimertimtimCountImageListimgimgListToolBartlbtlbManageStatusBarstbstbFootPrintOpenFileDialogdlgdlgOpenSaveFileDialogdlgdlgSaveFoldBrowserDialogdlgdlgBrowserFontDialogdlgdlgFont长江大学计算机学院jky.yangtzeu.edu.cn C#编码规范第10/10页ColorDialogdlgdlgColorPrintDialogdlgdlgPrint1.1Web控件命名控件类型控件类型简写标准命名举例AdRotatoradrtExampleButtonbtnbtnSubmitCalendarcalcalMettingDatesCheckBoxchkchkBlueCheckBoxListchklchklFavColorsCompareValidatorvalcvalcValidAgeCustomValidatorvalxvalxDBCheckDataGriddgrddgrdTitlesDataListdlstdlstTitlesDropDownListdropdropCountriesHyperLinklnklnkDetailsImageimgimgAuntBettyImageButtonibtnibtnSubmitLabellbllblResultsLinkButtonlbtnlbtnSubmitListBoxlstlstCountriesPanelpnlpnlForm2PlaceHolderplhplhFormContentsRadioButtonradradFemaleRadioButtonListradlradlGenderRangeValidatorvalgvalgAgeRegularExpressionvalevaleEmail_ValidatorRepeaterrptrptQueryResultsRequiredFieldValidatorvalrvalrFirstNameTabletbltblCountryCodesTableCelltblctblcGermanyTableRowtblrtblrCountryTextBoxtxttxtFirstNameValidationSummaryvalsvalsFormErrorsXMLxmlcxmlcTransformResults1.2ADO.Net控件命名控件类型控件类型简写标准命名举例ConnectionconconNorthwind长江大学计算机学院jky.yangtzeu.edu.cn C#编码规范第10/10页CommandcmdcmdReturnProductsParameterparparProductIDDataAdapterdadaProductsDataReaderdrdrProductsDataSetdsdsNorthWindDataTabledtdtProductDataRowrowrowRow98DataColumncolcolProductIDDataRelationrelrelMasterDetailDataViewvwvwFilteredProducts1.1希腊字母命名αAlphaιIotaρRhoβBetaκKappaσSigmaγGammaλLambdaτTauδDeltaμMuυUpsilonεEpsilonνNuφPhiζZetaξXiχChiηEtaοOmicronψPsiθThetaπPiωOmega长江大学计算机学院jky.yangtzeu.edu.cn

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
关闭