c#规范

1        变量的命名规则

1.1    常量(包含静态的)

一律以小写字母”c”开头,第一个字母大写的各单词组成。如:

public const int cSAMPLE = 0;

静态变量命名: 一律以小写字母”s”开头, 第一个字母大写的各单词组成。

public static int sSample;

一般情况下常量的public等修饰符不可少。

1.2    类变量及实例变量

类变量命名一律用下划线开头,一个或多个英文单词组成,第一个字母小写的,其他单词第一个字母大写。如:

public class Hello

{

   private string _firstName;

   private DateTime _date;

}

 

一般情况下类变量及实例变量public等修饰符不可少。

1.3    局部变量

一个或多个英文单词的组合,由小写字母开头,其他单词开头字母大写的各单词组成。

如:

       Int index = 0;

       String retVal = string.Empty;

除上述情况以外的对象类型,都以obj作为前缀,后面跟一个能说明变量功能或意义单词作为变量,如:

UserClass objUser;

1.4    参数

一个或多个英文单词的组合,过程的参数不使用前缀,第一个单词的首字母小写,其他单词首字母均大写,其余所有字母均小写。如:

public void GetValue(int localVar)

{

//…

}

建议方法的参数不要超过5个,超过时可以将多个参数合并为一个对象进行传递

 

1.5    数组变量

一个或多个英文单词的组合,一律采用”arr”作为前缀,其他单词第一个字母大写,其余所有字母均小写,如:

protected object[] arrSample;

1.6    枚举类型

一律由大写字母”E”开头,第一个字母大写的各个单词组。

public enum ESample

{

A,

B

}

2        方法的命名规则

一律由大写字母开头的各个单词组成。

public void GetValue(int type)

{

//…

}

具体细则包括以下几点:

ü         方法命名的基本原则:容易看懂

ü         一般的方法名采用两个单词动宾结构形式的名称,两个单词之间不要带其它符号,每个单词的首字母大写,其它的都小写。如:

ReadData(int id)、SetData(int id)

ü         只有一个动词形式的方法名不推荐使用。

ü         不容易看明白的方法名或有歧义的方法名可采用多单词的形式,每两个单词之间不要带其它符号,从第二个单词开始,每个单词的首字母大写,其它的都小写。如:

ReadDataByID(int id)ReadDataByIDAndYear(int id,int year)

ü         方法命名不得采用缩写形式,除非广泛采用的除外,缩写的字母均大写,如

public void GetCustomerID()。

ü         返回值是Bool值的方法和属性以Is开头

ü         使用返回值是Bool值的方法(属性)的时候,不要将bool值方法(属性)与if语句放在同一行,如应该这样写:

bool valid = IsValid();

if (valid)

{

   //…

}

不应这样写:

if (IsValid())

{

   //…

}

3        类及接口的命名规则

3.1    一般类名

一个或多个英文单词的组合,所有单词的首字母大写,其余所有字母均小写,如:

///

///接口样例

///

public class HelloWorld

{

           //…

}

具体细则包括以下几点:

ü         名字应该能够标识事物的特性;

ü         首字母大写,缩略语可以全部字母大写;

ü         名字可以有两个或三个单词组成,但通常不应多于三个;

ü         使用名词或名词短语命名类;

ü         少用缩写,除非是被广泛使用的;

ü         不要使用下划线字符 (_)

3.2    抽象类

一律由大写字母”A”开头,第一个字母大写的各单词组成。

///

///抽象类样例

///

public abstract class ASample

{

///

///获取对象

///

public abstract object GetValue();

}

 

3.3    类的实例

类的实例第一个字母小写,其他单词的第一个字母大写。

FileStream fileStream = new FileStream();

3.4    接口

和一般类命名规范相同,唯一区别是接口在名字前加上"I"前缀,“I+模块名,如:

///

///接口样例

///

public interface ISample

{

///

///获取对象

///

object GetValue();

}

 

 

4        控件命名规则

4.1    常用控件

控件命名= 控件缩写前缀+变量具体释义。

控件名称

前缀

例子

Button

btn

btnSubmit

CheckBox

chk

chkReadOnly

ComboBox

cbo

cboEnglish

Command

cmd

cmdDelete

Connection

con

conOracle

DataAdapter

dad

dadDiction

DataColumn

dcol

dcolDiction

DataGrid

dgd

dgdTitles

DataReader

dr

drDiction

DataRelation

drel

drelDiction

DataRow

drow

drowDiction

DataSet

ds

dsDiction

DataTable

dt

dtDiction

DataView

dv

dvDiction

DateTimePicker

dtp

dtpPublished

DropDownList

drp

