ImageVerifierCode 换一换
格式:DOCX , 页数:25 ,大小:23.66KB ,
资源ID:6316078      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/6316078.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(C#编码规范.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

C#编码规范.docx

1、C#编码规范中国人寿保险股份有限公司版权所有,不得侵犯中国人寿保险股份有限公司标准C# 编码规范( 2011 版)中国人寿保险股份有限公司信息技术部 发布第 1 页中国人寿保险股份有限公司版权所有,不得侵犯文档信息制度名称C# 编码规范密级分类三类公司制度密级分类三类公司制度C 类信息技术制度C 类信息技术制度实施目标规范 C# 语言开发的编码习惯和风格主题词C# 编码 规范版本日期人员更新说明2011 版2011 年5月傅纪东新增版本控制审核人 职务 审核日期文档审核第 2 页1 概述1.1 目的C# 编码规范作为使用 C# 语言进行程序开发的规范, 详细描述了C# 语言开发中命名、声明、语

2、句、注释、排版等的规范,并对编程惯例进行约束,用于指导使用 C# 语言进行开发的项目进行代码规范和检查。同时还为安全性规范和单元测试提供指导。1.2 适用范围本规范适用于公司全系统。1.3 术语定义C#:是由 MicroSoft 公司推出的 C# 程序设计语言, 是 .NET 平台中主要的开发语言之一。2 编码规范2.1 排版规范1)缩进、换行、空行程序块要采用缩进风格编写,缩进的空格数为 4 个。1函数或过程的开始、结构的定义代码采用缩进风格。2循环和判断语句( if 、for、foreach 、do 、while 、switch 、case等)中的代码采用缩进风格。3一行代码的长度不能超过

3、屏幕显示范围(一般控制在80 个字符以内)。4长的语句要分成多行书写。5长表达式要在低优先级操作符处划分新行。6函数或过程中的参数较长时,要分成多行书写。7多行书写时,串连运算符要放在新行之首。8相对独立的程序段、变量之后要加空行。C# 编码规范 4 / 2410 在两个以上的关键字、变量、常量进行对等操作时,它们之间的操作符之前、之后或者前后要加空格;进行非对等操作时,如果是关系密切的立即操作符,后不应加空格。2)排版结构1 不允许把多个短语句写在一行中,即一行只写一条语句。但if、 for 、 foreach 、 while 等语句后的不单独占用一行,可以使行数减少,让一个窗口视图可以看到

4、更多的逻辑。2 不同类型的操作符混合使用时,即使实现优先级与实际需要相符,最好也使用括号隔离,以便代码更加清晰。2.2 变量规范1) 变量的使用1定义并明确变量的含义、作用、取值范围及变量间的关系。2变量访问之前一定要初始化。3C# 中没有全局变量和全局函数。全局操作是通过静态变量和静态函数来实现的。C# 编码规范 5 / 244readonly( 只读 )修饰符,仅在类的数据成员中使用,只能在构造函数或者直接初始化时赋值一次。 与 const 数据成员不同的是,const 要求在声明中初始化,而 readonly 可以先定义,后赋值(仅一次)。2)数据类型数据结构1使用严格形式定义的、可移植

5、的数据类型,尽量不要使用与具体硬件或软件环境关系密切的变量。2不要设计面面俱到、非常灵活的数据结构。不同结构间的关系不要过于复杂。结构中元素的个数应适中。3若结构中元素个数过多,可考虑依据某种原则把元素组成不同的子结构。4认真设计结构中元素的布局与排列顺序,使结构容易理解,以减少误用现象。C# 编码规范 6 / 245注意具体语言及编译器处理不同数据类型的原则及有关细节。编程时,要注意数据类型的强制转换。对编译系统默认的数据类型转换,也要有充分的认识。6尽量减少没有必要的数据类型默认转换与强制转换。对自定义数据类型进行恰当命名,使它成为自描述性的,以提高代码可读性。注意其命名方式在同一产品中的

