C#编码规范
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C#编码规范
1 命名规约
1.1 数据库对象命名规约
1.1.1 表名
均采用Tab-前缀+单数英文名词表示,不加空格,每个词的首字母大写。
表示单个实体的表名:TabXxxx——XXXX为实体英文单词,例如:员工信息表——TabEmployee;
表示两个实体关系的表名:TabXxYy——XxYy为实体汉语拼音声母字母,例如:项目课程信息表——TabProjectCourse。
1.1.2 视图名
均采用View-前缀+视图主要内容或基表名称构成,其他约定同表名。
1.1.3 存储过程名
均采用Proc-前缀+存储过程主要用途名称构成,其他约定同表名。
1.2 WinForms窗体与控件对象命名规约
1.2.1 窗体名:均以frm-为前缀,采用英文单词表示,每个词的首字母大写。
临时窗体名:frm+使用者+用途。
例如:前台登录窗体——frmWaiterLogin。
主界面窗体名:frmMain+使用者。
例如:前台主界面窗体——frmMainWaiter。
1.2.2 控件名:均以前缀+用途或内容的英文单词表示,每个词的首字母大写。
TextBox控件:前缀为txt-,例如:用于输入用户名的TextBox——txtUserName。
Label控件:前缀为lbl-。
Button控件:前缀为btn-。
ComboBox控件:前缀为cmb-。
CheckBox控件:前缀为chk-。
RadioButton控件:前缀为rad-。
Panel控件:前缀为pnl-。
DataGrid控件:前缀为grd-。
MainMenu控件:前缀为mmu-。
ContextMenu控件:前缀为cmu-。
子菜单项:mu+菜单项名+子菜单项用途,例如:“文件”菜单中的“退出”项——muFileExit。
1.3 C# 类名与变量名命名规约
1.3.1 类名:均以Cls-为前缀。
1.3.2 类数据成员名:私有变量均以下划线“_”为前缀,首字母小写。
1.3.3 变量名:
1.3.3.1 基本类型变量以变量类型的缩写为前缀,首字母小写。
int型:前缀为i-。
long型:前缀为l-。
double型:前缀为d-。
float型:前缀为f-。
bool型:前缀为b-。
string型:前缀为str-。
1.3.3.2 系统引用类型变量以变量类型的缩写为前缀,首字母小写。
object型:前缀为obj-。
Array型:前缀为arr-。
ArrayList型:前缀为als-。
Hashtable型:前缀为ht-。
DateTime型:前缀为dtm-。
DataSet型:前缀为ds-。
DataTable型:前缀为dtb-。
DataView型:前缀为dvw-。
DataAdapter型:前缀为da-。
DataReader型:前缀为dr-。
1.3.4 函数或方法名:
主要用途的英文单词组合,首字母大写。
1.3.5 属性或索引名:
主要内容的英文单词组合,首字母大写。
1.4 报表名:
rpt+主要内容的英文单词。
2 代码编写规约
2.1 SQL语句的书写规约
例:strSQL = “SELECT * ”;
strSQL += “FROM tablename ”;
strSQL += “WHERE tablename”;
2.2 C# 代码的书写规约
按.NET推荐的编码风格编写,使用缩进与空行。
对代码段、方法的参数和各变量的用途进行注释。
对数据库操作、IO操作、类型转换等进行异常处理。
命名规范
数据类型数据类型简写标准命名举例Connection con conNorthwind Command cmd cmdReturnProducts Parameter parm parmProductID DataAdapter dad dadProducts DataReader dtr dtrProducts
DataSet dst dstNorthWind
DataTable dtbl dtblProduct
DataRow drow drowRow98 DataColumn dcol dcolProductID DataRelation drel drelMasterDetail DataView dvw dvwFilteredProducts
WinForm Control 命名规范数据类型数据类型简写标准命名举例Label lbl lblMessage
LinkLabel llbl llblToday
Button btn btnSave
TextBox txt txtName
MainMenu mmnu mmnuFile
CheckBox chk chkStock
RadioButton rbtn rbtnSelected GroupBox gbx gbxMain
PictureBox pic picImage
Panel pnl pnlBody
DataGrid dgrd dgrdView
ListBox lst lstProducts CheckedListBox clst clstChecked ComboBox cbo cboMenu
ListView lvw lvwBrowser
TreeView tvw tvwType
TabControl tctl tctlSelected DateTimePicker dtp dtpStartDate HscrollBar hsb hsbImage
VscrollBar vsb vsbImage
Timer tmr tmrCount
ImageList ilst ilstImage
ToolBar tlb tlbManage
StatusBar stb stbFootPrint OpenFileDialog odlg odlgFile SaveFileDialog sdlg sdlgSave FoldBrowserDialog fbdlg fgdlgBrowser
数据类型数据类型简写标准命名举例
FontDialog fdlg fdlgFoot
ColorDialog cdlg cdlgColor
PrintDialog pdlg pdlgPrint
WebControl 命名规范
数据类型数据类型简写标准命名举例
AdRotator adrt Example
Button btn btnSubmit
Calendar cal calMettingDates
CheckBox chk chkBlue
CheckBoxList chkl chklFavColors CompareValidator valc valcValidAge CustomValidator valx valxDBCheck
DataGrid dgrd dgrdTitles
DataList dlst dlstTitles
DropDownList drop dropCountries
HyperLink lnk lnkDetails
Image img imgAuntBetty
ImageButton ibtn ibtnSubmit
Label lbl lblResults
LinkButton lbtn lbtnSubmit
ListBox lst lstCountries
Panel pnl pnlForm2
PlaceHolder plh plhFormContents
RadioButton rad radFemale
RadioButtonList radl radlGender
RangeValidator valg valgAge
RegularExpression vale valeEmail_Validator Repeater rpt rptQueryResults RequiredFieldValidator valr valrFirstName Table tbl tblCountryCodes
TableCell tblc tblcGermany
TableRow tblr tblrCountry
TextBox txt txtFirstName ValidationSummary vals valsFormErrors
XML xmlc xmlcTransformResults
变量
变量的作用域及前缀
前缀说明举例
P 全局变量pstrName
St 静态变量ststrName
M 模块或者窗体的局部变量MstrName A 数组AintCount[]
变量数据类型的前缀
C#数据类型类库数据类型标准命名举例Sbyte System.sbyte sbte
Short System.Int16 sht
Int System.Int32 int
Long System.Int64 lng
Byte System.Byte bte
Ushot System.Uint16 usht
Uint System.Uint32 uint
Ulong System.Uint64 ulng
Float System.Single flt
Double System.Double dbl
Decimal System.Decimal dcl
Bool System.Boolean bol
Char System.Char chr
Object System.Object obj
String System.String str
System.DateTime dte
IntPtr System.Intpre intptr
常量定义
常量=作用域+ c+数据类型+变量名
类对象定义
类实例=作用域+cls+变量名
类对象=C+名称
结构对象定义
结构对象实例=作用域+struc+变量名
结构对象=S+名称
命名空间定义
以层为前缀进行命名
接口定义
以大写I为前缀
窗体的命名规则
窗体名=frm+窗体名(名词+动词)
注意:保存的文件明和窗体名相同。
枚举定义规则
以Enum为前缀
事件命名规则
事件控制器要带有EventHandler后缀
使用sender和e命名两个参数
事件参数类要带有EventArgs后缀
考虑使用动词命名事件
对于有“之前”或“之后”概念的事件,要使用现在时或过去时命名
本文来自CSDN博客,转载请标明出处:/usernamegaorn/archive/2007/10/20/1834254.aspx
基本命名规范
注记:
Pascal 大小写形式:所有单词第一个字母大写,其他字母小写。
Camel 大小写形式:除了第一个单词,所有单词第一个字母大写,其他字母小写。
对于在页面中的类,类名使用Pascal大小写形式,当然,这个类名通常情况下与前台页面的文件名是一致的,比如,对于一个页面HelloWorld.aspx,其类名会如下定义:
public class HelloWorld : Page
{
…
}
对于类库中的类,则应按照约定加一定的前缀,通常是小写字母c,比如一个通用类可以如下定义:
public class cHelloWorld
{
…
}
自然的,相应文件名也是遵循此定义格式,在本例中,为cHelloWorld.cs
类中的方法都使用Pascal大小写形式
public class HelloWorld
{
void SayHello ( string userName )
{
…
}
}
变量和方法中的参数使用Camel 大小写形式
public class HelloWorld
{
int totalCount = 0;
void SayHello ( string userName )
{
string fullMessage = "Hello " + userName;
…
}
}
常量的定义
常量名通常全部采用单词的大写,单词之间以下划线“_ ”隔开。
private const bool WEB_DEFAULT_DA TA_LINK = true;
类的对象实例的命名
可以采用取类的首字母小写的方法,比如:
DataSet ds = new DataSet();
cHelloWorld hw = new cHelloWorld();
页面控件的命名
页面控件命名时,最好按照类型加前缀,其命名方式类似Camel 大小写形式,比如:txtUserName,btnSumbit,lblErrorInfo。
不要使用匈牙利方法来命名变量
以前,多数程序员喜欢把数据类型作为变量名的前缀而m_作为成员变量的前缀。
例如:
string m_sName;
int iAge;
然而,这种方式在.NET编码规范中是不推荐的。
所有变量都用Camel 大小写形式,而不是用数据类型和m_来作前缀。
别使用单个字母的变量象i,n,x 等。
使用index,temp等。
当然,用于循环迭代的变量例外,如for循环中的i。
尽量不要使用下划线
C#中的下划线会带来不好的代码阅读体验,所以应当限制下划线的使用。
唯一采用下划线的规则是常量名的定义。
比如如下代码:
private string ExitDoor()
{
cControl_Exit.Door();
....
}
其中的cControl_Exit.Door,一眼之下难以区分类还是方法,习惯于vb编程的人很容易将cControl看成对象,将Exit.Door看成方法。
不要使用关键字或疑似关键字作为变量名
比如class,void,key之类的单词,尽量不要单独用作变量名,但可以与其它单词组合作为变量名。
类、方法和变量的命名不要过长,限制在三到四个单词以内。
另外,要用有意义的,描述性的词语来命名变量。
别用缩写。
用name,address,salary等代替nam,addr,sal。
接口的命名
和类命名规范相同,唯一区别是接口在名字前加上“I ”前缀
例:
interface IDBCommand;
interface IButton;
代码格式规范
避免使用大文件。
如果一个文件里的代码超过300~400行,必须考虑将代码分开到不同类中。
避免写太长的方法。
一个典型的方法代码在1~25行之间。
如果一个方法的代码超过25行,应该考虑将其分解为不同的方法。
使用Tab缩进使代码产生层次,不允许使用空格缩进。
当前一个值得关注的趋势,就是通过限制Tab制表符缩进的层数,控制代码嵌套的深度。
代码中操作符两端要留出空格
要这样:for ( int i = 0; i < 10; i++ ){}
不要这样:for (int i=0;i<10;i++){}
代码注释
好的代码要做到易读(见名知意),就可以尽量少的使用注释,对于必要的注释,要遵循以下格式:
注释文字要和“// ”空一个格。
要这样:// 注释内容
不要这样://注释内容
模块或类文件的注释,采用如下格式:
/// <summary>
/// Module ID:<模块编号,可以引用系统设计中的模块编号>
/// Module Name:<模块名称>
/// Depiction:<对此类的描述,可以引用系统设计中的描述>
/// Author:<作者>
/// Create Date:<模块创建日期,格式:YYYY-MM-DD>
/// </summary>
方法的注释加到方法定义的前面,采用如下格式:
/// <summary>
/// depiction:<对该方法的说明>
/// </summary>
/// <param name="<参数名称>"><参数说明></param>
/// <returns>
/// <对方法返回值的说明,该说明必须明确说明返回的值代表什么含义>
/// </returns>
/// Writer:<作者中文名>
/// Create Date:<方法创建日期,格式:YYYY-MM-DD>
当然,以上各项并不是必需的,通常情况下只写<对该方法的说明>就可以了,也可以不写。
方法名需能看出它作什么。
别使用会引起误解的名字。
如果名字一目了然,就无需用文档来解释方法的功能了。
一个方法只完成一个任务。
不要把多个任务组合到一个方法中,即使那些任务非常小。
别在程序中使用固定数值,用常量代替。
别用字符串常数,用资源文件。
不要在方法间共享成员变量,如果在几个方法间共享一个成员变量,那就很难知道是哪个方法在什么时候修改了它的值。
必要时使用enum,别用数字或字符串来指示离散值。
要这样:
enum MailType
{
Html,
PlainText,
Attachment
}
void SendMail (string message,MailType mailType)
{
switch ( mailType )
{
case MailType.Html:
// Do something
break;。
}
}
不要这样:
void SendMail (string message, string mailType)
{
switch ( mailType )
{
case "Html":
// Do something
break;。
}
}
别把成员变量声明为public或protected。
都声明为private 而使用public/protected 的Properties,例如:
class cExample
{
private string priOwner;
public string Owner
{
get{return this.priOwner;}
}
}
使用#region来分组相关的方法和属性定义,并且方法中,可以使用空行来分组逻辑上相关的代码行。
项目开发规范
不允许随意定义全局变量。
如果确实需要定义全局变量,应写入开发文档并告知其他人员。
对于定义的公用类和公用方法,请及时写入开发文档,以备其他人查阅;如果需要修改公用类或公用方法,请与原作者协商,并将修改记录写入开发文档。
调用统一的数据库访问方法,保证程序良好的可迁移性。
对于可以复用的类、方法、页面、样式表以及JavaScript脚本,应尽量复用,以减少代码量。
=========================
本规范是一些通用规范加上我个人的一些看法,必有不当之处,望诸位及时指出、不吝赐教为盼。
本规范在项目开发过程中会逐渐完善。
本文来自CSDN博客,转载请标明出处:/usernamegaorn/archive/2007/10/20/1834275.aspx。