




已阅读5页,还剩13页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
社内C#.NetET编程规约1 概述1.1 规范制定原则1 方便代码的交流和维护。 2 不影响编码的效率,不与大众习惯冲突。 3 使代码更美观、阅读更方便。 4 使代码的逻辑更清晰、更易于理解。1.2 术语定义1.2.1 Pascal大小写Pascal大小写形式是指名称中单词的第一个字母大写,如:EmployeeSalary,ConfirmDialog。1.2.2 Camel大小写这种形式类似于Pascal大小写形式,但名称中第一个单词的第一个字母不是大写:employeeSalary, comfirmDialog。2 命名对于理解应用程序的逻辑流,命名方案是最有影响力的一种帮助。名称应该说明“什么”而不是“如何”。通过避免使用公开基础实现(它们会发生改变)的名称,可以保留简化复杂性的抽象层。例如,可以使用 GetNextStudent(),而不是GetNextArrayElement()。 2.1 命名原则选择正确名称时的困难可能表明需要进一步分析或定义项的目的。使名称足够长以便有一定的意义,并且足够短以避免冗长。唯一名称在编程上仅用于将各项区分开。表现力强的名称是为了帮助人们阅读;因此,提供人们可以理解的名称是有意义的。不过,请确保选择的名称符合适用语言的规则和标准。最好不要使用带有下划线的单词。使用全称避免缩写,除非缩写已是一种公认的约定,如URL、HTML。2.2 命名大小写原则在名称的大小写方面,名称大部分都应采用Pascal大小写命名形式。其中,命名空间、类、以及基类中的成员、接口、属性、方法、事件、静态字段等的名称都应遵循该规则。对于常量的定义采用全部大写的原则。此外还推荐使用另一种大小写模式:camel大小写形式。有两种情况建议使用camel大小写形式。1 传递给方法的所有参数都应是camel大小写形式:Public void RecordSale(int employeeSalary, int quanitity);2 camel大小写形式也可以用于区分同名的两个对象比较常见的情况是属性封装一个字段:Private string employeeName; Public string EmployeeName GetReturn employeeName;2.3 命名空间命名空间(namespace)的名称非常重要,需要仔细设计,以避免一个命名空间中对象的名称与其他对象同名。命名空间的名称是.Net区分共享装配件中对象名的唯一方式,如果软件包的命名空间使用的名称与另一个软件包相同,而这两个软件包都安装到一台计算机上,就会出问题。因此,命名空间的名称最好用本公司名创建顶级的命名空间,再嵌套客户所在公司、或产品类所在软件包的命名空间,继而嵌套软件中所在模块层次名字的命名空间。例如Pcguandian,DataAccess。这样的命名空间就肯定是安全的,不会与其他人编写的命名空间同名。2.4 变量2.4.1 变量前缀C#的约定是命名变量时不使用任何前缀:string Result; string Message。2.4.2 杂项a) 在变量名中使用互补对,如 min/max、begin/end 和 open/closeb) 布尔变量名应该包含 Is,这意味着 Yes/No 或 True/False 值,如 fileIsFoundc) 即使对于可能仅出现在几个代码行中的生存期很短的变量,仍然使用有意义的名称。仅对于短循环索引使用单字母变量名,如 i 或 jd) 不要使用原义数字或原义字符串,如 For i = 1 To 7。而是使用命名常数,如 For i = 1 To NUM_DAYS_IN_WEEK 以便于维护和理解2.5 控件2.5.1 命名方法和社内其他编程工具开发规约类似,控件命名采用控件名简写+英文描述的方式,其中英文描述首字母大写2.5.2 主要控件名简写对照表控件名 简写 Label lbl TextBox txtButton btn LinkButton lnkbtnImageButton imgbtn DropDownList ddlListBox lst DataGrid dgDataList dl CheckBox chkCheckBoxList chkls RadioButton rdoRadioButtonList rdolt ImageimgPanel pnl CalendercldAdRotator ar TabletblRequiredFieldValidator rfv CompareValidatorcvRangeValidatorrv RegularExpressionValidatorrevValidatorSummaryvs CrystalReportViewerrptvew2.6 类a) 用名词或名词短语命名类似b) 不要使用类型前缀,如在类名称上对类使用 C 前缀。例如,使用类名称 FileStream,而不是CFileStreamc) 有时候需要提供以字母 I 开始的类名称,虽然该类不是接口。只要 I 是作为类名称组成部分的整个单词的第一个字母,这便是适当的。例如,类名称 IdentityStore 是适当的。在适当的地方,使用复合单词命名派生的类。派生类名称的第二个部分应当是基类的名称。例如,ApplicationException 对于从名为 Exception 的类派生的类是适当的名称,原因ApplicationException 是一种Exception2.7 接口a) 用名词或名词短语,或者描述行为的形容词命名接口。例如,接口名称 IComponent 使用描述性名词。接口名称 ICustomAttributeProvider 使用名词短语。名称 IPersistable 使用形容词。b) 给接口名称加上字母 I 前缀,以指示该类型为接口。在定义类/接口对(其中类是接口的标准实现)时使用相似的名称。两个名称的区别应该只是接口名称上有字母 I 前缀。以下是正确命名的接口的示例。 public interface IServiceProvider public interface IFormatable以下代码示例阐释如何定义 IComponent 接口及其标准实现 Component 类。 public interface IComponent / Implementation code goes here. public class Component: IComponent / Implementation code goes here.2.8 属性 (Attribute)应该总是将后缀 Attribute 添加到自定义属性类。以下是正确命名的属性类的示例。 public class ObsoleteAttribute 2.9 枚举 (Enum)a) 不要在 Enum 类型名称上使用 Enum 后缀。b) 对大多数 Enum 类型使用单数名称,但是对作为位域的 Enum 类型使用复数名称。c) 总是将 FlagsAttribute 添加到位域 Enum 类型。2.10 方法使用动词或动词短语命名方法。以下是正确命名的方法的实例RemoveAll() GetCharArray()Dispose()2.11 属性 (Property)a) 使用名词或名词短语命名属性。b) 不要使用匈牙利语表示法。c) 考虑用与属性的基础类型相同的名称创建属性。例如,如果声明名为 Color 的属性,则属性的类型同样应该是 Color。请参阅后面的示例。以下代码示例阐释提供其名称与类型相同的属性。 public enum Color / Insert code for Enum here. public class Control public Color Color get/ Insert code here. set/ Insert code here. 以下代码示例不正确,原因是 Color 属性是 Integer 类型的。 public enum Color/ Insert code for Enum here. public class Control public int Color / Insert code here 在不正确的示例中,不可能引用 Color 枚举的成员。Color.Xxx 将被解释为访问一个成员,该成员首先获取 Color 属性( C# 中为 int 类型)的值,然后再访问该值的某个成员(该成员必须是 System.Int32 的实例成员)2.12 事件a) 对事件处理程序名称使用 EventHandler 后缀。b) 指定两个名为 sender 和 e 的参数。sender 参数表示引发事件的对象。sender 参数始终是object 类型的,即使在可以使用更为特定的类型时也如此。与事件相关联的状态封装在名为 e 的事件类的实例中。对 e 参数类型使用适当而特定的事件类。c) 用 EventArgs 后缀命名事件参数类。d) 考虑用动词命名事件。e) 使用动名词(动词的“ing”形式)创建表示事件前的概念的事件名称,用过去式表示事件后。例如,可以取消的 Close 事件应当具有 Closing 事件和 Closed 事件。不要使用BeforeXxx/AfterXxx 命名模式。f) 不要在类型的事件声明上使用前缀或者后缀。例如,使用 Close,而不要使用 OnClose。g) 通常情况下,对于可以在派生类中重写的事件,应在类型上提供一个受保护的方法(称为OnXxx)。此方法只应具有事件参数 e,因为发送方总是类型的实例。以下示例阐释具有适当名称和参数的事件处理程序。 public delegate void MouseEventHandler(object sender, MouseEventArgs e); 以下示例阐释正确命名的事件参数类。 public class MouseEventArgs : EventArgs int x; int y; public MouseEventArgs(int x, int y) this.x = x;this.y = y; public int X get return x; public int Y get return y; 2.13 集合集合是一组组合在一起的类似的类型化对象,如哈希表、查询、堆栈、字典和列表,集合的命名建议用复数。2.14 表a) 在命名表时,用单数形式表示名称。例如,使用 Employee,而不是 Employeesb) 在命名表的列时,不要重复表的名称;例如,在名为 Employee 的表中避免使用名为 EmployeeLastName 的字段c) 不要在列的名称中包含数据类型。如果后来有必要更改数据类型,这将减少工作量2.15 杂项a) 尽量减少使用缩写,而是使用以一致方式创建的缩写。缩写应该只有一个意思;同样,每个缩写词也应该只有一个缩写。例如,如果用 min 作为 minimum 的缩写,那么在所有地方都应这样做;不要将 min 又用作 minute 的缩写。b) 在命名函数时包括返回值的说明,如 GetCurrentWindowName()。c) 与过程名一样,文件和文件夹的名称也应该精确地说明它们的用途。2.16 措词避免使用与常用的 .NET 框架命名空间重复的类名称。例如,不要将以下任何名称用作类名称:System、Collections、Forms 或 UI。有关 .NET 框架命名空间的列表,请参阅类库。另外,避免使用和以下关键字冲突的标识符。AddHandlerAddressOfAliasAndAnsiAsAssemblyAutoBaseBooleanByRefByteByValCallCaseCatchCBoolCByteCcharCDateCDecCDblCharCintClassCLngCObjConstCshortCSngCStrCTypeDateDecimalDeclareDefaultDelegateDimDoDoubleEachElseElseIfEndEnumEraseErrorEventExitExternalSourceFalseFinalizeFinally FloatForFriendFunctionGetGetTypeGotoHandlesIfImplementsImportsInInheritsIntegerInterfaceIsLetLibLikeLongLoopMeModModuleMustInheritMustOverrideMyBaseMyClassNamespaceNewNextNotNothingNotInheritableNotOverridableObjectOnOptionOptionalOrOverloadsOverridableOverridesParamArrayPreservePrivatePropertyProtectedPublicRaiseEventReadOnlyReDimRegionREMRemoveHandlerResumeReturnSelectSetShadowsSharedShortSingleStaticStepStopStringStructureSubSyncLockThenThrowToTrueTryTypeOfUnicodeUntilvolatileWhenWhileWithWithEventsWriteOnlyXorEvalextendsinstanceofpackagevar3 注释3.1 注释概述a) 修改代码时,总是使代码周围的注释保持最新。b) 在每个例程的开始,提供标准的注释样本以指示例程的用途、假设和限制很有帮助。注释样本应该是解释它为什么存在和可以做什么的简短介绍。c) 避免在代码行的末尾添加注释;行尾注释使代码更难阅读。不过在批注变量声明时,行尾注释是合适的;在这种情况下,将所有行尾注释在公共制表位处对齐。d) 避免杂乱的注释,如一整行星号。而是应该使用空白将注释同代码分开。e) 避免在块注释的周围加上印刷框。这样看起来可能很漂亮,但是难于维护。f) 在部署发布之前,移除所有临时或无关的注释,以避免在日后的维护工作中产生混乱。g) 在编写注释时使用完整的句子。注释应该阐明代码,而不应该增加多义性。h) 在编写代码时就注释,因为以后很可能没有时间这样做。另外,如果有机会复查已编写的代码,在今天看来很明显的东西六周以后或许就不明显了。i) 为了防止问题反复出现,对错误修复和解决方法代码总是使用注释,尤其是在团队环境中。j) 对由循环和逻辑分支组成的代码使用注释。这些是帮助源代码读者的主要方面。k) 在整个应用程序中,使用具有一致的标点和结构的统一样式来构造注释。l) 用空白将注释同注释分隔符分开。在没有颜色提示的情况下查看注释时,这样做会使注释很明显且容易被找到。m) 在所有的代码修改处加上修改标识的注释。n) 为了使层次清晰,在闭合的右花括号后注释该闭合所对应的起点。如:namespace CanonOA.DataAccesspublic class Depts : IDisposable/ class code;/ / class Depts / namespace CanonOA.DataAccess3.2 文件注释每个模块文件(.cs文件)都应有一个注释标头,包含创建信息和每次修改信息、版权信息等内容,如:/-/ Copyright (C) 2004-2005 system solution/ All rights reserved./ Create Date: 2005/05/29/ Create Man:WuTing/ Modify History: / Modify Date:2005/06/19/ Modify Man:WuTing/ Modify Desc:/ Modify Date:2005/06/29/ Modify Man:XieWei/ Modify Desc:/-3.3 类的注释对每个类的注释要求在中概要叙述类完成的功能以及该类在程序中所处的层次,然后在不同的节中阐述类的继承对象、特殊的技术实现或要求等内容。如: / / The code-behind base class for the page that displays information / about a single book. / This page is derived from PageBase. / This page is explicitly cached for each individual book./ / / This class contains the business facade for the order system. / / The business facade is used to provide a simplified interface into the / order sub systems. / / / This class is marked as MarshalByRefObject to support remoted scenarios. / / / / A custom serializable dataset containing order information. / / This class is used to define the shape of OrderData. / / / The serializale constructor allows objects of type OrderData to be remoted. / / 3.4 方法属性的注释该类注释同样采用.Net已经定义好的Xml标签来标记,需要表述它自身的属性、被调用的入口点、需要的参数、返回值、可能出现的异常以及实现的功能等。如: / / Calls OrderSystem to calculate the order summery in OrderData. / class=System.ApplicationException / The cartOrderData is null. / / public void CalculateOrderSummary() / / Depersist the Cart object from serialized data. / Constructor that supports serialization. / / This is called by the runtime. It is private so that no / one else can call it. / / The SerializationInfo object to read from. / Information on who is calling this method. / private Cart(SerializationInfo info, StreamingContext context) / / Adds an Item to the shopping cart. / Constructor that supports serialization. / The Id (PKId) of a shopping cart item. / The Description of a shopping cart item. / The price of a shopping cart item. / public void AddItem(int itemId, String itemDescription, Decimal itemPrice) 3.5 单行注释该类注释用于1 方法内的代码注释。如变量的声明、代码或代码段的解释。注释示例: / 注释语句 / private int number;或 / 注释语句 private int number;2 方法内变量的声明或花括号后的注释, 注释示例: if ( 1 = 1) / always true statement; / always true3.6 类C注释该类注释用于a) 不再使用的代码。b) 临时测试屏蔽某些代码。用法/*修改标识修改原因 . . (the source code )*/4 格式4.1 列宽为注释和代码建立最大的行长度,以避免不得不滚动源代码编辑器,并且可以提供整齐的硬拷贝表示形式。建议代码列宽控制在100字符左右。4.2 换行当表达式超出或即将超出规定的列宽,遵循以下规则进行换行 1、在逗号后换行。 2、 在操作符前换行。 3、规则1优先于规则2。当以上规则会导致代码混乱的时候自己采取更灵活的换行规则。4.3 缩进a) 建立标准的缩进大小(建议四个空格),并一致地使用此标准。用规定的缩进对齐代码节。b) 不要在代码中使用Tab字符。Visual Studio.Net设置:工具-选项-文本编辑器-C#-制表符-插入空格c) 沿逻辑结构行缩进代码。没有缩进,代码将变得难以理解,如:If . ThenIf . Then.ElseEnd IfElse缩进代码会产生出更容易阅读的代码,如:If . ThenIf . Then .Else .End IfElse.End If4.4 空行空行是为了将逻辑上相关联的代码分块,以便提高代码的可阅读性。在以下情况下使用两个空行a) 接口和类的定义之间。b) 枚举和类的定义之间。c) 类与类的定义之间。 在以下情况下使用一个空行a) 方法与方法、属性与属性之间。b) 方法中变量声明与语句之间。c) 方法与方法之间。d) 方法中不同的逻辑块之间。e) 方法中的返回语句与其他的语句之间。f) 属性与方法、属性与字段、方法与字段之间。g) 注释与它注释的语句间不空行,但与其他的语句间空一行。h) 一个名称空间内对System的引用与对项目的引用之间。4.5 空格在以下情况中要使用到空格a) 关键字和左括符 “(” 应该用空格隔开。如 while (true) 注意:在方法名和左括符 “(” 之间不要使用空格,这样有助于辨认代码中的方法调用与关键字。b) 多个参数用逗号隔开,每个逗号后都应加一个空格。c) 除了 . 之外,所有的二元操作符都应用空格与它们的操作数隔开。一元操作符、+及-与操作 数间不需要空格。如 a += c + d; a = (a + b) / (c * d); while (d+ = s+) n+; PrintSize(“size is “ + size + “n”);d) 语句中的表达式之间用空格隔开。如 for (expr1; expr2; expr3)e) 单行注释”/”与注释语句之间用空格隔开。4.6 括号 ()a) 左括号“(” 不要紧靠关键字,中间用一个空格隔开。b) 左括号“(” 与方法名之间不要添加任何空格。c) 没有必要的话不要在返回语句中使用()。4.7 花括号 a) 左花括号 “” 放于关键字或方法名的下一行并与之对齐。如:if (condition) public int Add(int x, int y) b) 左花括号 “” 要与相应的右花括号 “”对齐。c) 通常情况下左花括号 “”单独成行,不与任何语句并列一行。d) if、while、do语句后一定要使用,即使号中为空或只有一条语句。e) 右花括号 “” 后建议加一个注释以便于方便的找到与之相应的 。如:while (1) if (valid) / if valid else / not valid / end forever4.8 HTML编写 HTML 时,建立标准的标记和属性格式,如所有标记都大写或所有属性都小写。另一种方法是,坚持 XHTML 规范以确保所有 HTML 文档都有效。尽管在创建 Web 页时需折中考虑文件大小,但应使用带引号的属性值和结束标记以方便维护。4.9 SQL语句a) 编写 SQL 语句时,对于关键字使用全部大写,对于数据库元素(如表、列和视图)使用大小写混合。b) 将每个主要的 SQL 子句放在不同的行上,这样更容易阅读和编辑语句,例如: SELECT FirstName, LastNameFROM CustomersWHERE State = WA4.10 声名a) 一行只建议作一个声明,并按字母顺序排列。b) 建议在变量声明时就对其做初始化。c) 变量建议置于块的开始处,不要总是在第一次使用它们的地方做声明。d) 应避免不同层次间的变量重名。4.11 语句4.11.1 Return语句return语句中不使用括号,除非它能使返回值更加清晰。如 return; return myDisk.size(); return (size ? size : defaultSize);4.11.2 If语句if、 if-else、if else-if 语句使用格式 if (condition) statements;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 广州廉政考试试题及答案
- 2024重庆市渝北区翠云街道社区工作者招聘考试试题
- 新能源微电网稳定性控制与能源市场机制研究报告
- 《档案数据服务》课程教学大纲
- 2025年机械伤害事故应急处理与事故预防措施实施试卷及答案
- 2025年整形外科手术前后护理知识应用考核试卷及答案解析
- 经济思想史考研真题及答案解析
- 2025年科研管理与伦理考试试卷及答案
- 2025年有害生物防制员中级模拟试卷虫害防治技术专项练习题库及答案
- 初中数学北师大版九年级上册2.1 认识一元二次方程(第2课时) 教学设计
- 新学期教学工作会议上校长讲话:把功夫下在课堂里把心思放在学生上把质量落到细节中
- 中医儿科学 手足口病
- 建筑施工三检制度
- 湖北群艺积分制管理操作流程
- GB/T 4883-2008数据的统计处理和解释正态样本离群值的判断和处理
- GB/T 4213-2008气动调节阀
- GB/T 30230-2013运动水壶的安全要求
- GB/T 24267-2009建筑用阻燃密封胶
- GB/T 14842-2007铌及铌合金棒材
- 2021年安徽省初中学业水平考试语文试卷及答案
- 目标管理与执行力培训课件
评论
0/150
提交评论