6、统一。7用户定义的类型可以包括: 类类型( class ),结构类型( struct ),接口类型(interface )。根据类型的内存分配形式的不同又分成 值类型( value types ),引用类型( reference types )。8在对较长字符串操作的时候,避免使用 String 类,而用效率比较高的 StringBuilder 类,可以提高操作的便利性,减少额外开销和垃圾回收的压力。2.3 命名规范1)变量、方法函数的命名1变量名必须以字母开头C# 编码规范 7 / 242变量名只能由字母、数字和下滑线组成,而不能包含空格、标点符号、运算符等其他符号。3变量名不能与 C# 中

7、的关键字、库函数名称相同。4关于变量命名类型,形式可参考如下。类型命名形式特征BoolbFlagtrue;falseCharcName数字,英文,表达式符号SbytesbCount有符号 8位整数bytebCount无符号 8位整数shortsCount有符号 16位整数ushortusCount无符号 16位整数intnCount有符号 32位整数uintniCount无符号 32位整数longlCount有符号 64位整数C# 编码规范 8 / 24ulong ulCount 无符号 64 位整数float fCount 单精度 7 位数decimal dCount 双精度 15 到 16

8、 位数string sName 字符串5命名要清晰、明了,有明确含义,同时使用完整的单词或大家基本可以理解的缩写,避免让人产生误解。而且完整的单词之间的第一个字母需用大写来区别。6关于变量的级别区分。私有成员变量:变量前缀” m_”;静态成员:变量前缀” s_”。7i、j、k 作局部循环变量是允许的, x,y 经常被作为坐标变量。8方法函数的命名要避免使用容易被主观解释的难懂的名称,使用动词 -名词的方法来命名来给定。9区分变量和方法函数, 方法函数名要使用 Pascal 大小写处理( CalculateInvoiceTotal ),其中每一个单词的第一字母都是大写;变量名要使用 camel

9、大小写处理 ( documentFormatType ),C# 编码规范 9 / 24其中除了第一个单词以外每个单词的第一个字母都是大写的方式来处理。2) 常量、宏定义命名1常量和宏定义必须要有一定的实际意义。2常量和宏定义在函数定义之前。3常量和宏定义必须全部以大写字母来命名,中间可以根据意义连续性用下划线连接。 而且在右边必须要有注释来说明其意义和作用。3)类、委托、接口、名空间的命名1以 Class 声明的类,必须以能够标识事物特性的名词或者名词短语命名,每个单词的第一个字母必须大写。2根据类的特性 (命名 + 特性标识 )来命名,参考如下。特性 标识Attribute Attribut

10、eException ExceptionC# 编码规范 10 / 24只需要一个对象实例(全局对象) Class只作为其他类的基类 Base类是窗体 Form类是 Web 窗体 Page3委托类型以描述动作的名词命名,以体现委托类型实例的功能。4接口的命名以大写字母“ I”加上有意义的单词来命名,每个单词的第一个字母必须大写。接口以外的命名,一定要避免使用“ I”作为单个单词首写的命名。5名字空间的命名,参照类命名。4)控件、资源名称命名1Web 控件的命名以“Web 控件大写前缀 + + 变量名称“来规范。控件 大小写前缀Frame FrmC# 编码规范 11 / 24Label LblTe

11、xtBox TxtCheckBox ChkButton BtnListBox LstDropDownList DrpImage ImgPicture PicGrid GrdComBox Cob2WindowsForm 的控件命名以“Windows 控件小写前缀 + + 变量名称“来规范。控件小写前缀Fram frmLabel lblC# 编码规范 12 / 24TextBox txtCheckBox chkButton btnListBox lstDropDownList drpImage imgPicture picGrid grdComBox cob3资源名称命名以“资源大写前缀 + +

