dotNET开发设计规范

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

.NETDesignGuidelines综述命名原则大小写原则目前存在不同的大小写规范,下面列出的这些规范将在其后的章节反复引用。PascalCasing每一个单词的第一个字母大写,例如:BackColor。CamelCasing除了第一个单词以外的每个单词的第一个字母大写,例如:backColor。Uppercase如果缩写字母的个数小于或等于2,那么所有的缩写字母都大写。3个以上的字母缩写采用PascalCasing。例如:System.IOSystem.Web.UISystem.CodeDom综述TypeCaseNotesClassPascalCaseEnumvaluesPascalCaseEnumtypePascalCaseEventsPascalCaseExceptionclassPascalCase以Exception结尾FinalStaticfieldPascalCaseinterfacePascalCase用大写字母I开头MethodPascalCaseNamespacePascalCasepropertyPascalCasePublicInstanceFieldPascalCase很少使用,用在propertiesProtectedInstancesFieldscamelCase很少使用,用在propertiesparametercamelCase词汇的选择避免使类名和namespase的名称相同。不要用下列词汇作为类名SystemCollectionsFormsUI避免使用公共的标识符,保留字避免使用下列词汇:AddHandlerAddressOfAliasAndAnsiAsAssemblyAutoBitAndBitNotBitOrBitXorBooleanByRefByteByValCallCaseCatchCBoolCByteCCharCDateCDecCDblCharCIntClassCLngCObjConstCShortCSngCStrCTypeDateDecimalDeclareDefaultDelegateDimDoDoubleEachElseElseIfEndEnumEraseErrorEventExitExternalSourceFalseFinallyForFriendFunctionGetGetTypeGotoHandlesIfImplementsImportsInInheritsIntegerInterfaceIsLetLibLikeLongLoopMeModModuleMustInheritMustOverrideMyBaseMyClassNamespaceNewNextNotNothingNotInheritableNotOverridableObjectOnOptionOptionalOrOverloadsOverridableOverridesParamArrayPreservePrivatePropertyProtectedPublicRaiseEventReadOnlyReDimRegionREMRemoveHandlerResumeReturnSelectSetShadowsSharedShortSingleStaticStepStopStringStructureSubSyncLockThenThrowToTrueTryTypeOfUnicodeUntilVariantWhenWhileWithWithEventsWriteOnlyXorevalextendsinstanceofpackagevar名字空间下面是一些通用的命名名字空间的原则:CompanyName.TechnologyName我们希望名字空间有以下格式:Microsoft.OfficePowerSoft.PowerBuilder用Pascal命名约定,用句号区分不同的组件例如:Microsoft.Office.PowerPoint。如果你的品牌的大小写命名和传统方式不同,那么保留你的大小写,例如:NeXT.WebObjects或ee.cummings。用复数形式来命名名字空间例如:System.CollectionsnotSystem.Collection。对于一些常用的缩写,可以不用复数,例如:System.IO而不是System.IOs。不要为名字空间和类名指定相同的名称。例如不要把Debug设定为名字空间的名称,同时有一个类名称也是Debug。类和类成员类的命名原则用名词和名次短语作类名用Pascal命名规则尽量谨慎地使用缩写不要用任何类前缀(例如C,T)不要用下划线作类名publicclassFileStream{}publicclassButton{}publicclassString{}接口命名原则接口名字用名词或者名次短语,或形容词来表述接口的行为。例如:IComponent(描述性名词)ICustomAttributeProvider(名词短语)IPersistable(形容词)用Pascal命名规则尽量谨慎地使用缩写不要用下划线作类名接口名称前缀用字母I不要用字母C作为类名前缀有的时候,必须用字母I作为类名前缀,而又不是一个接口。这是可以接受的,因为有的类名就是I开头的,例如:IdentityStore。和接口的区别在于其第二个字母是小写的有的时候,定义完一个接口之后,也会定义一个类作为接口的标准实现。该类和该接口应该有类似的名字,唯一的区别就是接口名称前缀为字母I。下面的例子描述了接口IComponent和它的标准实现-类ComponentpublicinterfaceIComponent{}publicclassComponent:IComponent{}publicinterfaceIServiceProvider{}publicinterfaceIFormatable{}Attribute命名原则加”Attribute”后缀到定制属性类publicclassObsoleteAttribute{}枚举命名约定对于枚举类型名称用Pascal命名规则对于枚举值类型也使用Pascal命名规则谨慎地使用缩写对于枚举类型名称和枚举值不要用任何前缀例如:adXXXforADOenums,rtfXXXforrichtextenums,etc.对于枚举类型名称不要用Enum后缀对于枚举类型名称使用单数对于bit字段的枚举类型名称使用复数如果枚举值被用在函数参数和属性,请显示地定义参数类型为枚举类型。这样开发工具可以找到所有该属性可能用到的值(Toolbox)例如:publicenumFileMode{Create,CreateNew,Open,OpenOrCreate,Truncate}如果枚举值之间是逻辑或的关系,用Flag定制属性来表示[Flags]publicenumBindings{CreateInstance,DefaultBinding,ExcatBinding,GetField,GetProperty,IgnoreCase,InvokeMethod,NonPublic,OABinding,SetFieldSetProperty,Static}对于上述情况有一种例外,如果枚举值是包装的Win32API声明,那么我们保留所有的Win32声明风格,比如每个字母都是大写的用Int32作为enum的基本类型除非enum值用来表示一系列的Flag(Bitwise),并且Flag的个数多于32,或者将来的个数可能多于32,Int32不够用了;或者因为前向兼容的原因不能使用Int类型。仅仅当枚举的值是可以用BitFlag表示时才使用枚举,不要把枚举用在一个开放的集合,例如:操作系统的版本号ReadOnly和Const字段的命名静态字段的命名采用名词、名次短语或名次的缩写对于静态字段采用Pascal命名约定不要用匈牙利命名法的前缀参数的命名参数的名字应该是描述性的,也就是说参数的名称可以描述参数在大多数情况下的含义,参数的类型也是可以从参数的名字推断出来的参数的名字使用camelCasing(首字母小写)参数的名字是基于参数的含义而不是参数的类型我们希望开发工具能够提供方便地提供类型信息。偶尔使用基于类型的参数名称也是可以的。不要使用保留参数(Win32API常见)如果下一个版本需要更多的参数,那么加一个overload的方法。不要使用匈牙利命名法TypeGetType(stringtypeName)stringFormat(stringformat,object[]args)方法命名原则用动词或动词短语来命名用Pascal命名约定RemoveAll()GetCharArray()Invoke()属性命名原则属性名称使用名词或名词短语用Pascal命名约定可以考虑用类型名称作为属性名称当使用类型名称作为属性名称时,要确定该属性确实使用了该类型正确的例子:publicenumColor{...}publicclassControl{publicColorColor{get{...}set{...}}}错误的例子:publicenumColor{...}publicclassControl{publicintColor{get{...}set{...}}}事件命名约定对于EventHandler的命名使用EventHandler后缀publicdelegatevoidMouseEventHandler(objectsender,MouseEvente);用两个参数,分别命名为sender和eSender参数表示事件时被谁扔出来的,Sender参数的类型总是Object。e称之为事件参数。事件的状态被保存在e里。e是保存事件状态的类的实例publicdelegatevoidMouseEventHandler(objectsender,MouseEvente);事件参数类的命名使用EventArgs作为后缀publicclassMouseEventArgs:EventArgs{intx;inty;publicMouseEventArgs(intx,inty){this.x=x;this.y=y;}publicintX{get{returnx;}}publicintY{get{returny;}}}事件的命名根据事件发生的时间状态,分别使用动词的进行时和过去时(不要使用BeforeXxx\AfterXxx格式)例如:一个真实的close动作,可能产生两个事件,一个是Closing,你可以在这个事件里取消close动作。还有一个是Closed事件,你可以做一些清理工作。publiceventControlEventHandlerControlAdded{//..}考虑使用动词来命名事件大小写敏感避免类型名称混乱不同的语言用不同的术语来描述基本类型,所以我们要避免使用语言相关的术语用有含义的命名而不是用类型来命名有的时候变量确实没有特定的含义,这个时候我们就用一个通用的名字。例如,有一套函数把不同的数据类型写到流里voidWrite(doublevalue);voidWrite(floatvalue);voidWrite(longvalue);voidWrite(intvalue);voidWrite(shortvalue);上面的例子推荐改写到语言相关的格式:voidWrite(doubledoubleValue);voidWrite(floatfloatValue);voidWrite(longlongValue);voidWrite(intintValue);voidWrite(shortshortValue);在极端特殊的情况下,你可能要写一组方法针对每一种基本类型,那么请使用下表的统一类型名称C#VisualBasicJScriptVisualC++ILUniversalsbyteSByteSBytecharI1SBytebyteBytebyteunsignedcharU1Bytesh

1 / 57
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功