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变量命名,统一命名为ex1,ex2……
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对应。
//注意string和String的使用地方
string sample = String.Empty;
//注意int和Int32的使用地方
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*/
代码中遇到语句块(if,case……)或实现一个逻辑功能时,必须添加注释。添加的注释应该能够说明此语句块的作用和实现手段(所用算法等等)。
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 其它
待定
浙公网安备 33010602011771号