12、变量名称“来规范。控件 大写前缀菜单 IDM位图 IDB对话框 IDD字符串 IDSC# 编码规范 13 / 242.4 注释规范1)模块(类)注释文件开始注释内容包括 :公司名称、版权、作者姓名、时间、模块用途、背景介绍等 ,复杂的算法需要加上流程说明。/* 文件 (类)名:* Copyright (c) 2003-2004 * 公司* 创建人 :* 日 期 :* 修改人 :* 日 期 :* 描 述 :* * 版 本 :*/2)函数注释函数注释包括 :输入、输出、函数描述、流程处理、调用样例等,复杂的函数需要加上变量用途说明。/* 函数名 :C# 编码规范 14 / 24* 输 入 : a,

13、b,c* a-* b-* c-* 输 出 : x-* x 为 1, 表示 .* x 为 0, 表示 .* 功能描述 :* 调用模块 :* 作 者 :* 日 期 :* 修 改 :* 日 期 :* 版 本 :*/3)代码注释1变量、常量的注释。包括 :简洁准确的注释。2程序中的功能块, 包括 :修改时间和作者、 方便理解的注释等。3边写代码边注释,修改代码同时修改相应的注释,以保证注释与代码的一致性。4不再有用的注释要删除。注释的内容要清楚、明了、含义准确,防止注释二义性。C# 编码规范 15 / 245避免在注释中使用缩写,特别是非常用缩写注释应与其描述的代码相近,对代码的注释应放在其上方或右方

14、(对单条语句的注释)相邻位置,不可放在下面,如放于上方则需与其上面的代码用空行隔开。6对于所有物理含义的变量、常量,如果其命名不是充分注释的,在声明时都必须加以注释,说明其物理含义、变量、常量、宏的注释就放在其上方相邻位置或右方。7数据结构声明(包括数组、结构、类、枚举等),如果其命名不是充分注释的,必须加以注释。8对数据结构的注释应放在其上方相邻位置,不可放在下面;对结构中的每个域的注释放在此域的右方。9. 描述内容进行同样的缩排。将注释与其上面的代码用空行隔开。10. 对变量的定义和分支语句(条件分支、循环语句等)必须编写注释。C# 编码规范 16 / 242.5 结构化规范1)程序结构要

15、求1程序结构要清晰, 简单易懂, 单个函数的程序行不得超过 200行。2使用 .NET 库函数和公共函数 (无特殊情况, 不要使用外部方法调用 windows 的核心动态连接库)。3代码中垂直对齐左括号和右括号。4在函数参数较多的时候,尽量使用结构类型来传递参数。2)可读性规范1要重视程序的可读性,并在其基础上考虑效率。2保持代码和注释的一致性。3运算符两边要有空格。4在复杂的算法前面,必须要有详细解释。5循环和分层不要超过 5 层。3)结构化规范C# 编码规范 17 / 241禁止 GOTO 语句。2用 IF 语句来强调只执行两组语句中的一组。禁止 ELSEGOTO 和 ELSE RETUR

16、N 的使用。3不提倡使用条件赋值语句。4不要轻易使用条件分支去替换逻辑表达式。2.6 代码正确性规范1)代码规范1变量在调用前,必须初始化。2对所有用户的输入,必须做合法性检查。3不要比较浮点数的相等。4程序与环境或状态发生关系时,必须主动去处理发生的意外事件。5尽量使用规范的容错语句。trycatchfinallyC# 编码规范 18 / 246注意装箱和拆箱方法的使用。7注意隐性类型转换的值的变化。2) 可复用性规范1重复使用完成相对独立功能的算法或者代码,应抽象为 服务或类。2尽量用 OO 思想考虑独立和封装性。3 安全性规范3.1 输入验证类规范1、避免命令注入类攻击避免从系统目录获取

17、外部执行程序,通过 cmd 方式执行;String home = System.getProperty(APPHOME);String cmd = home + INITCMD;C#.lang.Runtime.getRuntime().exec(cmd);命令注入攻击通过改变应用程序执行的命令和改变命令执行的环境达到攻击目的。攻击者可以通过修改系统变量C# 编码规范 19 / 24APPHOME ,使其指向一个包含恶意代码的路径,进而利用应用程序的高级权限来执行任意命令。 因为程序没有对读入的环境变量值进行验证,如果攻击者能够控制系统的环境变量值APPHOME ,那么攻击者就能欺骗应用程序,

