C#编码规范.docx

上传人:b****6 文档编号:6316078 上传时间:2023-01-05 格式:DOCX 页数:25 大小:23.66KB
下载 相关 举报
C#编码规范.docx_第1页
第1页 / 共25页
C#编码规范.docx_第2页
第2页 / 共25页
C#编码规范.docx_第3页
第3页 / 共25页
C#编码规范.docx_第4页
第4页 / 共25页
C#编码规范.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

C#编码规范.docx

《C#编码规范.docx》由会员分享,可在线阅读,更多相关《C#编码规范.docx(25页珍藏版)》请在冰豆网上搜索。

C#编码规范.docx

C#编码规范

 

中国人寿保险股份有限公司版权所有,不得侵犯

 

中国人寿保险股份有限公司标准

 

C#编码规范

 

(2011版)

 

中国人寿保险股份有限公司信息技术部发布

 

第1页

 

中国人寿保险股份有限公司版权所有,不得侵犯

 

文档信息

制度名称

C#编码规范

密级分类

三类公司制度

密级分类

三类公司制度

C类信息技术制度

C类信息技术制度

实施目标

规范C#语言开发的编码习惯和风格

主题词

C#编码规范

版本

日期

人员

更新说明

2011版

2011年5月

傅纪东

新增

 

版本控制

 

审核人职务审核日期

 

文档审核

 

第2页

 

1概述

 

1.1目的

 

C#编码规范作为使用C#语言进行程序开发的规范,详细描述了

 

C#语言开发中命名、声明、语句、注释、排版等的规范,并对编程

 

惯例进行约束,用于指导使用C#语言进行开发的项目进行代码规范

 

和检查。

 

同时还为安全性规范和单元测试提供指导。

 

1.2适用范围

 

本规范适用于公司全系统。

 

1.3术语定义

 

C#:

是由MicroSoft公司推出的C#程序设计语言,是.NET平台中

 

主要的开发语言之一。

 

2编码规范

 

2.1排版规范

 

1)缩进、换行、空行

 

程序块要采用缩进风格编写,缩进的空格数为4个。

 

1.函数或过程的开始、结构的定义代码采用缩进风格。

 

2.循环和判断语句(if、for、foreach、do、while、switch、case

 

等)中的代码采用缩进风格。

 

3.一行代码的长度不能超过屏幕显示范围(一般控制在

80个

 

字符以内)。

 

4.长的语句要分成多行书写。

 

5.长表达式要在低优先级操作符处划分新行。

 

6.函数或过程中的参数较长时,要分成多行书写。

 

7.多行书写时,串连运算符要放在新行之首。

 

8.相对独立的程序段、变量之后要加空行。

 

C#编码规范4/24

 

10.在两个以上的关键字、变量、常量进行对等操作时,它们之间的操作符之前、之后或者前后要加空格;进行非对等操作时,如果是关系密切的立即操作符,后不应加空格。

 

2)排版结构

 

1.不允许把多个短语句写在一行中,即一行只写一条语句。

 

if、for、foreach、while等语句后的不单独占用一行,可以使行

 

数减少,让一个窗口视图可以看到更多的逻辑。

 

2.不同类型的操作符混合使用时,即使实现优先级与实际需要

 

相符,最好也使用括号隔离,以便代码更加清晰。

 

2.2变量规范

 

1)变量的使用

 

1.定义并明确变量的含义、作用、取值范围及变量间的关系。

 

2.变量访问之前一定要初始化。

 

3.C#中没有全局变量和全局函数。

全局操作是通过静态变量和

 

静态函数来实现的。

 

C#编码规范5/24

 

4.readonly(只读)修饰符,仅在类的数据成员中使用,只能在构

 

造函数或者直接初始化时赋值一次。

与const数据成员不同的是,

 

const要求在声明中初始化,而readonly可以先定义,后赋值

 

(仅一次)。

 

2)数据类型数据结构

 

1.使用严格形式定义的、可移植的数据类型,尽量不要使用与

 

具体硬件或软件环境关系密切的变量。

 

2.不要设计面面俱到、非常灵活的数据结构。

不同结构间的关

 

系不要过于复杂。

结构中元素的个数应适中。

 

3.若结构中元素个数过多,可考虑依据某种原则把元素组成不

 

同的子结构。

 

4.认真设计结构中元素的布局与排列顺序,使结构容易理解,

 

以减少误用现象。

 

C#编码规范6/24

 

5.注意具体语言及编译器处理不同数据类型的原则及有关细节。

 

编程时,要注意数据类型的强制转换。

对编译系统默认的数据类

 

型转换,也要有充分的认识。

 

