1、 ASP.net/C# 编码规范
1.1 命名规范
以下对本节使用的名词进行说明。
Pascal | 所有单词第一个字母大写,其他字母小写。 例如: public void GetUserNameByGuid() |
Camel | 除了第一个单词,所有单词第一个字母大写,其他字母小写。 例如: string userName |
Hungarian | 对象类型(小写) + 功能名称(大写,可以无此段) + 操作对象(大写)。 例如: <asp:Label ID=”lblUserName” /> |
命名规范的具体要求详见表。
项 | 编码形式 | 相关例子 | 注释 |
文件 | Pascal | DatabaseConnector | 使用名词来描述类 |
类 | Pascal | DatabaseConnector | 类的名称应该与定义它们的文件的名称匹配 |
接口 | Pascal | IDatabaseConnector | 接口名称以一个字母 I 开头 |
方法 | Pascal | CalculateBalance | 使用动词来描述方法 |
私有和受保护的实例字段 | camel | private float accountBalance |
|
公共实例字段 | Pascal | CustomerName |
|
私有和受保护的类字段 | camel | protected static int numberOfAccounts |
|
公共类字段 | Pascal | public static bool HasGoodCredit |
|
static final | 全部大写 | public static final decimal MINNUMBALANCE = 100 |
|
局部变量 | camel | string accountNumber = FindAccountByCustomerName(customerName) |
|
循环计数 | 全部小写 | int i =0; while(i <10) {i ++;} |
|
参数 | camel | GetCurrentBalance(string accountNumber ) |
|
属性 | Pascal | public string AccountNumber {get {return accountNumber;}} |
|
控件 id,name | Hungarian | <asp:TextBox ID=”tbInfoTitle ” Name=”tbInfoTitle ”></ asp:TextBox > | 对象类型名缩写见 控件匈牙利命名缩写表 |
命名空间 | Pascal | namespace DataLayer |
|
单元测试方法 | Pascal | TestFindAllCustomers | 单元测试名称以单词 Test 开头。 |
解决方案 | Pascal | NorthWindTrader |
|
项目 | Pascal | DataLayer |
|
控件匈牙利命名缩写表。
标准控件 | |
Button | btn |
CheckBox | chk |
CheckedListBox | ckl |
ComboBox | cmb |
DateTimePicker | dtp |
Label | lbl |
LinkLabel | llb |
ListBox | lst |
ListView | lvw |
MaskedTextBox | mtx |
MonthCalendar | cdr |
NotifyIcon | icn |
NumeircUpDown | nud |
PictureBox | pic |
ProgressBar | prg |
RadioButton | rdo |
RichTextBox | rtx |
TextBox | txt |
ToolTip | tip |
TreeView | tvw |
WebBrowser | wbs |
容器控件 | |
FlowLayoutPanel | flp |
GroupBox | grp |
Panel | pnl |
SplitContainer | spl |
TabControl | tab |
TableLayoutPanel | tlp |
菜单和工具栏 | |
ContextMenuStrip | cms |
MenuStrip | mns |
StatusStrip | ssr |
ToolStrip | tsr |
ToolStripContainer | tsc |
数据 | |
DataSet | dts |
DataGridView | dgv |
BindingSource | bds |
BindingNavigator | bdn |
ReportViewer | rpv |
Repeater | rpt |
对话框 | |
ColorDialog | cld |
FolderBrowserDialog | fbd |
FontDialog | fnd |
OpenFileDialog | ofd |
SaveFileDialog | sfd |
组件 | |
BackgroundWorker | bgw |
DirectoryEntry | dre |
DirectorySearcher | drs |
ErrorProvider | err |
EventLog | evl |
FileSystemWatcher | fsw |
HelpProvider | hlp |
ImageList | img |
MessageQueue | msq |
PerformanceCounter | pfc |
Process | prc |
SerialPort | spt |
ServiceController | scl |
Timer | tmr |
印刷 | |
PageSetupDialog | psd |
PrintDialog | prd |
PrintDocument | pdc |
PrintPreviewControl | prv |
PrintPreviewDialog | ppd |
水晶报表 | |
CrystalReportViewer | crv |
ReportDocument | rpd |
其他 | |
DomainUpDown | dud |
HScrollBar | hsc |
PropertyGrid | prg |
Splitter | spl |
TrackBar | trb |
VScrollBar | vsc |
1.2 注释规范
1 、函数、属性、类等注释
请使用 /// 三斜线注释,这种注释是基于 XML 的,不仅能导出 XML 制作帮助文档,而且在各个函数、属性、类等的使用中,编辑环境会自动带出注释,方便你的开发。以 protected , protected Internal , public 声明的定义注释请都以这样命名方法。
类型 | 相关例子 | 说明 |
文档注释 | /// <summary> /// This class represents a bank account /// </summary> | 用于文档类和方法 |
行末注释 | int myCount = 0; // Keep track of how many times ... | 用于描述某些含义不太清晰的事物的目的 |
单行注释 | // Here is where we gather account data | 用于描述后续事物或者代码块的目的 |
多行注释 | /* Here is where we gather account data */ | 用于在代码块处进行注释,或者用于描述后续多行代码的目的 |
2 、逻辑点注释
在我们认为逻辑性较强的地方加入注释,说明这段程序的逻辑是怎样的,以方便我们自己后来的理解以及其他人的理解,并且这样还可以在一定程度上排除 BUG 。在注释中写明我们的逻辑思想,对照程序,判断程序是否符合我们的初衷,如果不是,则我们应该仔细思考要修改的是注释还是程序了 …
1.3 代码可阅读性
1 、注意运算符的优先级,我们应该尽量使用括号明确表达式的操作顺序,避免使用默认优先级,给我们以及维护人带来困扰。
2 、避免使用不易理解的数字,用有意义的标识来替代(枚举和常量),例如:
if(productType == 0)
…
else if (productType == 1)
…
以上为不合格的做法,以下为推荐使用的方法:
if(productType == ProductType.CD )
…
else if (productType == ProductType.DVD )
…
1.4 格式
空行与空格 :尽管编译器可以忽略空行与空格,但是空行与空格可以将不同逻辑的代码单元分离,从而提高代码的可读性。
在下述几种情况下应该使用一个空行:
l 方法之间
l 声明和语句之间
l 代码的逻辑段之间
l 单行或者多行注释之前
在下述几种情况下应该使用一个空格:
l 带圆括号的关键字之后
l 参数列表的逗号之后
l 数据操作符的前后
l 在for语句中,用于将语句的3个逻辑段分开
以上格式可以在 Visual Studio 中使用 ctrl+k , ctrl+d 自动排版。
1.5 解决方案和项目组织
每个解决方案都应该拥有下述项目:
l 业务项目(business project)仅存放业务项目。
l 数据项目(data project)处理数据库和其他用于检索或者更新数据目的的遗留系统的访问。
l 表示项目(presentiation project)处理使用系统的终端用户所需的所有视图。
l 测试项目(test project)存放应用程序所有的单元测试。