drpOffice

Form

frm

frmMain

ImageList

ils

ilsAllIcons

Label

lbl

lblHelpMessage

ListBox

lst

lstPolicyCodes

ListView

lv

lvHeadings

Menu

mnu

mnuFileOpen

MonthCalender

mcd

mcdPeriod

Parameter

parm

parmIn

PictureBox

pic

picVGA

ProgressBar

prg

prgLoadFile

RadioButton

rad

radGender

RichTextBox

rtb

rtbReport

StatusBar

stab

stabDateTime

TabControl

tab

tabOptions

TextBox

txt

txtLastName

ToolBar

tlb

tlbActions

TreeView

trv

trvOrganization

ScriptManager

smg

smgContent

UpdatePanel

upd

updQuery

Panel

pl

plQuery

GridView

gv

gvShow

UpdateProgress

upp

uppUpdate

MultiView

mulv

mulvContent

View

vie

vieAdd

FormView

fvi

fviAdd

HiddenField

hf

hfMian

ObjectDataSource

ods

odsData

DynamicPopulateExtender

dpe

dpeText

FilteredTextBoxExtender

ftbe

ftbeNum

 

5        异常处理规范

针对异常捕获过程中的Exception变量命名,统一命名为ex1ex2……

try

{

   // code1

   try

   {

       // code2

   }

   catch(Exception ex2)

   {

       //your code

   }

}

catch(Exception ex1)

{

       //your code

}

如果捕获异常不需要作任何处理,则不需要定义Exception实例。

try

{

   //your code

}

catch( Exception )

{

}

不必每个方法都用try-catch。当特定的异常可能发生时才使用。比如,当你写文件时,处理异常FileIOException

别写太大的 try-catch 模块。如果需要,为每个执行的任务编写单独的 try-catch 模块。 这将帮你找出哪一段代码产生异常,并给用户发出特定的错误消息。

如果应用程序需要,可以编写自己的异常类。自定义异常不应从基类SystemException派生,而要继承于IApplicationException

6        作用域

6.1    类的作用域

ü         类的作用域保持最小范围。供包外其它类引用的类才添加public作用域修饰符。

6.2    方法的作用域

ü         只供对象或类内部调用的方法必须使用private作用域修饰符。

ü         包外不会调用的方法严禁使用public作用域修饰符。

6.3    属性的作用域

ü         静态常量(类常量)属性可以使用各种作用域修饰符。

ü         对象属性变量严禁使用public作用域修饰符。

ü         VO对象属性变量必须使用private作用域修饰符。

6.4    局部变量的作用域

方法内的变量定义应该遵循最小作用域规则。如:

// iSize只在下面for循环中使用

int iSize =;

for(int i=0;i<iSize;i++)

{

   //…

}

建议写成:

for (int i = 0, iSize = bsList.Count; i < iSize; i++)

{

     //...

}

 

属性是对象的特征,不要把非对象的属性定义为实例变量。

7        调用规范

7.1    类内变量和函数

类内部函数和变量的调用一定要在前面加上”this.”

7.2    类常量和类静态变量,以及静态方法

类内静态元素(元素包括变量和方法)的调用,一定要在前面加上该类的名字;

7.3    系统类的使用

系统类型的使用,.Net中对于基本数值类型,都有相应的引用类型定义,在一般表示的情况下,我们使用小写字母开头的类型,而用到他们方法和数据的时候,则使用引用空间的名称。比如string System.String对应,int System.Int32对应。

//注意stringString的使用地方

string sample = String.Empty;

//注意intInt32的使用地方

int sample = 0;

System.Int32.Equals(intSample,3);

空字符串时,建议使用:string sample = String.Empty,而不建议使用string sample = “”

7.4    引用类型转换

我们不要使用类型加在前面的转换方式,而使用as,这样当转换不成功时,也不会有异常,但可以根据转换结果进行判断。

object obj;

不要:

ISample sam = (ISample)obj;

而要:

ISample sam = obj as ISample;

if(null == sam)

{

//转换失败

}

8        注释的编写规则

注释是为了增加代码的清晰度,保持注释的简洁,不是任何代码都需要注释的,过多的注释反而会影响代码的可读性。

注释不要包括其他的特殊字符,建议先写注释,后写代码,注释和代码一起完成。

如果语句块(比如循环和条件分枝的代码块)代码太长,嵌套太多,则在其结束要加上注释,标志对应的开始语句。如果分支条件逻辑比较复杂,也要加上注释。

注释规范主要包括:模块(类)注释规范、类属性注释规范、方法注释规范、代码间注释规范。

8.1    模块(类)注释规范

模块开始尽量以以下形式书写模块注释:

