|
1.1规范制定原则 1.2术语定义 Pascal 大小写 Camel 大小写 标识符的首字母小写,而每个后面连接的单词的首字母都大写。例如:backColor 1.3文件命名组织 1.3.1文件命名 【规定】使用统一而又通用的文件扩展名: C# 类 .cs 1.3.2文件注释
#region /*---------------------------------------------------------------- * 版权所有: * 文件名: * 文件功能描述: * * * 创建标识: * --------------------------------------------------------------- * 文件修改日志: * 修改标识: * 修改描述: * * //----------------------------------------------------------------*/ #endregion 文件功能描述只需简述,具体详情在类的注释中描述。 创建标识和修改标识由创建或修改人员的拼音或英文名加日期组成。 【示例】:张三20080301 一天内有多个修改的只需做一个在注释说明中做一个修改标识就够了。 1.3.3 文件的组织 【规定】文件的组织: 每个.cs文件只能包含一个类,或一个类的一部分,不允许将多个类组织在同一个cs文件中. 注:接口,结构文件的组织与此相同 ² |
|
B. 编程风格 |
|
编程风格 【推荐】代码列宽控制在110字符左右,超过的字符使用换行处理。 2.2 换行 2.3 缩进 2.4 空行 目的:空行是为了将逻辑上相关联的代码分块,以便提高代码的可阅读性。 【推荐】在以下情况下使用一个空行 2.5 空格 【规定】1 关键字和左括符 “(” 应该用空格隔开。 【示例】 while (true) 【示例】 a += c + d; a = (a + b) / (c * d); while (d++ == s++) { n++; } PrintSize("size is " + size + "\n"); 【规定】4、语句中的表达式之间用空格隔开。 【示例】 for (expr1; expr2; expr3) 2.6 括号 - () 2.7 花括号 - {} 【示例】 if (condition) { } publicint Add(int x, int y) { } 【示例】
if (somevalue == 1) { somevalue = 2; } 【示例】 while (1) { if (valid) { } // if valid else { } // not valid } // end forever
|
|
C. 程序注释 |
|
3.1 注释概述 1、修改代码时,总是使代码周围的注释保持最新。 【示例】 namespace Langchao.Procument.Web { } // namespace Langchao.Procument.Web 3.2 文档型注释 /// /// /// ///for information about output statements. /// /// /// publicstaticvoid MyMethod(int Int1) { } 注:此功能在.net的开发环境中的方法或类定义的上一行写入”///”后,系统会根据方法的声明自动生成相关的注释模板,推荐使用此方式对方法属性等添加相关的注释 该类注释用于 【规定】1 方法内的代码注释。如变量的声明、代码或代码段的解释。 【示例】: // // 注释语句 // privateint number; // 注释语句 privateint number; 【示例】: if (1 == 1) // always true { statement; } // always true 3.5 注释标签 【规定】
|
|
D.声明 |
|
4.1 每行声明数 【推荐】一行只建议作一个声明,并按字母顺序排列。 【示例】 int level; //推荐 int size; //推荐 int x, y; //不推荐 4.2 初始化 4.3 位置 【示例】如 void MyMethod() { int int1 = 0; // beginning of method block if (condition) { int int2 = 0; // beginning of "if" block //... } } for (int i = 0; i < maxLoops; i++) { // ... } int count; void MyMethod() { if (condition) { int count = 0; // 避免 } } 4.4 类和接口的声明 【规定】1 在方法名与其后的左括号间没有任何空格。 【规定】2 左花括号 “{” 出现在声明的下行并与之对齐,单独成行。 【规定】3 方法间用一个空行隔开。 4.5 字段的声明 【规定】不要将字段直接以public或protected方式直接暴露给外界,应该使用get set属性访问器提供对外的字段访问 【示例】: publicclass Control: Component { privateint handle; public int Handle { get { return handle; } } } |
|
E.命名规范 |
|
5.1 命名概述 名称应该说明“什么”而不是“如何”。通过避免使用公开基础实现(它们会发生改变)的名称,可以保留简化复杂性的抽象层。例如,可以使用 GetNextStudent(),而不是 GetNextArrayElement()。 命名原则是: 选择正确名称时的困难可能表明需要进一步分析或定义项的目的。使名称足够长以便有一定的意义,并且足够短以避免冗长。唯一名称在编程上仅用于将各项区分开。表现力强的名称是为了帮助人们阅读;因此,提供人们可以理解的名称是有意义的。不过,请确保选择的名称符合适用语言的规则和标准。 命名方法。 【规定】1.所有的命名(包括标识符,类,接口,函数等等)使用有意义的英文标识符,不允许使用汉语拼音,也不允许使用中文作为各种命名 【实力】 5.2 大小写规则 【规定】不同类型的标识符的大小写规则见附录B。 5.3 缩写 为了避免混淆和保证跨语言交互操作,请遵循有关区缩写的使用的下列规则: 【规定】5 不要在标识符或参数名称中使用缩写。如果必须使用缩写,对于由多于两个字符所组成的缩写请使用Camel 大小写,虽然这和单词的标准缩写相冲突。 5.4 命名空间 【规定】1、命名命名空间时的一般性规则是使用公司名称,后跟技术名称和可选的功能与设计,如下所示。 CompanyName.TechnologyName[.Feature][.Design] namespace Langchao.Procurement //浪潮公司的采购单管理系统 namespace Langchao.Procurement.DataRules //浪潮公司的采购单管理系统的业务规则模块 5.5 类 【推荐】5.不要使用类型前缀,如在类名称上对类使用 C 前缀。例如,使用类名称 FileStream,而不是 CFileStream。 5.6 接口 【规定】5、不要使用下划线字符 (_)。 【示例】 publicinterface IServiceProvider publicinterface IFormatable
publicinterface IComponent { // Implementation code goes here. } publicclass Component : IComponent { // Implementation code goes here. } 5.7 属性 (Attribute) 【规定】将后缀 Attribute 添加到自定义属性类。 【示例】以下是正确命名的属性类的示例。 public class ObsoleteAttribute { } 5.8 枚举 (Enum) 5.9 参数 【规定】4、不要使用保留的参数。 保留的参数是专用参数,如果需要,可以在未来的版本中公开它们。相反,如果在类库的未来版本中需要更多的数据,请为方法添加新的重载。 Type GetType(string typeName) string Format(string format, args() As object) 5.10 方法 RemoveAll() GetCharArray() Invoke() 5.11 属性 (property) 【示例】:如果声明名为 Color 的属性,则属性的类型同样应该是 Color。请参阅本主题中后面的示例。
publicclass SampleClass { public Color BackColor { // Code for Get and Set accessors goes here. } }
publicenum Color { // Insert code for Enum here. } publicclass Control { public Color Color { get { // Insert code here. } set { // Insert code here. } } } 以下代码示例不正确,原因是 Color 属性是 Integer 类型的。 publicenum Color { // Insert code for Enum here. } publicclass Control { publicint Color { // Insert code here } } 在不正确的示例中,不可能引用 Color 枚举的成员。Color.Xxx 将被解释为访问一个成员,该成员首先获取 Color 属性( C# 中为 int 类型)的值,然后再访问该值的某个成员(该成员必须是 System.Int32 的实例成员)。 5.12 事件 【规定】1、对事件处理程序名称使用 EventHandler 后缀。 publicdelegatevoid MouseEventHandler(object sender, MouseEventArgs e); publicclass MouseEventArgs : EventArgs { int x; int y; public MouseEventArgs(int x, int y) { this.x = x; this.y = y; } publicint X { get { return x; } } publicint Y { get { return y; } } } 5.13 常量 (const) 【示例】如 publicconststring PAGE_TITLE = "Welcome"; 5.14 字段
class SampleClass { string url; string destinationUrl; } 对象本身的公共静态只读字段。使用 Pascal 大小写,原因是字段是公共的。 下面的代码
publicstruct Color { publicstaticreadonly Color Red = new Color(0x0000FF); public Color(int rgb) { // Insert code here } public Color(byte r, byte g, byte b) { // Insert code here. } publicbyte RedValue { get { return Color; } } } 5.15 静态字段 【规定】1.原则上禁止使用静态变量和静态字段、,static变量也可以叫准全局变量。导致代码互相依赖,容易掩盖其副作用,由其在b/s结构下,会使多个用户共享变量。 【规定】2、使用名词、名词短语或者名词的缩写命名静态字段。 5.16 集合 5.17 措词
|
|
F.语句 |
|
6.1 每行一个语句 【规定】每行最多包含一个语句。 【示例】如 a++; //推荐 b--; //推荐 a++;b--; //不推荐 6.2 复合语句 复合语句是指包含"父语句{子语句;子语句;}"的语句,使用复合语句应遵循以下几点 【示例】 如 while (d++ == s++) { n++; } 6.3 return 语句 【示例】如 return; return myDisk.size(); return (size ? size : defaultSize); 6.4 if、 if-else、if else-if 语句 if (条件) { 表达式; } if (条件) { 表达式; } else { 表达式; } if (条件) { 表达式; } else if (条件) { 表达式; } else { 表达式; } 6.4 for、foreach 语句 【规定】for 语句使用格式 for (initialization; condition; update) { statements; } for (initialization; condition; update); // update user id foreach (object obj in array) { statements; } 6.5 while 语句 【规定】while 语句使用格式 while (condition) { statements; } while (condition); 6.6 do - while 语句 【规定】do - while 语句使用格式 do { statements; } while (condition); 6.7 switch - case 语句 switch (condition) { case 1: statements; break; case 2: statements; break; default: statements; break; } 6.8 try - catch 语句 try { statements; } catch (ExceptionClass e) { statements; } finally { statements; } 6.9 using 块语句 using 块语句使用格式 using (object) { statements; } 6.10 goto 语句
|
|
G.控件命名原则 |
|
7.1 命名方法 控件名简写+英文描述,英文描述首字母大写 . 控件名简写原则:根据英文简写的规定,使用控件名去掉元音字母作为控件的简写,尽量不要超过5个字符作为前缀,附录C中列出了主要控件名简写的对照表,未在表中列出的按照此规则处理。 |
|
H. 代码设计 |
|
8.1异常处理 【规定】与外界交互的语句中要使用异常处理,包括:对数据库打开,关闭操作,数据库的访问,更新操作,访问外部的组件操作,文件的打开,读写,关闭操作等; 【规定】原则上不允许忽略异常的处理,若需要请在忽略处用注释写明忽略的原因。 【规定】尽量不要转义系统异常抛出新的异常,若有需要请在转义处用注释标明原因。 8.2数据库连接的关闭处理 【规定】在一个方法或者事件中,不管是使用公司组件还是其它的组件,如果打开数据库连接,使用后必须及时关闭。打开数据库连接必须放在try{ }中,与之相配的finally{ }中必须要关闭数据连接。 8.3 数据库的事务处理 【规定】若在代码中使用事务,必须有对事务的提交和产生错误时的回滚操作 8.4 b/s 结构下ViewState使用 【规定】禁止将大数据量的数据保存在ViewState,如 用来保存附件的二进制数据、大数据量的DataSet、因为ViewState中的数据在 asp.net中是以隐藏文本的方式保存在页面中的,若数据量过大,会导致加载页面时间过长甚至打不开,影响系统的整体性能 8.5拼串处理 【推荐】对于大量的拼字符串的处理建议使用StringBuilder类型(在System.Text命名空间下) 【示例】 StringBuilder TextString = new StringBuilder(256); 注:在定义StringBuilder类型的变量时最好根据业务需要给定变量初始化的分配存储空间,即上例中的StringBuilder(256)以提高使用时的性能,因StringBuilder对象是个动态的对象,当容量到达给定的分配空间时,会重新以给定初始化值(此例中为256)的倍数增加相应的存储空间,系统默认分配的存储空间长度为16。
|
|
I. 其他 |
、
|
9.1 表达式 9.2 类型转换 【推荐】尽量避免强制类型转换。 【推荐】如果不得不做类型转换,尽量用显式方式。
|
|
附录A 编程常用单词缩写 |
|
规则:较短的单词可通过去掉“元音”形成缩写;较长的单词可取单词的头几个字母形成缩写;一些单词有大家公认的缩写.
完整单词 可缩写为 缩写 A average ------> avg ;
B back ------> bk ; background ------> bg ; break ------> brk ; buffer ------> buf ;
C color ------> cr ; (clr) control ------> ctrl ;
D data ------> dat ; delete ------> del ; document ------> doc ;
E edit ------> edt ; error ------> err ; escape ------> esc ;
F flag ------> flg ; form ------> frm ;
G grid ------> grd ;
I increment ------> inc ; information -----> info ; initial -----> init ; insert ------> ins ; image ------> img ;
L label ------> lab ; length ------> len ; list ------> lst ; library ------> lib ;
M manager ------> mngr ; (mgr) message ------> msg ;
O Oracle ------> Ora ;
P panorama ------> pano ; password ------> pwd ; picture ------> pic ; point ------> pt ; position ------> pos ; print ------> prn ; program ------> prg ;
S server ------> srv ; source ------> src ; statistic ------> stat ; string ------> str ; Sybase ------> Syb ;
T temp ------> tmp ; text ------> txt ;
U user ------> usr ;
|
|
附录B 不同类型数据类型的命名规则 |
|
|
|
附录C: 主要控件名简写对照表 |
|
|
凡符合下表所列的集合类型,应添加相应的后缀。
说明 | 后缀 | 示例 |
数组 | Array | int[] productArray |
列表 | List | List |
DataTable/HashTable | Table | HashTable productTable |
字典 | Dictionary | Dictionay |
EF中的DbSet /DataSet | Set | DbSet |
凡符合下表所列的局部变量、方法参数、字段、属性,均需添加相应的后缀。
说明 | 后缀 | 示例 | 示例说明 |
费用相关 | Cost | ShipCost | 运输费 |
价格相关 | Price | ProductUnitPrice | 产品单价 |
消息相关 | Message(弃用Note) | SuccessMessage | 成功消息 |
日期相关 | Date(弃用Time) | OrderDate | 下单日期 |
计数、数量相关 | Count(弃用Time) | LoginCount | 登录次数 |
链接地址相关 | Url | BlogUrl | 博客链接 |
图片相关 | Image | SignImage | 签名图片 |
金额相关 | Amount | PrepaidAmount | 预付款 |
点数、积分相关 | Point | MemberPoint | 会员积分 |
记录、日志相关 | Record(弃用Log) | ErrorRecord | 错误记录 |
配置相关 | Config | DataBaseConfig | 数据库配置 |
状态相关 | Status | OrderStatus | 订单状态 |
模式、方式相关 | Mode | OpenMode | 打开方式 |
种类相关 | Category / Type 二选一 | UserCategory | 用户种类 |
工厂类相关 | Factory | ConnectionFactory | 连接工厂 |
启用相关 | Enabled | ExportEnabled | 开启导出 |
流相关 | Stream | UploadStream | 上传流 |
读取器相关 | Reader | ExcelReader | Excel读取器 |
写入器相关 | Writer | ExcelWriter | Excel写入器 |
适配器相关 | Adapter | IntroOPAdapter | IntroOP适配器 |
提供器相关 | Provider | MemebershipProvider | 会员信息提供器 |
包装器相关 | Wrapper | ProductWrapper | Product包装器 |
连接相关 | Connection | ExcelConnection | Excel连接 |
凡存在下表中的类型,需采用下表指定的名称命名。
类型 | 命名 | 类型 | 命名 |
客户 | Customer | 分销商 | Reseller |
零售商 | Retailer | 经销商/批发商 | Dealer |
用户 | UserInfo(User为数据库关键字) | 订单 | OrderInfo(Order为数据库关键字) |
供应商 | Supplier | 管理员 | Admin |
密码 | Password | 会员 | Member |
评论 | Remark(弃用Comment) | 文章 | Article |
新闻 | News | 发票 | Invoice |
导入 | Import | 导出 | Export |
公司、企业 | Company(弃用Enterprise) | 产品 | Product |
省份 | Province | 城市 | City |
区县 | District | 地址 | Address |
角色 | Role(弃用Group) | 权限 | Authority(弃用Permission) |
仓库 | Warehouse | 工厂 | Plant |
登录 | Login(弃用SignIn) | 登出 | LogOut(弃用SignOut) |
创建 | Create(弃用Add) | 编辑 | Edit |
更新 | Update | 删除 | Remove(弃用Delete) |
照片 | Photo | 图片 | Image |
字段、属性种类比较繁杂,因此仅列出最常用的几项。
类型 | 名称 | 类型 | 名称 |
Id(int型) | Id(“d”小写,弃用ID) | GuidId(Guid型) | Id |
Name | 名称 | Title | 标题 |
Remark | 备注、描述(弃用Memo、Description) | Category | 种类(弃用Class、Type) |
Linkman | 联系人 | |