6.尽量减少没有必要的数据类型默认转换与强制转换。

对自定

 

义数据类型进行恰当命名,使它成为自描述性的,以提高代码可

 

读性。

注意其命名方式在同一产品中的统一。

 

7.用户定义的类型可以包括:

类类型(class),结构类型(struct),

 

接口类型(interface)。

根据类型的内存分配形式的不同又分成值

 

类型(valuetypes),引用类型(referencetypes)。

 

8.在对较长字符串操作的时候,避免使用String类,而用效率

 

比较高的StringBuilder类,可以提高操作的便利性,减少额外

 

开销和垃圾回收的压力。

 

2.3命名规范

 

1)变量、方法函数的命名

 

1.变量名必须以字母开头

 

C#编码规范7/24

 

2.变量名只能由字母、数字和下滑线组成,而不能包含空格、

 

标点符号、运算符等其他符号。

 

3.变量名不能与C#中的关键字、库函数名称相同。

 

4.关于变量命名类型,形式可参考如下。

 

类型

命名形式

特征

Bool

bFlag

true;false

Char

cName

数字,英文,表达式符

Sbyte

sbCount

有符号8

位整数

byte

bCount

无符号8

位整数

short

sCount

有符号16

位整数

ushort

usCount

无符号16

位整数

int

nCount

有符号32

位整数

uint

niCount

无符号32

位整数

long

lCount

有符号64

位整数

 

C#编码规范8/24

 

ulongulCount无符号64位整数

 

floatfCount单精度7位数

 

decimaldCount双精度15到16位数

 

stringsName字符串

 

5.命名要清晰、明了,有明确含义,同时使用完整的单词或大

 

家基本可以理解的缩写,避免让人产生误解。

而且完整的单词之

 

间的第一个字母需用大写来区别。

 

6.关于变量的级别区分。

私有成员变量:

变量前缀”m_”;静态

 

成员:

变量前缀”s_”。

 

7.i、j、k作局部循环变量是允许的,x,y经常被作为坐标变量。

 

8.方法函数的命名要避免使用容易被主观解释的难懂的名称,

 

使用动词-名词的方法来命名来给定。

 

9.区分变量和方法函数,方法函数名要使用Pascal大小写处理

 

(CalculateInvoiceTotal),其中每一个单词的第一字母都是大

 

写;变量名要使用camel大小写处理(documentFormatType),

 

C#编码规范9/24

 

其中除了第一个单词以外每个单词的第一个字母都是大写的方

 

式来处理。

 

2)常量、宏定义命名

 

1.常量和宏定义必须要有一定的实际意义。

 

2.常量和宏定义在函数定义之前。

 

3.常量和宏定义必须全部以大写字母来命名,中间可以根据意

 

义连续性用下划线连接。

而且在右边必须要有注释来说明其意义

 

和作用。

 

3)类、委托、接口、名空间的命名

 

1.以Class声明的类,必须以能够标识事物特性的名词或者名

 

词短语命名,每个单词的第一个字母必须大写。

 

2.根据类的特性(命名+特性标识)来命名,参考如下。

 

特性标识

 

AttributeAttribute

 

ExceptionException

 

C#编码规范10/24

 

只需要一个对象实例(全局对象)Class

 

只作为其他类的基类Base

 

类是窗体Form

 

类是Web窗体Page

 

3.委托类型以描述动作的名词命名,以体现委托类型实例的功

 

能。

 

4.接口的命名以大写字母“I”加上有意义的单词来命名,每个单

 

词的第一个字母必须大写。

接口以外的命名,一定要避免使用“I”

 

作为单个单词首写的命名。

 

5.名字空间的命名,参照类命名。

 

4)控件、资源名称命名

 

1.Web控件的命名以“Web控件大写前缀+‘’+变量名称

 

“来规范。

 

控件大小写前缀

 

FrameFrm

 

C#编码规范11/24

 

LabelLbl

 

TextBoxTxt

 

CheckBoxChk

 

ButtonBtn

 

ListBoxLst

 

DropDownListDrp

 

ImageImg

 

PicturePic

 

GridGrd

 

ComBoxCob

 

2.WindowsForm的控件命名以“Windows控件小写前缀+‘’

 

+变量名称“来规范。

 

控件小写前缀

 

Framfrm

 

Labellbl

 

C#编码规范12/24

 

TextBoxtxt

 

CheckBoxchk

 

Buttonbtn

 

ListBoxlst

 

DropDownListdrp

 

Imageimg

 

Picturepic

 

Gridgrd

 

ComBoxcob

 

3.资源名称命名以“资源大写前缀+‘’+变量名称“来规范。

 

