
DotNet项目编码规范.doc
10页DotNet 项目编码规范1.大小写约定1.1 常见标记法 Camel 标记法:首字母是小写的,接下来的单词都以大写字母开头 Pascal 标记法:首字母是大写的,接下来的单词都以大写字母开头 匈牙利标记法:在以 Pascal 标记法的变量前附加一个小写的变量名缩写1.2标识符 大小写方式 示例 类 Pascal AppDomain 枚举类型 Pascal ErrorLevel 枚举值 Pascal FatalError 事件 Pascal ValueChanged 异常类 Pascal WebException 只读的静态字段 Pascal RedValue 接口 Pascal IDisposable 方法 Pascal ToString 命名空间 Pascal System.Drawing 参数 Camel typeName 属性 Pascal BackColor 循环迭代变量 全部小写 i,o…2.命名约定2.1 通用命名约定 选择易读的标识符名称例如,英文属性名称 HorizontalAlignment 比 AlignmentHorizontal 更具可读性 可读性比简洁性更重要。
例如,属性名称 CanScrollHorizontally 比 ScrollableX(指 X 轴,但意义不明确)更好 不要使用下划线、连字符或任何其他非字母数字字符例如,不能使用 Is_Enable,Is-Enable,IsEnable9 等 不要使用匈牙利表示法例如,不能使用 iNum(i 表示 int)等 避免使用与常用编程语言的关键字冲突的标识符例如,不能使用关键字做标识符 不要将缩写或缩略形式用作标识符名称的组成部分除非必要,不要使用任何未被广泛接受的首字母缩写词例如,使用 OnButtonClick 而不要使用 OnBtnClick 对于类型名称,应使用语义上有意义的名称而不要使用语言特定的关键字例如,名称 GetLength 比 GetInt 更好 在标识符的语义含义仅限于其类型的极少数情况下,应使用一般公共语言运行库 (CLR) 类型名称,而不要使用语言特定的名称例如,将数据转换为 Int16 的方法应命名为 ToInt16 而不是 ToShort,因为 Short 是 Int16 的语言特定的类型名称 在标识符没有语义含义且参数的类型不重要的极少数情况下,应使用通用名称(如值或项) ,而不要重复类型名称。
例如,没有意义的参数可以使用 value,item 等2.2 程序集和 DLL 的名称一定要为程序集 DLL 选择指示大的功能块(如 System.Data)的名称程序集和 DLL 的名称不必对应于命名空间名称,但是在命名程序集时遵循命名空间名称这种做法是合理的考虑按下面的模式命名 DLL:..dll 其中 包含一个或多个以圆点分隔的子句例如,Contoso.WebControls.dll 2.3 命名空间的名称命名空间名称的一般格式如下:.(|)[.][.] 例如,Microsoft.WindowsMobile.DirectX命名空间的名称应遵守以下约定: 使用公司名称作为命名空间的前缀以防止不同公司开发的命名空间具有相同的名称和前缀 在命名空间名称的第二级使用稳定的、与版本无关的产品名称 适当的时候可考虑使用复数命名空间名称例如,使用 System.Collections 而不使用 System.Collection但是,品牌名称和首字母缩写词属于此规则的例外情况例如,使用 System.IO,而不要使用 System.IOs 命名空间和其中的类型不要使用相同的名称例如,不要在将“Debug”用作命名空间名称的同时,又在该命名空间中提供一个名为“Debug”的类。
有些编译器要求对这种类型进行完全限定 不要引入宽泛的类型名称,如 Element、Node、Log 和 Message在通常情况下,这样极可能导致类型名称冲突应对宽泛的类型名称进行限定(例如 FormElement、 XmlNode EventLog、SoapMessage) 不要指定会与核心命名空间中的任何类型发生冲突的类型名称例如,不要使用 Directory 作为类型名称,因为这会与 Directory 类型冲突2.4 类、结构和接口的名称 按照 Pascal 大小写格式,使用名词或名词短语(或偶尔使用形容词短语)为类、接口和值类型命名 不要为类名加前缀(如字母 C) 考虑在派生类的末尾使用基类名称例如,从 Stream 继承的 Framework 类型以 Stream 结尾,从 Exception 继承的类型以 Exception 结尾 为接口名称加上字母 I 前缀,以指示该类型为接口 在定义类/接口对(其中类是接口的标准实现)时,一定要确保类和接口的名称除接口名称以字母 I 为前缀外,二者应完全相同例如,Framework 提供 IAsyncResult 接口和 AsyncResult 类。
泛型类型参数的名称,考虑将字母 T 作为描述性类型参数名称的前缀例如,约束于 ISession 的参数可称为 TSession2.5 常见类型的名称 向自定义属性类添加 Attribute 后缀例如:ObsoleteAttribute 和 AttributeUsageAttribute 是符合此准则的类型名称 向在事件中使用的类型(如 C# 事件的返回类型)的名称添加 EventHandler 后缀例如,AssemblyLoadEventHandler 是符合此准则的委托名称 向不是事件处理程序的委托的名称添加 Callback 后缀 不要向委托添加 Delegate 后缀 向扩展 System.EventArgs 的类添加 EventArgs 后缀 不要从 System.Enum 类派生;使用当前所用语言支持的关键字例如,在 C# 中应使用 enum 关键字 向从 System.Exception 继承的类型添加 Exception 后缀 向实现 System.Collections.IDictionary 或 System.Collections.Generic.IDictionary 的类型添加 Dictionary 后缀。
注意,System.Collections.IDictionary 是特定类型的集合,但此准则的优先级高于以下更为一般的集合准则 向实现 System.Collections.IEnumerable、System.Collections.ICollection、System.Collections.IList、System.Collections.Generic.IEnumerable、System.Collections.Generic.ICollection 或 System.Collections.Generic.IList 的类型添加 Collection 后缀 向从 System.IO.Stream 继承的类型添加 Stream 后缀 向从 System.Security.CodeAccessPermission 继承的类型或实现 System.Security.IPermission 的类型添加 Permission 后缀2.6 枚举的名称 不要在枚举值名称中使用前缀例如,不要对 ADO 枚举使用 ad 之类的前缀,也不要对多格式文本枚举使用 rtf 之类的前缀,依此类推。
这还意味着不应在枚举值名称中包含枚举类型名称下面的代码示例演示了不正确的枚举值命名public enum Teams{TeamsAlpha,TeamsBeta,TeamsDelta} 不要将 Enum 用作枚举类型的后缀 不要在标志枚举的名称中添加 Flags 作为后缀 对枚举使用单数名称,除非枚举值是位域 对使用位域值的枚举(也称为标志枚举)使用复数名称2.7 类成员的名称类型包含以下几种成员: 方法 属性 字段 事件2.7.1 方法的名称 使用动词或动词短语作为方法的名称2.7.2 属性的名称 使用名词、名词短语或形容词作为属性的名称 不要使用与 Get 方法同名的属性例如,不要将一个属性命名为 EmployeeRecord,又将一个方法命名为 GetEmployeeRecord开发人员会不知道使用哪个成员来完成其编程任务 使用肯定性短语作为布尔值属性的名称(如使用 CanSeek 而不使用 CantSeek) 此外,还可以为布尔值属性添加前缀(如 Is、Can 或 Has) ,但要注意使用得当 考虑为属性提供与其类型相同的名称2.7.3 事件的名称 使用动词或动词短语作为事件的名称。
在为事件命名时,使用现在时或过去时表示时间上的前后概念例如,在窗口关闭之前引发的关闭事件可命名为“Closing” ,在窗口关闭之后引发的关闭事件可命名为“Closed” 不要使用 “Before”或“After”作为前缀或后缀来指示之前和之后发生的事件 使用后缀 EventHandler 命名事件处理程序(用作事件类型的委托) 在事件处理程序签名中使用命名为“sender ”和“e ”的两个参数 使用 EventArgs 后缀命名事件参数类2.7.4 字段的名称 在字段名称中使用 Pascal 大小写格式 使用名词或名词短语作为字段的名称 不要在字段名称中使用前缀例如,不要使用 g_ 或 s_ 来区分静态字段和非静态字段2.7 参数名 对参数名称使用 Camel 大小写 使用描述性参数名称 考虑使用反映参数含义的名称而不是反映参数类型的名称3.文档注释规范3.1 XML 文档注释规范XML 标记 解释 示例 对象的摘要参数说明 返回值的说明用于添加有关类型的信息,从而补充由 所指定的信息 段落文本* 要引用的参数名* 类型参数的名称* 希望将其标记为代码的文本* 异常的说明* 类型参数的说明* 标记使您得以引用描述源代码中类型和成员的另一文件中的注释* 代码示例的说明* 项目符号列表或编号列表中的项或者 term 的定义* 属性的说明* 对成员的访问的说明* 希望将其指示为代码的文本* 标记使您得以从文本内指定链接* 标记使您得以指定希望在“请参见”一节中出现的文本推荐使用:/// /// 功能说明/// /// 参数说明/// 参数说明/// 参数说明/// 返回值说明/// 创建记录,更新记录/// 对 summary描述的补充3.2 类注释/// /// Project : BK.WEB.WebUI/// Class : BK.WEB.WebUI.Hello/// /// /// 2005/01/16 author Created|Modify /// class Hello{}3.3 类成员变量注释private Control _controlToPaginate; //需要绑定的列表控件private int recordCount = -1; //总记录数类成员变量注释要对齐。
3.4 方法注释/// /// 创建数据适配器/// /// 数据库连接字符串/// SQL语句/// 命令类型/// 参数/// 数据适配器实例/// 异常没有捕获/// 2006/12/21 author Create|Modifypublic DbDataAdapter CreateAdapter(string sql, CommandType cmdtype, DbParameter[] parameters){}3.5 语句注释if (PagerMode ==。
