· 避免使用大文件。如果一个文件里的代码超过300~400行,必须考虑将代码分开到不同类中。
· 避免写太长的方法。一个典型的方法代码在1~25行之间。如果一个方法发代码超过25行,应该考虑将其分解为不同的方法。
· 方法名需能看出它作什么。别使用会引起误解的名字。如果名字一目了然,就无需用文档来解释方法的功能了。
好:
void SavePhoneNumber ( string phoneNumber )
{
// Save the phone number.
}
不好:
// This method will save the phone number.
void SaveData ( string phoneNumber )
{
// Save the phone number.
}
· 一个方法只完成一个任务。不要把多个任务组合到一个方法中,即使那些任务非常小。
好:
// Save the address.
SaveAddress ( address );
// Send an email to the supervisor to inform that the address is updated.
SendEmail ( address, email );
void SaveAddress ( string address )
{
// Save the address.
// ...
}
void SendEmail ( string address, string email )
{
// Send an email to inform the supervisor that the address is changed.
// ...
}
不好:
// Save address and send an email to the supervisor to inform that the address is updated.
SaveAddress ( address, email );
void SaveAddress ( string address, string email )
{
// Job 1.
// Save the address.
// ...
// Job 2.
// Send an email to inform the supervisor that the address is changed.
// ...
}
· 使用C# 或 VB.NET的特有类型,而不是System命名空间中定义的别名类型。
好:
int age;
string name;
object contactInfo;
不好:
Int16 age;
String name;
Object contactInfo;
· 别在程序中使用固定数值,用常量代替。
· 别用字符串常数。用资源文件。
· 避免使用很多成员变量。声明局部变量,并传递给方法。不要在方法间共享成员变量。如果在几个方法间共享一个成员变量,那就很难知道是哪个方法在什么时候修改了它的值。
· 必要时使用enum 。别用数字或字符串来指示离散值。
好:
enum MailType
{
Html,
PlainText,
Attachment
}
void SendMail (string message, MailType mailType)
{
switch ( mailType )
{
case MailType.Html:
// Do something
break;
case MailType.PlainText:
// Do something
break;
case MailType.Attachment:
// Do something
break;
default:
// Do something
break;
}
}
不好:
void SendMail (string message, string mailType)
{
switch ( mailType )
{
case "Html":
// Do something
break;
case "PlainText":
// Do something
break;
case "Attachment":
// Do something
break;
default:
// Do something
break;
}
}
· 别把成员变量声明为 public 或 protected。都声明为 private 而使用 public/protected 的Properties.
· 不在代码中使用具体的路径和驱动器名。使用相对路径,并使路径可编程。
· 永远别设想你的代码是在“C:”盘运行。你不会知道,一些用户在网络或“Z:”盘运行程序。
· 应用程序启动时作些“自检”并确保所需文件和附件在指定的位置。必要时检查数据库连接。出现任何问题给用户一个友好的提示。
· 如果需要的配置文件找不到,应用程序需能自己创建使用默认值的一份。
· 如果在配置文件中发现错误值,应用程序要抛出错误,给出提示消息告诉用户正确值。
· 错误消息需能帮助用户解决问题。永远别用象"应用程序出错", "发现一个错误" 等错误消息。而应给出象 "更新数据库失败。请确保登陆id和密码正确。" 的具体消息。
· 显示错误消息时,除了说哪里错了,还应提示用户如何解决问题。不要用象 "更新数据库失败。"这样的,要提示用户怎么做:"更新数据库失败。请确保登陆id和密码正确。"
· 显示给用户的消息要简短而友好。但要把所有可能的信息都记录下来,以助诊断问题。
注释
· 别每行代码,每个声明的变量都做注释。
· 在需要的地方注释。可读性强的代码需要很少的注释。如果所有的变量和方法的命名都很有意义,会使代码可读性很强并无需太多注释。
· 行数不多的注释会使代码看起来优雅。但如果代码不清晰,可读性差,那就糟糕。
· 如果应为某种原因使用了复杂艰涩的原理,为程序配备良好的文档和重分的注释。
· 对一个数值变量采用不是0,-1等的数值初始化,给出选择该值的理由。
· 简言之,要写清晰,可读的代码以致无须什么注释就能理解。
· 对注释做拼写检查,保证语法和标点符号的正确使用。
数据类型
|
数据类型简写
|
标准命名举例
|
Array
|
arr
|
arrShoppingList
|
Boolean | bln | blnIsPostBack |
Byte | byt | bytPixelValue |
Char | chr | chrDelimiter |
DateTime | dtm | dtmStartDate |
Decimal | dec | decAverageHeight |
Double | dbl | dblSizeofUniverse |
Integer | int | intRowCounter |
Long |
lng
|
lngBillGatesIncome
|
Object | obj | objReturnValue |
Short | shr | shrAverage |
Single | sng | sngMaximum |
String |
str
| strFirstName |
控件类型 | 缩写 | 示例 |
Animated button | ani | aniMailBox |
Button | btn | |
Check box | chk | chkReadOnly |
ColorDialog | clrdlg | |
Combobox,drop-down list box | cbo | cboEnglish |
Communications | com | comFax |
ContextMenu | ctxmnu | |
Control(used within procedures when the specific type is unknown) | ctr | ctrCurrent |
CrystalReportViewer | crvw | |
Data | dat | datBiblio |
Data grid | dgd | dgdTitles |
Data list | dbl | dblPublisher |
Data repeater | drp | drpLocation |
Data-bound combo box | dbcbo | dbcboLanguage |
Data-bound grid | dbgrd | dbgrdQueryResult |
Data-bound list box | dblst | dblstJobType |
Datetime picker | dtp | dtpPublished |
Directory list box | dir | dirSource |
DomainUpDown | dupd | |
Drive list box | drv | drvTarget |
ErrorProvider | err | |
File list box | fil | filSource |
Flat scroll bar | fsb | fsbMove |
FontDialog | fntdlg | |
Form | frm | frmEntry |
Frame | fra | fraLanguage |
Gauge | gau | gauStatus |
Graph | gra | graRevenue |
Grid | grd | grdPrices |
GroupBox | grp | |
HelpProvider | hlp | |
Hierarchical flexgrid | flex | flexOrders |
HScroll bar | hsb | hsbVolume |
Image | img | imgIcon |
Image combo | imgcbo | imgcboProduct |
ImageList | ils | ilsAllIcons |
Label | lbl | lblHelpMessage |
Line | lin | linVertical |
LinkLabel | lnk | |
List box | lst | lstPolicyCodes |
ListView | lvw | lvwHeadings |
MAPI message | mpm | mpmSentMessage |
MAPI session | mps | mpsSession |
MCI | mci | mciVideo |
Menu | mnu | mnuFileOpen |
Month view | mvw | mvwPeriod |
MonthCalendar | mcl | |
MS Chart | ch | chSalesbyRegion |
MS Flex grid | msg | msgClients |
MS Tab | mst | mstFirst |
NotifyIcon | nti | |
NumericUpDown | nupd | |
OLE container | ole | oleWorksheet |
OpenFileDialog | ofdlg | |
PageSetUpDialog | psdlg | |
Picture box | pic | picVGA |
Picture clip | clp | clpToolbar |
PrintDocument | prndoc | |
PrintPreviewControl | ppctl | |
PrintPreviewDialog | ppdlg | |
ProgressBar | prg | prgLoadFile |
RadioButton | rbtn | |
Remote Data | rd | rdTitles |
RichTextBox | rtf | rtfReport |
SaveFileDialog | sfdlg | |
Shape | shp | shpCircle |
Slider | sld | sldScale |
Spin | spn | spnPages |
Splitter | spt | |
StatusBar | sta | staDateTime |
SysInfo | sys | sysMonitor |
TabContrl | tab | |
TabStrip | tab | tabOptions |
Text box | txt | txtLastName |
Timer | tmr | tmrAlarm |
Toolbar | tlb | tlbActions |
TrackBar | trb | |
TreeView | tre | treOrganization |
UpDown | upd | updDirection |
VScroll bar | vsb | vsbRate |
ADO.NET 命名规范
数据类型 | 数据类型简写 | 标准命名举例 |
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 |
数据类型 | 数据类型简写 | 标准命名举例 |
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 |
数据类型 | 数据类型简写 | 标准命名举例 |
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 |