控件大写前缀

 

菜单IDM

 

位图IDB

 

对话框IDD

 

字符串IDS

 

C#编码规范13/24

 

2.4注释规范

 

1)模块(类)注释

 

文件开始注释内容包括:

公司名称、版权、作者姓名、时间、

 

模块用途、背景介绍等,复杂的算法需要加上流程说明。

 

/******************************************************************

**文件(类)名:

**Copyright(c)2003-2004*********公司

**创建人:

**日期:

**修改人:

**日期:

**描述:

**

**版本:

**

******************************************************************/

 

2)函数注释

 

函数注释包括:

输入、输出、函数描述、流程处理、调用样例

 

等,复杂的函数需要加上变量用途说明。

 

/*****************************************************************

**函数名:

 

C#编码规范14/24

 

**输入:

a,b,c

**a---

**b---

**c---

**输出:

x---

**x为1,表示...

**x为0,表示...

**功能描述:

**调用模块:

**作者:

**日期:

**修改:

**日期:

**版本:

****************************************************************/

 

3)代码注释

 

1.变量、常量的注释。

包括:

简洁准确的注释。

 

2.程序中的功能块,包括:

修改时间和作者、方便理解的注释等。

 

3.边写代码边注释,修改代码同时修改相应的注释,以保证注

 

释与代码的一致性。

 

4.不再有用的注释要删除。

注释的内容要清楚、明了、含义准

 

确,防止注释二义性。

 

C#编码规范15/24

 

5.避免在注释中使用缩写,特别是非常用缩写注释应与其描述

 

的代码相近,对代码的注释应放在其上方或右方(对单条语句的

 

注释)相邻位置,不可放在下面,如放于上方则需与其上面的代

 

码用空行隔开。

 

6.对于所有物理含义的变量、常量,如果其命名不是充分注释

 

的,在声明时都必须加以注释,说明其物理含义、变量、常量、

 

宏的注释就放在其上方相邻位置或右方。

 

7.数据结构声明(包括数组、结构、类、枚举等),如果其命

 

名不是充分注释的,必须加以注释。

 

8.对数据结构的注释应放在其上方相邻位置,不可放在下面;

 

对结构中的每个域的注释放在此域的右方。

 

9.描述内容进行同样的缩排。

将注释与其上面的代码用空行隔开。

 

10.对变量的定义和分支语句(条件分支、循环语句等)必须编写注释。

 

C#编码规范16/24

 

2.5结构化规范

 

1)程序结构要求

 

1.程序结构要清晰,简单易懂,单个函数的程序行不得超过200

 

行。

 

2.使用.NET库函数和公共函数(无特殊情况,不要使用外部方

 

法调用windows的核心动态连接库)。

 

3.代码中垂直对齐左括号和右括号。

 

4.在函数参数较多的时候,尽量使用结构类型来传递参数。

 

2)可读性规范

 

1.要重视程序的可读性,并在其基础上考虑效率。

 

2.保持代码和注释的一致性。

 

3.运算符两边要有空格。

 

4.在复杂的算法前面,必须要有详细解释。

 

5.循环和分层不要超过5层。

 

3)结构化规范

 

C#编码规范17/24

 

1.禁止GOTO语句。

 

2.用IF语句来强调只执行两组语句中的一组。

禁止ELSE

 

GOTO和ELSERETURN的使用。

 

3.不提倡使用条件赋值语句。

 

4.不要轻易使用条件分支去替换逻辑表达式。

 

2.6代码正确性规范

 

1)代码规范

 

1.变量在调用前,必须初始化。

 

2.对所有用户的输入,必须做合法性检查。

 

3.不要比较浮点数的相等。

 

4.程序与环境或状态发生关系时,必须主动去处理发生的意外

 

事件。

 

5.尽量使用规范的容错语句。

 

try{

}catch{

}finally{

 

C#编码规范18/24

 

}

 

6.注意装箱和拆箱方法的使用。

 

7.注意隐性类型转换的值的变化。

 

2)可复用性规范

 

1.重复使用完成相对独立功能的算法或者代码,应抽象为

 

服务或类。

 

2.尽量用OO思想考虑独立和封装性。

 

3安全性规范

 

3.1输入验证类规范

 

1、避免命令注入类攻击

 

避免从系统目录获取外部执行程序,通过cmd方式执行;

 

Stringhome=System.getProperty("APPHOME");

Stringcmd=home+INITCMD;

C#.lang.Runtime.getRuntime().exec(cmd);

 

命令注入攻击通过改变应用程序执行的命令和改变命令执

 

行的环境达到攻击目的。

