1、 一、概述一、概述 二、实例讲解二、实例讲解 三、注意点三、注意点 四、四、Q&AQ&A C#编码规范编码规范概述 编码规范的必要性: 多人协作时,代码清晰易懂。 容易发现代码的问题,调试时比较容易。 体现部门形象。 编码规范的要点: 排版规范(缩进、空行)。 注释规范清晰。 类名、方法名定义规范(大小写)。 变量定义规范(大小写、变量有意义)。 C#的编码规范 制定原则: 1 参照微软在VS.NET中,C#既有的规范来制定。 2 方便代码的交流和维护。 3 不影响编码的效率,不与大众习惯冲突。 4 使代码更美观、阅读更方便。 5 使代码的逻辑更清晰、更易于理解。 遵守原则: 首先遵守客户要求
2、的规则。 在客户没有指定规则的情况下,遵守本规则。编码规范概述编码规范概述 C#的编码规范 术语定义:术语定义: Pascal 大小写 将标识符的首字母和后面连接的每个单词的首字母都大写。可以对三字符或更多字符的标识符使用Pascal 大小写。例如: BackColor Camel 大小写 标识符的首字母小写,而每个后面连接的单词的首字母都大写。例如: backColor 匈牙利 大小写 标示符的首字母用类型的简写,而每个后面连接的单词的首字母大写。例如: strBackColor编码规范概述 匈牙利命名法特点:匈牙利命名法特点: 基本原则是:变量名属性类型对象描述,其中每一对象的名称都要求有
3、明确含义,可以取对象名字全称或名字的一部分。命名要基于容易记忆容易理解的原则。保证名字的连贯性是非常重要的。 举 例: 表单的名称为form,那么在匈牙利命名法中可以简写为frm,则当表单变量名称为Switchboard时,变量全称应该为 frmSwitchboard。这样可以很容易从变量名看出Switchboard是一个表单,同样,如果此变量类型为标签,那么就应命名成 lblSwitchboard。可以看出,匈牙利命名法非常便于记忆,而且使变量名非常清晰易懂,这样,增强了代码的可读性,方便各程序员之间相互交流代 码。 编码规范概述命名概述:命名概述:名称应该说明“什么”而不是“如何”。通过避
4、免使用公开基础实现(它们会发生改变)的名称,可以保留简化复杂性的抽象层。例如,可以使用 GetNextStudent(),而不是 GetNextArrayElement()。 命名原则是:命名原则是: 选择正确名称时的困难可能表明需要进一步分析或定义项的目的。使名称足够长以便有一定的意义,并且足够短以避免冗长。唯一名称在编程上仅用于将各项区分开。表现力强的名称是为了帮助人们阅读;因此,提供人们可以理解的名称是有意义的。不过,请确保选择的名称符合适用语言的规则和标准。编码规范概述以下几点是推荐的命名方法:1、避免容易被主观解释的难懂的名称,如方面名 AnalyzeThis(),或者属性名 xxK
5、8。这样的名称会导致多义性。2、在类属性的名称中包含类名是多余的,如 Book.BookTitle。而是应该使用 Book.Title。3、只要合适,在变量名的末尾或开头加计算限定符(Avg、Sum、Min、Max、Index)。4、在变量名中使用互补对,如 min/max、begin/end 和 open/close。 5、布尔变量名应该包含 Is/bln,这意味着 Yes/No 或 True/False 值,如 。6、在命名状态变量时,避免使用诸如 Flag 的术语。状态变量不同于布尔变量的地方是它可以具有两个以上的可能值。不是使用 documentFlag,而是使用更具描述性的名称,如d
6、ocumentFormatType。 (此项只供参考)7、即使对于可能仅出现在几个代码行中的生存期很短的变量,仍然使用有意义的名称。仅对于短循环索引使用单字母变量名,如 i 或 j。 可能的情况下,尽量不要使用原义数字或原义字符串,如For i = 1 To 7。而是使用命名常数,如 For i = 1 To NUM_DAYS_IN_WEEK 以便于维护和理解。编码规范概述大小写规则:大小写规则:标识符中的所有首字母都大写。仅对于由两个或者更少字母组成的标识符使用该约定。例如:using System.IOusing System.Web.UI下表汇总了大写规则,并提供了不同类型的标识符的示例
7、。标志符标志符大小写方式大小写方式示例示例类类 Pascal AppDomain 枚举类型枚举类型 Pascal ErrorLevel 枚举值枚举值 Pascal FatalError 事件事件 Pascal ValueChanged 异常类异常类 Pascal WebException 只读的静态字段只读的静态字段 Pascal RedValue 接口接口 IPascal IDisposable 方法方法 Pascal ToString 命名空间命名空间 Pascal System.Drawing 参数参数 camel typeName 属性属性 Pascal BackColor 中间层方法
8、接口中间层方法接口IPascalILogin私有字段私有字段camel_UserName控件命名控件命名匈牙利txtUserName局部变量局部变量camel / 匈牙利textLength / iLength 使用单词缩写和首字母缩写词使用单词缩写和首字母缩写词 为了避免混淆和保证跨语言交互操作,请遵循有关区缩写的使用的下列规则: 1、不要将缩写或缩略形式用作标识符名称的组成部分。例如,使用 GetWindow,而不要使用 GetWin。 2 、不要使用计算机领域中未被普遍接受的缩写。 3 、在适当的时候,使用众所周知的缩写替换冗长的词组名称。例如,用 UI 作为 User Interfac
9、e 缩写,用 OLAP 作为 On-line Analytical Processing 的缩写。 4、在使用缩写时,对于超过两个字符长度的缩写请使用 Pascal 大小写或 Camel 大小写。例如,使用 HtmlButton 或 HTMLButton。但是,应当大写仅有两个字符的缩写,如,System.IO,而不是 System.Io。 5、 不要在标识符或参数名称中使用缩写。如果必须使用缩写,对于由多于两个字符所组成的缩写请使用Camel 大小写,虽然这和单词的标准缩写相冲突。编码规范概述 C#的编码规范 文件/类的命名规则。 方法的命名规则。 常量、变量、参数的定义规则。 代码的格式。
10、 注释的书写格式。 效率方面注意的问题。编码规范概述 C#的编码规范 文件的命名规则文件的命名规则 文件的命名采用Pascal命名规则,无特殊情况,文件的扩展名小写。 文件的扩展名使用统一而且通用的扩展名,如C#类使用扩展名:.cs例如:StudentInfo.cs ProfesserInfo.cs Department.cs实例讲解实例讲解C#的编码规范命名空间命名空间1、命名命名空间时的一般性规则是使用公司名称,后跟技术名称和可选的功能与设计,如下所示。 公司名称.项目名称.* CompanyName.TechnologyName.Feature.Design例如: namespace L
11、angchao.Procurement /浪潮公司的采购单管理系统 namespace Langchao.Procurement.DataRules /浪潮公司的采购单管理系统的业务规则模块2、命名空间使用Pascal大小写,用点号分隔开。3、TechnologyName 指的是该项目的英文缩写,或软件名。4、命名空间和类不能使用同名字。例如,有一个类被命名为Debug后,就不要再使用Debug作为一个名称空间名。 C#的编码规范 类的命名规则类的命名规则 1、类的名字必须是有意义的,且与类实现的功能或业务逻辑相关的名字。用名词或名词短语命名类。 2、使用全称避免缩写,除非缩写已是一种公认的约
12、定,如URL、HTML。 3、不要使用类型前缀,如在类名称上对类使用 C 前缀。例如,使用类名称 ,而不是 C。 4、不要使用下划线字符 (_)。 5、除接口类的其他所有类(包括普通类、抽象类等)都采用Pascal命名法,且主类的名字与文件名一致。(每个单词的首字母都大写) 6、接口类有自己特殊的命名规则:类的前缀为“I”,后面连接Pascal命名法所起的有意义的名字。同样,类名与文件名相同,如:IFormatable。 7、有时候需要提供以字母 I 开始的类名称,虽然该类不是接口。只要 I 是作为类名称组成部分的整个单词的第一个字母,这便是适当的。例如,类名称 IdentityStore 是
13、适当的。 实例讲解 C#的编码规范 方法的命名规则方法的命名规则 按照C#语言本身的原始特征,方法的命名采用Pascal命名规则。另外,方法的命名应该说明的是“做什么”,而不是“如何做”;方法的名称应该足够长以便有一定的意义,又应该足够短,以避免冗长。如:WriteToFile()。 1 、使用动词或动词短语命名方法。 2、 使用 Pascal 大小写。 3 、以下是正确命名的方法的实例。RemoveAll()GetCharArray()GetModel()GetPageList()实例讲解 C#的编码规范 常量常量 所有的常量都必须是大写字母组成,如果常量有几个单词组成,则单词之间用下划线“
14、_”进行连接,如:private const string USER_NAME = “abc”;public const string PAGE_TITLE = Welcome;实例讲解 C#的编码规范 变量变量 变量在定义的时候,需要根据变量的数据类型添加不同的前缀(前缀全部小写),但不需要区分其作用域。另外,变量的命名规则采用数据类型前缀+Pascal命名规范。如:private string strName = “”;实例讲解实例讲解 C#的编码规范 变量变量 C#中各常用的变量的前缀如下表所示:类型含义缩写举例Boolean 真/假bln (bln/Is)PostBack byte8位
15、无符号整数类型bytbytCountchar字符类型chrchrFlagdecimal金融计算所用的数字类型decdecAmountdouble双精度浮点类型dbldblAmountfloat单精度浮点类型fltfltAmountInteger 整形intintCountArray 数列类型arr arrShoppingList 实例讲解 C#的编码规范 变量变量 C#中各常用的变量的前缀如下表所示(续):类型含义缩写举例long长整形lnglngWeightsbyte8位有符号整数sbtsbtCountshort短整形shtshtAmountstring字符串类型strstrNameuint
16、无符号整形uituitCountulong无符号长整形ulgulgCountushort无符号短整形ustustCount实例讲解 C#的编码规范 变量变量 C#中各常用的变量的前缀如下表所示(续):类型含义缩写举例DataTable数据表dtdtStudentsDataSet数据集dsdsStudentsList列表lstlstStudentsArrayList数组altaltStudentsHashtable哈希表HthtStudentsStringBuilder字符串构造类sbsbSql实例讲解 C#的编码规范 参数参数 在方法定义中的形参,采用Pascal命名方法,不需要根据数据类型来
17、添加前缀,作为调用方法时传递的实参,则采用上面变量的命名规则,使用数据类型前缀+Pascal命名方法。驼峰命名规范如:void SetName(string name)调用的时候,可以如下:string strName = “abc”;SetName(strName);实例讲解C#的编码规范 代码格式代码格式代码的格式包括缩进、换行、空行、空格等,为了不影响编码的效率,在此只作如下规定: 空格、空行不做严格的固定,以使代码清晰为基本原则。空行不影响程序的运行,但可以使代码看起来清晰,增加可读性,因此可以适当的多用。 代码的缩进建议使用tab键进行控制,tab键的大小设置为4个空格。每个层次都要
18、进行缩进。如:if (isOverFlow) return false;/end if 换行,掌握的原则是不要使一行代码特别的长,再不产生严重歧义或增加阅读难度的情况下,尽量控制在110列之内,以方便代码的打印。另外,换行的原则是,在逗号后,操作符前换行,换行与首行要保持一个单位的缩进。如: string strSql = “SELECT ID,NAME,SEX,BIRTHDAY,” + “BELONGCLASSID,BELONGGRADEID “ + “FROM STUDENTINFO”; 必须单独在一行上,且上下对齐。 if,while,do,try-catch-finally等语句后必须
19、有,即使里面只有一条语句或为空。实例讲解C#的编码规范代码格式代码格式列宽列宽代码列宽控制在屏幕宽度以内。110字符左右为宜。每行长度尽量避免超过屏幕宽度换行换行 当表达式超出或即将超出规定的列宽,遵循以下规则进行换行1、在逗号后换行。2、在操作符前换行。3、规则1优先于规则2。当以上规则会导致代码混乱的时候自己采取更灵活的换行规则。缩进缩进缩进应该是每行一个Tab(4个空格),不要在代码中使用Tab字符。 Visual Studio.Net设置:工具-选项-文本编辑器-C#-制表符-插入空格。实例讲解C#的编码规范代码格式代码格式空行空行 空行是为了将逻辑上相关联的代码分块,以便提高代码的可
20、阅读性。在以下情况下使用两个空行1、接口和类的定义之间。2、枚举和类的定义之间。3、类与类的定义之间。 在以下情况下使用一个空行1、方法与方法、属性与属性之间。2、方法中变量声明与语句之间。3、方法与方法之间。4、方法中不同的逻辑块之间。5、方法中的返回语句与其他的语句之间。6、属性与方法、属性与字段、方法与字段之间。7、注释与它注释的语句间不空行,但与其他的语句间空一行。实例讲解C#的编码规范代码格式代码格式空格空格在以下情况中要使用到空格1、 关键字和左括符 “(” 应该用空格隔开。如 while (true) ; 注意在方法名和左括符 “(” 之间不要使用空格,这样有助于辨认代码中的方法
21、调用与关键字。2、多个参数用逗号隔开,每个逗号后都应加一个空格。3、除了 . 之外,所有的二元操作符都应用空格与它们的操作数隔开。一元操作符、+及-与操作数间不需要空格。如a += c + d; a = (a + b) / (c * d);while (d+ = s+) n+;PrintSize(size is + size + n);4、 语句中的表达式之间用空格隔开。如for (expr1; expr2; expr3)。实例讲解C#的编码规范代码格式代码格式括号括号 - ()1、 左括号“(” 不要紧靠关键字,中间用一个空格隔开。2、 左括号“(” 与方法名之间不要添加任何空格。3、 没有
22、必要的话不要在返回语句中使用()。如if (condition) Array.Remove(1); return 1;实例讲解C#的编码规范代码格式代码格式花括号 - 1、 左花括号 “” 放于关键字或方法名的下一行并与之对齐。如public int Add(int x, int y) 2、 左花括号 “” 要与相应的右花括号 “”对齐。3、 通常情况下左花括号 “”单独成行,不与任何语句并列一行。4、 if、while、do语句后一定要使用,即使号中为空或只有一条语句。如if (somevalue = 1) somevalue = 2;实例讲解C#的编码规范代码格式代码格式花括号 - 5、
23、右花括号 “” 后建议加一个注释以便于方便的找到与之相应的 。如while (1) if (valid) / if valid else / not valid / end forever实例讲解 C#的编码规范 注释 要养成良好的代码注释习惯,通常,注释要占实际代码总行数的1/3,同时,要在编写代码前或编写代码的同时进行代码的注释,不要事后补写注释。 注释分为多行注释和单行注释,我们的原则是:在类和方法的前面,要写多行注释,在定义类的全局变量/常量,以及方法的内部,使用单行注释。注释的前面与代码之间要有空行。 单行注释,我们鼓励都要单独一行,不鼓励在语句的后面使用注释,当然,在变量定义的后面
24、使用注释也是允许的。 另外,在编写注释的时候,建议使用C#自己的注释风格,即在类的前面和方法的前面使用“/”进行注释。实例讲解C#的编码规范 注释(续) 特别注意,如果是在已经发行版本的基础上添加、修改、删除代码,则需要将原先的代码注释掉,而不是直接删除掉,然后添加自己的代码。如:添加新代码的注释:/add by 姓名 yyyyMMdd xxx / add by 姓名 yyyyMMdd修改代码的注释: /update by 姓名 yyyyMMdd / xxx yyy / update by 姓名 yyyyMMdd删除代码的注释:/delete by 姓名 yyyyMMdd /xxx/ dele
25、te by 姓名 yyyyMMdd实例讲解C#的编码规范的编码规范方法和函数注释/ / 获取分页SQL/ / 表名/ 每页显示条数/ 第几页/ 排序字段(最后一个不需要填写正序还是倒序,例如:id asc, name)/ 最后一个排序字段的正序或倒序(true为倒序,false为正序)/ 条件/ 返回用于分页的SQL语句private string GetPagerSQL(string tblName, int pageSize, int pageIndex, string fldSort, bool fldDir, string condition) code;实例讲解C#的编码规范的编码规
26、范区域区域#region把相同性质的相关代码分组包含起来,如一组事件,方法,属性,字段等;如果内容少允许不包。原因:如果一个类比较长,归类可以方便阅读和查找。如果归类后的某层还很大,可以考虑里面再按用途归类。实例讲解 C#的编码规范 声明声明 每行只定义一个声明,多个声明要分多行来定义。如:int intAge,intWeight;/不推荐应使用如下的定义形式:int intAge;int intWeight; 声明的位置:变量要在块的开始的地方集中进行声明,不要何时用到何时临时定义。实例讲解ASP.NET编码规范ASP.NET方面的编码规范主要是控件命名方面的规范,其他的请参照C#的编码规范
27、实例讲解ASP.NET编码规范ASP.NET方面的编码规范主要是控件命名方面的规范,其他的请参照C#的编码规范(续)实例讲解ASP.NET编码规范ASP.NET方面的编码规范主要是控件命名方面的规范,其他的请参照C#的编码规范(续)实例讲解ASP.NET编码规范ASP.NET方面的编码规范主要是控件命名方面的规范,其他的请参照C#的编码规范(续)实例讲解 C#的编码规范 类型转换类型转换 1、尽量避免强制类型转换。 2、如果不得不做类型转换,尽量用显式方式。友情提示:友情提示:良好的命名对于软件开发起着至关重要的作用,能够对资源进行合理的命名,可以达到事半功倍的效果。无论是哪种命名规则,无论是对哪种资源进行命名,其核心思想都是“用最少的字母进行最全面的描述”。正如众多程序员强调的,“唯一性描述性”是命名的灵魂。所以,在您对程序的各个方面进行命名的时候,不妨去参照着这两大原则去进行,切记不可图一时之快,却为日后的修改或维护带来巨大的困难。注意点 遵守规范是第一位的 注重代码的效率 代码要清晰易懂,不要编写含糊晦涩的代码Q&AQ&A此课件下载可自行编辑修改,供参考!感谢您的支持,我们努力做得更好!41