功能描述:

创 建 人:

修 改 人:

修改描述:

    类属性注释规范

在类的属性必须以以下格式编写属性注释:

              /// <summary>

              ///属性说明

              /// </summary>

8.3    方法注释规范

在类的方法声明前必须以以下格式编写注释:

              /// </summary>

        ///函数的作用

              /// <param name="<参数名称>"><参数说明></param>

/// <returns><对方法返回值的说明,该说明必须明确说明返回的值代表什么含义> </returns>

        ///<exception>异常类型、异常结果说明(为什么产生此异常)</exception>

Visual Studio环境中,在方法中上一行中输入"///",开发环境会自动生成注释模板。

例如:

#region UpgradeThread

/// <summary>

/// 构造函数

/// </summary>

/// <param name=' str1’ >示例参数1</param>

/// <param name=' str2'>示例参数2</param>

public UpgradeThread(string str1, string str2)

{

}

#endregion

 

8.4    代码间注释规范

代码间注释分为单行注释和多行注释。

      单行注释:

//<单行注释>(不提倡使用,尽量都使用/**/

      多行注释:

              /*多行注释1

               *多行注释2

               *多行注释3*/

代码中遇到语句块(ifcase……)或实现一个逻辑功能时,必须添加注释。添加的注释应该能够说明此语句块的作用和实现手段(所用算法等等)。

9        格式

ü         要使所有的缩进为一个Tab,即4个空格,使用VS.NET的默认设置。

ü         在代码中垂直对齐左括号和右括号。

if (x == 0)

{

Response.Write("用户编号必须输入!");

}

不允许以下情况:

if (x == 0) {

       Response.Write("用户编号必须输入!");

}

或者:

if (x == 0){ Response.Write("用户编号必须输入!");}

ü         为了防止在阅读代码时滚动源代码编辑器,每行代码或注释在1024*768的分辨率下尽量不超过一显示屏,如超过则应换行,换行后的代码应该缩进一个Tab

ü         当一行被分为几行时,将串联运算符放在每一行的末尾而不是开头,清楚地表示没有后面的行是不完整的。

ü         每一行上放置的语句避免超过一条,避免写 int i = 0;int j = 1;

ü         在大多数运算符之前和之后使用空格,这样做时不会改变代码的意图却可以使代码容易阅读。例:

              int j = i + k;

而不应写为

           int j=i+k;

ü         将大的复杂代码节分为较小的、易于理解的模块。

ü         编写 SQL 语句时,建议(不强求)对于关键字使用全部大写,对于数据库元素(如表、列和视图)使用大小写混合。

ü         将每个主要的 SQL 子句放在不同的行上,这样更容易阅读和编辑语句,例如:

SELECT FirstName, LastName

FROM Customers

WHERE State = 'WA'

ü         字符串操作时,尽量使用字符串本身提供的API,如:.

判断两个字符串是否相等时使用

string1.Equals(string2)

两个字符串比较大小时使用:

string1.         字符串连接尽量不使用“+”,而使用string.Format(“string1{0}”, “string2”);

9.1    缩进

设定为一个Tab,相当于4 个字符。

9.2    每代码行的长度

代码行的长度以屏幕的宽度为准不用滚动条即可,不超过120个字符。

9.3    大括号

大括号中的“{”与条件在同一行,“}”单独一行,即使大括号中只有一条执行语句也要使用大括号,如:

if (a == b)

{

return 0 ;

}

9.4    空行

类文件头注释、NameSpace语句、using语句、类头注释、类的属性、方法等之间都空一行。

类的属性与属性之间、方法与方法之间都空一行。

如下:

功能描述:

创 建 人:

修 改 人:

修改描述:

public class HelloWorld : BaseHelloWorld

{

       //变量说明

private String _message;

              <空一行>

              #region 相同类型的函数说明

         ///          /// </summary>

</param>

</returns>

         {

         }

 

         /// <param name="id">         /// <returns>         public bool SetData(int id)

             return true;

    空格

“=”、“+”、“==”等二元操作符两边分别空一格。如:

int i = 1;

“,”的后面空一格。

9.6    using namespace部分

using引用要具体命名空间。

Using语句书写的顺序为:dot net标准类,第三方软件类库,本公司自己的组件类、本工程其他包中的类。

Using命名顺序:公司名+项目名+模块名+功能名,如:    数字

代码中不要直接使用数字(-1,0,1除外),要先对数字进行变量声明。

整数累加时不建议使用I = I + 1; 而建议 i++;

10 其它

待定

posted on 2011-09-26 14:57  Kingly  阅读(1903)  评论(0)    收藏  举报