C#簡單命名指南
一個好的名字能夠讓你的程式更加好懂,別人一看到這個名字,就能夠猜到你在做什麼。大量好的名字離不開好的命名規範,而一個好的命名規範要做到兩點:
l 合理。即容易被大家接受和使用。從這個意義上來說,好的命名規範不應該太長,它應該讓你花上10分鐘就能看完,寫過幾段代碼就能熟悉。
l 風格一致。即前後一致,例外的情況少。
符合以上兩點的命名規範就是好的,雖然它們具體的規則可能不同。有的時候,命名規範體現了編程思想,比如:對於介面,在.NET中,一般要求以“I”開頭,在Java中沒有這個要求,原因是Java認為介面和抽象類別往往可以轉化,比如:在項目初期,可能定義的是介面,而在後面,可能把它改成抽象類別,如果名稱一致,就避免了名稱的改動。
另外,不同的命名規範也體現了程式發展曆程。比如:匈牙利命名法要求類型首碼,故在C++、VB、PB一般都會大量出現類型首碼,像intAmount, strName等。而現在一般沒有這個要求,原因是:1)有些類型可能會做修改,比如Int16變成Int32。另外對於一些動態語言(Python、JavaScript)來說,其類型是變化的,編譯時間無法確定;2)現在的開發環境更加的友好,即使在開發的時候,你也很容易知道變數的類型(只要滑鼠移上去)。
本文的命名規範主要基於微軟的標準,另外加上實際開發的一些具體經驗。它還在不斷的維護和完善,你可以針對不同項目的要求,做相應的調整。
命名樣式樣式分類
名稱 |
解釋 |
適用環境 |
例子 |
Pascal 大小寫 |
首字母和後面的每個單詞的首字母都大寫;其他字母小寫 |
|
BackColor |
Camel 大小寫 |
首字母小寫,而後面的每個單詞的首字母大寫;其他字母小寫 |
|
backColor |
大寫 |
所有字母都大寫 |
l 縮寫。 l 少於等於2個字元 |
System.IO System.Web.UI |
樣式的選擇
標識符 |
命名格式 |
例子 |
備忘 |
參數、局部變數 |
Camel |
public int GetTypeID(string typeName) { int typeID; … } |
|
Private、Protected的執行個體欄位 |
Camel |
private string redValue; protected bool isOk; |
|
介面控制項 |
Camel |
private Label lblAlarm; |
|
縮寫 |
大寫 |
namespace System.IO { … } |
縮寫必須是被普遍接受、眾所周知的縮寫。 |
除上面的標識符外 |
Pascal |
public System.Drawing.Color BackColor { … } |
|
原則和習慣首要原則
有意義的,描述性的詞語來命名。能夠一眼看出它作什麼。別使用會引起誤解的名字。如果名字一目瞭然,就無需用文檔來解釋方法的功能了
1. 除約定俗成的,別用縮寫。用name, address, salary等代替 nam, addr, sal
2. 除用於迴圈,別使用單個字母的變數象i, n, x 等. 而要使用 index, temp等。
for ( int i = 0; i < count; i++ ){ ...}
其他習慣
l 除了介面控制項外,不要使用類型首碼。比如:使用名稱amount,而不是 intAmount;
l 類:使用名詞、名詞短語命名。比如:public class FileStream;
l 方法:使用動詞、動詞短語開始。比如:CreateUser(), RemoveAt()等;
l 介面:以 I 開始,後面加上名詞、名詞短語、形容詞命名。比如:IDisposable;
l 常量:所有單詞大寫,多個單詞之間用 "_" 隔開。public const string PAGE_TITLE = "Welcome";
l 命名空間:
1. 基本格式:
CompanyName/ProjectName.TechnologyName[.Feature][.Design]
a) CompanyName/ProjectName:公司名、項目名稱或產品名稱;
b) TechnologyName:穩定的、公認的技術名稱或架構層次名稱;
c) [.Feature][.Design]:可選的功能與設計;
例如:
//微軟公司的Web開發中的UI中的Design
namespace Microsoft.Web.UI.Design
//西門子報價項目中商務邏輯層中的專案管理
namespace SiemensQuotation.BusinessRules.ProjectManagement
2. 幾個規則
a) 嵌套的命名空間應當有依賴關係。例如:System.Web.UI.Design 中的類依賴於 System.Web.UI 中的類,而不能相反。
b) 命名空間和類不能使用同樣的名字。例如,命名空間Debug下最好不要又一個類名為Debug。
c) 如果公司名、項目名稱或產品名稱太長的話,可以用縮寫(且全部大寫)。
控制項命名
控制項的名稱中需要加上首碼,之所以這樣做是為了區分介面的控制項和普通的對象,由於介面修改往往非常頻繁,區分開來能使你更快速的找到控制項,從而修改介面。舉一個例子:
介面有10個TextBox、10個Label。一個TextBox對應一個Label,為了完成讀寫,你至少要有20條語句來從控制項進行取、賦值操作,如果有首碼的話,輸入this.txt,你就幾乎馬上能找到這個控制項。反之,如果沒有首碼,由於視窗或頁面對象擁有大量的屬性和變數(>100個),你將花費大量時間來尋找。另外一個TextBox對應一個Label(一個代表值,一個代表名稱),它們往往指同一樣事物,如果有首碼,就很容易區分這兩個控制項。
控制項 |
首碼 |
備忘 |
Label |
lbl |
比如:lblName |
TextBox |
txt |
|
Button |
btn |
|
CheckBox |
chk |
|
RadioButton |
rdo |
|
CheckBoxList |
chklst |
|
RadioButtonList |
rdolst |
|
ListBox |
lst |
|
DropDownList |
ddl |
|
DataGrid |
dg |
|
DataList |
dl |
|
Image |
img |
|
Table |
tbl |
|
Panel |
pnl |
|
LinkButton |
lnkbtn |
|
ImageButton |
imgbtn |
|
Calender |
cld |
|
RequiredFieldValidator |
rfv |
|
CompareValidator |
cv |
|
RangeValidator |
rv |
|
RegularExpressionValidator |
rev |
|
ValidatorSummary |
vs |
|