CSharpJava代码编写规范.docx_第1页
CSharpJava代码编写规范.docx_第2页
CSharpJava代码编写规范.docx_第3页
CSharpJava代码编写规范.docx_第4页
CSharpJava代码编写规范.docx_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

代码规范基本代码规范1、 异常处理模式,每个函数都要求使用try-catch,catch的结果都输送到Console2、 If、switch代码段都需要使用括起来,即使只有一句代码3、 字符串的比较需要使用Equals,不能直接使用=4、 添加引用时,把拷贝到本地设置为false5、 一个函数里面,返回出口只有一个,如果中间有分支,采用变量记录需要返回的结果,在最后统一返回修改前代码: if (index -1 & index Commands.Count) return this.Commandsindex as IBaseItem; else return null; 修改后代码: IBaseItem item = null; try item = Commandsindex as IBaseItem; catch (Exception ex) Appliction.ActiveApplication.Output.Output(ex.Message); return item;6、 成员字段的初始化,包括需要new的成员变量,都在统一的一个函数或者相应的构造函数里面进行,不要在外面直接new7、 事件参数和事件代理类型的声明和实现均放到实现该事件的类型里面去8、 内部使用的全局字段,需要以g_大头,后面第一个单词字母大写,即后面按照函数名的命名方式进行9、 Form或者UserControl的界面成员变量和局部变量的名称的命名规则是:m_ + 要素类型(第一个英文字符小写)+名称(第一个字符要大写),即界面类成员变量的命名规则在原来的基础上增加界面要素类型。举例原来命名为m_workspaceName,如果这个变量的类型为TextBox,则重新命名为m_textBoxWorkspaceName;注意,此规则只限于界面要素成员变量即局部变量,其他类型变量命名规则不变。10、 资源命名时,根据资源的不同类型在前面添加前缀,比如字符Resources.String_,图片Resources.Image_等等11、 所有流程图VSD文件中的字体均采用微软雅黑字体,其中流程图中的字号为9号字。所有流程图中均要给出流程图的名称和作者名称。12、 单个函数的代码行数不能超过100行(从函数定义开始到结束的大括弧)。13、 函数缩进等级不能超过5级。14、 所有字符串不允许硬编码(直接在程序中写死),必须提取中字符串资源。编码风格规范C#花括号的使用1. 避免把左花括号放在前一条语句的末尾. 如:if(someExpression)DoSomething();2. 要把右花括号放在新一行的开始处。如:if(someExpression)DoSomething();3. 考虑把只有一条语句的get,set属性代码块和左右花括号放在同一行中。如:public String Nameget return m_name; set m_name = value; 4. 避免省略花括号。如:if(someExpression) DoSomething();或if(someExpression)DoSomething();空格的使用1. 要在形式参数和实际参数之间的逗号后加一个空格。如:public void Fun(Char bar, Int32 x, Int32 y)Fun(a, 20, 30);2. 避免在左圆括号之后或是右圆括号之前加空格。如:Fun( a, 20, 30 );缩进的使用1. 要对代码块中的内容进行缩进。如:if(someExpression)DoSomething();2. 要用制表符(tab)来进行缩进,而不是四个连续的空格来进行缩进.类型使用1. 要用CLR通用的类型名,不要使用语言特有的别名。要使用System.Int64,不要使用C#的long;使用System.Int32,而不要使用C#的int。编码命名规范在给代码中的任何事物命名时,最基本的原则是名称能尽可能表达它的用途。不如类名,要能表达出类型的职责,变量名应该能表达出它的用途。在此规范中C#,C+/CLI主要采用以下两种 命名方式:1. PascalCasing命名方式,要求把每个单词的首字母(包括长度为两个字符以上的首字母缩写单词)大写。如PropertyDescriptor,HtmlTag。2. camelCasing命名方式,要求除了第一个单词之外的所有单词首字母大写。如propertyDescriptor,htmlTag。C#基本原则1. 要为标识符选择易于阅读的名字2. 要更看中可读性,而不是更看中简短性。CanScrollHorizontally优于ScrollableX。3. 不要使用匈牙利命名法,即nCount,n表示该变量的类型。4. 不要使用未被广泛接受的首字母缩写词,即使是被广泛接受的首字母缩写词,也只应该在必须使用时才使用。程序集和DLL 1. 要使用PascalCasing命名方式命名2. 要为程序集和DLL选择提示性的名字,这样很容易就知道它的大致功能。如System.Data。3. 考虑按照下面的模式命名,.dll。如Microsoft.VisuableBasic.dll。名字空间1. 要使用PascalCasing命名方式命名2. 要用公司名称作为名字名字空间的前缀,这样可以避免与别的公司使用相同的名字。3. 要用稳定的、与版本无关的产品名称作为名字空间的第二层。4. 不要根据公司组织架构来决定名字空间的层次结构。5. 不要用相同的名字来命名名字空间与位于该名字空间中的类型,也不要给位于同一个应用程序模型的名字空间中的类型起相同的名字。如在Map名字空间中不能有一个名为Map的类型,也不能在Map,Map.XXX两个名字空间中有相同名称的类型。类、结构和接口1. 要使用PascalCasing命名方式命名。接口特殊,名称要以I开头。如IComponent。2. 要用名词或者名词词组来给类型命名,在少数情况下也可以使用形容词词组来给类型命名。3. 不要给类型加前缀(如“C”)。4. 考虑让派生类的名字以基类的名字结尾。如ArgumentOutofRangeException与Exception,例外Button和Control。5. 要用描述性的名字来命名泛型类型参数除非一个字母就足够了(这时采用T来命名),并在前面加上T。如public interface ISessionChannel,public class List。6. 要用单数名词来命名枚举类型,要用复数名次来命名位域(bit field)的枚举类型(标记枚举,flag enum)。7. 不要给枚举类型名字后面添加Enum,Flag,Flags后缀。8. 不要给枚举类型添加前缀,这于C+通用规范正好相反。不要ImageModeBitmap,要Bitmap。类型成员1. 公共成员均采用PascalCasing命名方式命名,私有成员采用m_cameCaseing,sm_cameCaseing的方式命名,即已m_,sm_作为前缀。2. 要用动词或动词词组来命名方法。3. 要用名词,名词词组或形容词来命名属性。4. 要用动词或者动词短语来命名事件。5. 要用现在时和过去时来赋予事件名以之前和之后的概念。如窗口关闭之前发生的close事件命名为Closing,窗口关闭之后发生的应该命名为Closed。6. 不要用Before或After前缀或后缀来区分前置事件和后置事件。7. 要在命名事件处理委托时加上EventHandler后缀。8. 要在事件处理函数中用sender和e作为两个参数的名字。9. 要在命名事件类型参数时加上EventArgs后缀。10. 要用名词或名词短语来命名字段,不要添加m_,sm_等前缀。不公开的字段除外。参数的命名1. 参数命名使用camelCasing命名方式2. 要根据参数的意思而不是参数的类型来命名参数。3. 局部变量命名采用与参数命名一样的规则。资源的命名1. 要使标识符的名字更具有描述性,而不是使名字变短。2. 要用点号给标识符清楚的划分层次。如Menu.FileMenu.Close.Text。3. 异常消息资源命名应该是异常的类型名加上一个间断的异常标识符,之间以点号分隔。如ArgumentException.InvalidName,ArgumentException.FileNameIsMalformed。Java基本原则1. 使用可以准确说明变量/字段/类/接口/包等的完整的英文描述符,对包、类、接口、方法、变量、字段等不得使用汉字等进行命名。 2. 采用大小写混合,提高名字的可读性。一般应该采用小写字母,但是类和接口的名字的首字母,以及任何中间单词的首字母应该大写。包名全部小写。 3. 尽量少用缩写,但如果一定要使用,当使用公共缩写和习惯缩写等。4. 避免使用长名字(最好不超过 25 个字母)5. 避免使用相似或者仅在大小写上有区别的名字。 文件、包1. 文件名当与其类严格相同,所有单词首字母大写; 2. 包名一般以项目或模块名命名,少用缩写和长名,一律小写;3. 基本包:com.supermap,所有包、文件都从属于此包;4. 不得将类直接定义在基本包下,所有项目中的类、接口等都当定义在各自的项目和模块包中。 类、接口1. 类名首字母大写,并与所在的文件名相同(嵌套类除外);2. 接口以大写“I”开头,除“I”外的首字母必须大写;3. 用于描述事件的接口,不要以“I”开头,但必须以”Listener”结尾;4. 事件参数类以”Event”结尾;5. 内部类以“Internal”开头。字段1. 常量字段:采用完整的英文大写单词,在词与词之间用下划线连接,如:DEFAULT_VALUE 2. 静态字段:首字母大写,其它字母遵循一般的命名规则。3. 成员变量:以“m_”打头,随后的首字母小写。4. 局部变量:首字母小写,不要加类型缩写前缀。5. 参数:首字母小写,不要加类型缩写前缀。对于属性参数,例如setXXX(TypeName value),参数名称统一用”value”。6. 枚举变量:采用完整的英文大写单词,在词与词之间用下划线连接。方法1. 方法首字母小写2. 取值类使用get前缀,设值类使用set前缀,判断类使用is(has)前缀3. 如无特殊说明,获取/设置集合对象中的某一成员的方法命名为“get()/set()”,不要用getItem()/setItem()4. 如无特殊说明,获取集合对象中的成员个数的方法一律命名为getCount()其它约定命名规则1. 设置为默认值的内部函数统一命名为reset;2. 一般而言,利用底层指针初始化对象的构造函数命名为CtorName(long handle)创建实例的方法统一命名为createInstance代码组织规范该部分的规范主要描述代码的组织,即一个源文件中应该如何排放代码C#1、 不要在一个源文件中包含一个以上的公用类型,除非有嵌套类,或各类型之间的不同之处仅在于泛型类型的数量。一个文件中有多个内部类型是允许的。2、 要用相同的名字来命名源文件及其包含的公用类型。如:String 类应该放在String.cs文件中。3、 考虑用相同的层次结构来组织文件目录和名字空间。如:应该把SuperMap.Data.Workspace的源文件放在SuperMapData目录中4、 考虑根据下面给出的顺序和组别来对成员进行分组: 所有字段 所有构造函数 共有属性及受保护的属性 方法 事件 所有显式实现的接口成员 内部成员 私有成员(不含字段) 所有嵌套类型5、 要把不能公开访问的成员和显式实现的接口成员放在分别放在自己的#region中。如: #region internal members#endregion6、 考虑在每个组别内根据字母顺序来组件成员7、 考虑根据由简单到复杂的顺序来组织重载成员8、 要把using指令放在名字空间的声明之外Java1. 包名、类、字段、方法的声明顺序如下 包 导入包 类/接口定义 常量 静态字段 成员字段 构造函数 静态方法 成员方法 事件相关方法 嵌套类与接口2. 相同类型的声明,按其访问权限排列,排序的先后顺序依次是:public protected package private3. 属性所对应的get/set方法,如果优先级相同,声明时应紧邻。框架设计规范1. 设计框架时,要为具有不同编程风格、需求、技能以及使用不同编程语言的开发人员考虑。2. 设计接口时,要为每个接口编写详细设计文档.3. 分层架构设计原则,要确保每个特性的名字空间只包含最常见的类型,把更高级的类型放在子名字空间中。如System.Net,System.Net.Sockets,高层接口提供最佳的开发效率,底层接口提供最强的开发功能。4. 不要要求用户在最基本的场景中显式的实例化一个以上的类型,也不要要求用户为基本使用场景编写代码之前进行大量的初始化。5. 尽可能的为所有的属性和参数提供合适的默认值。6. 要通过异常来处理的错误信息。要保证名称的(包括名字空间,类型,接口,参数等等)直观性,要把最好的名字留给最常用的类型。要确保框架和接口的使用与dotNet保持一致。类型设计规范1. 要确保每个类型是由一组定义明确、相互关联的成员组成,而不是一些无关功能的随机组合。2. 要用名字空间把类型组织成一个相关的特性域的层次结构。3. 避免非常深的名字空间层次,避免由太多的名字空间。4. 避免把为高级场景设计的类型和为常见编程任务而设计的类型放在同一个名字空间中。5. 不要不指定名字空间就定义类型。6. 不要定义结构,除非该类型有以下特征,在其他情况下,都应该定义类。a) 它在逻辑上代表一个独立的值,与基本类型(int,double)相似。b) 它的实例的大小小于16个字节。c) 它是不可变的。d) 它不需要经常被装箱。7. 要优先采用类,而不是接口来暴露抽象。接口的灵活性不如类,一旦发布,它的成员就固定了,给接口添加任何东西都会破坏那些实现了该接口的已有类型。8. 要为抽象类定义受保护的构造函数或者内部构造函数。9. 要为你发布的抽象类提供至少一个继承自该类的具体类型。10. 要尽量少用静态类,不要把静态类当成杂物箱。11. 要为接口提供至少一个实现该接口的类型。12. 不要给已经发行的接口添加任何成员。13. 不要为结构体写任何默认的构造函数。编译不支持该操作14. 要为值类型实现IEquatable。15. 要用枚举要加强那些表示值的集合的参数、属性以及返回值的类型性。16. 要优先使用枚举而不是静态常量。17. 不要提供为了今后使用而保留的枚举值。18. 要为简单枚举类型提供零值,并把零值命名为None。19. 考虑用Int32作为枚举的基本实现类型,除非为了节省空间或者枚举值超过Int32的范围。成员设计规范1. 避免在重载中随意的给参数命名,如果两个重载中的某个参数表示相同的输入,那么该参数的名字应该相同。2. 避免使重载成员的参数顺序不一致,在所有的重载中,同名的参数应该出现在相同的位置。3. 要允许可选参数为null。4. 要优先使用成员重载,而不是定义有默认参数的成员。Move(x)Move(x,0)。5. 避免显式的实现接口成员。6. 考虑显式的实现接口成员,如果希望接口成员只能通过该接口来调用。7. 方法表示操作,属性表示数据,在有效率要求时,考虑使用方法,其他时候考虑使用属性。8. 要为所有的属性提供合理的默认值。9. 要允许用户以任何顺序来设置属性的值,即使这样可能会使对象在短时间内处于无效状态。10. 要保留属性原来的值,如果属性的设置方法抛出异常。11. 避免在属性的获取方法中抛出异常。12. 要用Item来作为索引属性的名字,除非有明显更好的名字。13. 不要同时提供语义上等价的索引器和方法。14. 考虑在高层接口的属性被修改时触发属性改变的通知事件,对于底层接口来说,由于开销很大,不用触发。这里的修改都是指内部修改。15. 考虑属性值被外界修改时触发通知事件。16. 考虑提供简单的构造函数,最好是默认构造函数。17. 要把构造函数的参数用作设置主要属性的便捷方法。18. 要使用相同的名字命名构造函数参数和属性,如果构造函数参数用于简单的设置属性。19. 要在构造函数中做最少的工作。20. 要从实例构造函数中抛出异常,如果合适。21. 要在类中显式的声明默认构造函数,如果这样的构造函数是必须的。22. 避免在对象的构造函数中调用虚成员。23. 要在事件中使用术语raise,而不是fire或者trigger。如an event was raised,而不是an event was fired,an event was triggered。24. 不要在触发事件时把null作为数据参数传入。25. 考虑触发能够被最终用户取消的事件,这只适用与前置事件。26. 不要提供公有的或受保护的实例字段。27. 要用常量字段来表示永远不会改变的常量。28. 要用公有的静态只读字段来定义预定义的对象实例。比如颜色Color类型。29. 不要把可变类型的实例赋值给只读字段。30. 考虑在看起来应该象基本类型的类型中定义操作符重载。31. 要为表示数值的结构定义操作符重载。32. 要以对称的方式来重载操作符。如和!应该同时被重载。33. 考虑为每个重载过的操作符提供对应的方法,并用容易理解的名字

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论