18、让其执行恶意代码,从而控制系统。2、避免跨站脚本攻击应用程序在数据库或者其它可信数据源中存储了危险数据。这些危险数据随后被应用程序读取并包含在动态内容中。 存储型XSS 通常是由攻击者将危险内容注入数据存储中,然后该内容被读出并包含在动态内容中。必须在所有数据进入应用程序之前把可能的危险拦截。 针对非法的 HTML 代码包括单双引号等,编写函数对其进行过滤。3、避免拒绝服务攻击涉及到系统资源的外部数据应该进行严格校验, 防止大数目或者无限制的输入。C# 编码规范 20 / 244、避免路径操控攻击应用程序应该尽量避免用户直接指定文件系统操作路径, 可以通过文件选择框或者文件列表来让用户指定操作

19、路径, 同时对用户指定的路径进行输入校验,对不符合程序要求的拒绝执行。对于来自于配置文件等外部资源的路径输入, 同样应该进行输入校验,防止外部输入路径非法或者越界5、避免日志伪造应用程序应该避免将用户的输入直接记入日志, 可以根据产生的异常,在程序内部生成日志信息记入日志。如果需要将来自于外部的数据记入日志,那么需要对记入日志的数据进行校验,过滤非法字符。此外,应该对日志文件进行严格的访问控制,杜绝XX的用户访问日志。6、避免 SQL 注入应用程序对输入进行验证,要么只接受白名单中的安全字符,要么鉴别和排除黑名单中的恶意字符。白名单是一种非常有C# 编码规范 21 / 24效的方法,虽然它需要

20、执行严格的输入验证规则,但可以减少对参数化 SQL 语句的维护,并能够提供更高的安全保证。3.2 API 使用规范1、避免使用 GC.Collect()直接请求进行垃圾回收很有可能导致出现问题, 尤其是与时间和状态有关时。2、检测函数返回值的空值程序要对函数的返回值进行非 Null 校验,否则程序有可能会去解引用一个空指针。3、遵循对象模型,定义 Equals() 和 GetHashCode()(类重写 Equals() 方法和 GetHashCode() 方法。 .NET 对象需要满足很多与相等有关的等式, 其中一个等式就是相等的对象要有相等的 hash 值。换句话说,如果 a.Equals

21、(b) = true ,那么a.GetHashCode() = b.GetHashCode() 。如果该类的对象被存储在一个 collection 中,那么不支持上面的这个等式就会导致问C# 编码规范 22 / 24题。如果所说的这类对象被用作 hash 表的 Key ,或者被插入一个字典中,那么相等的对象有相等的 hash 值这一点是至关重要的。3.3 .net 安全特性1、避免模拟用户的上下文Microsoft ASP.NET 应用程序可以模拟当前用户的安全上下文或者与它们相关的进程来执行需要特殊权限的操作。 在程序中不建议修改上下文。2、避免会话永久有效配置FormsAuthentica

22、tion.RedirectFromLoginPage() 方法会发出一个认证结果,允许用户在指定的一段时间内保持已认证状态。调用该方法时,如果第二个参数为 false ,该方法会发出一个临时的认证结果,该结果在 web.config 指定的一段时间内有效。如果第二个参数为 true ,该方法会发出一个永久性的认证结果。在.NET 2.0 中,永久性结果的生命周期由 web.config 中的值决C# 编码规范 23 / 24定。但在 .NET 1.1 中,永久性认证结果有一个可笑的默认生命周期 50 年。允许永久性认证结果存活很长的一段时间会使用户和系统遭受攻击。3、错误访问页面ASP .NET 应用程序应该配置使用定制的错误页面来代替框架默认页面。默认错误页面会给出发生错误的详细信息,不应该被用在产品环境中。 标签中的 mode 属性定义了是使用定制错误页面还是默认错误页面。4 制度解释本规范由公司总裁室负责解释和修订。本规范自 2011 年9月 1日起施行。C# 编码规范 24 / 24

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1