攻击者可以通过修改系统变量

 

C#编码规范19/24

 

APPHOME,使其指向一个包含恶意代码的路径,进而利用应用

 

程序的高级权限来执行任意命令。

因为程序没有对读入的环境变

 

量值进行验证,如果攻击者能够控制系统的环境变量值

 

APPHOME,那么攻击者就能欺骗应用程序,让其执行恶意代码,

 

从而控制系统。

 

2、避免跨站脚本攻击

 

应用程序在数据库或者其它可信数据源中存储了危险数据。

 

这些危险数据随后被应用程序读取并包含在动态内容中。

存储型

 

XSS通常是由攻击者将危险内容注入数据存储中,然后该内容

 

被读出并包含在动态内容中。

 

必须在所有数据进入应用程序之前把可能的危险拦截。

针对

 

非法的HTML代码包括单双引号等,编写函数对其进行过滤。

 

3、避免拒绝服务攻击

 

涉及到系统资源的外部数据应该进行严格校验,防止大数目

 

或者无限制的输入。

 

C#编码规范20/24

 

4、避免路径操控攻击

 

应用程序应该尽量避免用户直接指定文件系统操作路径,可

 

以通过文件选择框或者文件列表来让用户指定操作路径,同时对

 

用户指定的路径进行输入校验,对不符合程序要求的拒绝执行。

 

对于来自于配置文件等外部资源的路径输入,同样应该进行输入

 

校验,防止外部输入路径非法或者越界

 

5、避免日志伪造

 

应用程序应该避免将用户的输入直接记入日志,可以根据产

 

生的异常,在程序内部生成日志信息记入日志。

如果需要将来自

 

于外部的数据记入日志,那么需要对记入日志的数据进行校验,

 

过滤非法字符。

此外,应该对日志文件进行严格的访问控制,杜

 

绝XX的用户访问日志。

 

6、避免SQL注入

 

应用程序对输入进行验证,要么只接受白名单中的安全字

 

符,要么鉴别和排除黑名单中的恶意字符。

白名单是一种非常有

 

C#编码规范21/24

 

效的方法,虽然它需要执行严格的输入验证规则,但可以减少对

 

参数化SQL语句的维护,并能够提供更高的安全保证。

 

3.2API使用规范

 

1、避免使用GC.Collect()

 

直接请求进行垃圾回收很有可能导致出现问题,尤其是与时

 

间和状态有关时。

 

2、检测函数返回值的空值

 

程序要对函数的返回值进行非Null校验,否则程序有可能

 

会去解引用一个空指针。

 

3、遵循对象模型,定义Equals()和GetHashCode()(

 

类重写Equals()方法和GetHashCode()方法。

.NET对象需

 

要满足很多与相等有关的等式,其中一个等式就是相等的对象要

 

有相等的hash值。

换句话说,如果a.Equals(b)==true,那么

 

a.GetHashCode()==b.GetHashCode()。

如果该类的对象被存

 

储在一个collection中,那么不支持上面的这个等式就会导致问

 

C#编码规范22/24

 

题。

如果所说的这类对象被用作hash表的Key,或者被插入一

 

个字典中,那么相等的对象有相等的hash值这一点是至关重要

 

的。

 

3.3.net安全特性

 

1、避免模拟用户的上下文

 

MicrosoftASP.NET应用程序可以模拟当前用户的安全上

 

下文或者与它们相关的进程来执行需要特殊权限的操作。

在程序

 

中不建议修改上下文。

 

2、避免会话永久有效配置

 

FormsAuthentication.RedirectFromLoginPage()方法会发

 

出一个认证结果,允许用户在指定的一段时间内保持已认证状

 

态。

调用该方法时,如果第二个参数为false,该方法会发出一个

 

临时的认证结果,该结果在web.config指定的一段时间内有效。

 

如果第二个参数为true,该方法会发出一个永久性的认证结果。

 

在.NET2.0中,永久性结果的生命周期由web.config中的值决

 

C#编码规范23/24

 

定。

但在.NET1.1中,永久性认证结果有一个可笑的默认生命

 

周期50年。

允许永久性认证结果存活很长的一段时间会使用户

 

和系统遭受攻击。

 

3、错误访问页面

 

ASP.NET应用程序应该配置使用定制的错误页面来代替

 

框架默认页面。

默认错误页面会给出发生错误的详细信息,不应

 

该被用在产品环境中。

标签中的mode属性定义

 

了是使用定制错误页面还是默认错误页面。

 

4制度解释

 

本规范由公司总裁室负责解释和修订。

本规范自2011年9月1日起施行。

 

C#编码规范24/24

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 合同协议

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

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