標籤:
1.目的
為了保證企業編寫出的程式都符合相同的規範,保證一致性、統一性而建立的程式編碼規範。
全 面的編碼通訊協定包含代碼結構的所有方面。雖然開發人員在實現標準時應謹慎,但只要應用了就應該堅持。完成的原始碼應該反映出一致的樣式,就像一個開發人員在 一個會話中編寫代碼一樣。在開始軟體項目時,建立編碼通訊協定以確保項目的所有開發人員協同工作。當軟體項目併入現有的原始碼時,或者在現有軟體系統上執行維 護時,編碼通訊協定應說明如何處理現有的基本代碼。
源 代碼的可讀性對於開發人員對軟體系統的理解程度有直接影響。代碼的可維護性是指為了添加新功能、修改現有功能、修複錯誤或提高效能,可以對軟體系統進行更 改的難易程度。儘管可讀性和可維護性是許多因素的結果,但是軟體開發中有一個特定的方面受所有開發人員的影響,那就是編碼方法。確保開發小組生產出高品質 代碼的最容易方法是建立編碼通訊協定,然後在例行代碼檢查中將執行此標準。
使用一致的編碼方法和好的編程做法來建立高品質代碼在軟體的品質和效能中起重要作用。另外,如果一致地應用正確定義的編碼通訊協定、應用正確的編碼方法並在隨後保持例行代碼檢查,則軟體項目更有可能產生出易於理解和維護的軟體系統。
儘管在整個開發週期內執行代碼檢查的主要目的是識別代碼中的缺陷,但檢查還可以以統一的方式執行編碼通訊協定。只有在整個軟體項目中從開始到完成都遵從編碼通訊協定時,堅持編碼通訊協定才是可行的。在即成事實之後強加編碼通訊協定既不切合實際也是不明智的
2.範圍
適用於企業所有基於.NET平台的軟體開發工作。
3. 規範內容3.1 代碼格式
u 所有的縮排為4個空格,使用VS.NET的預設設定。
u 在代碼中垂直對齊左括弧和右括弧。
if(x==0)
{
Response.Write("使用者編號必須輸入!");
}
不允許以下情況:
if(x==0) {
Response.Write("使用者編號必須輸入!");
}
或者:
if(x==0){ Response.Write("使用者編號必須輸入!");}
u 為了防止在閱讀代碼時不得不滾動原始碼編輯器,每行代碼或注釋在1024*800的顯示頻率下不得超過一顯示屏
u 當一行被分為幾行時,通過將串聯運算子放在每一行的末尾而不是開頭,清楚地表示沒有後面的行是不完整的。
u 每一行上放置的語句避免超過一條。
u 在大多數運算子之前和之後使用空格,這樣做時不會改變代碼的意圖卻可以使代碼容易閱讀。
例:
int j = i + k;
而不應寫為
int j=i+k;
u 將大的複雜代碼節分為較小的、易於理解的模組。
u 編寫 SQL 陳述式時,對於關鍵字使用全部大寫,對於資料庫元素(如表、列和視圖)使用大小寫混合。
u 將每個主要的 SQL 子句放在不同的行上,這樣更容易閱讀和編輯語句,例如: SELECT FirstName, LastName
FROM Customers
WHERE State = ‘WA‘
3.2 注釋(Comment)規範
注釋規範包括:模組(類)注釋規範、類的屬性、方法注釋規範、代碼間注釋
3.2.1. 類注釋規範
模組開始以以下形式書寫模組注釋:
///<summary>
///模組編號:<模組編號,可以引用系統設計中的模組編號>
///作用:<對此類的描述,可以引用系統設計中的描述>
///作者中文名
///編寫日期:<模組建立日期,格式:YYYY-MM-DD>
///</summary>
如果模組有修改,則每次修改必須添加以下注釋:
///<summary>
///Log編號:<Log編號,從1開始一次增加>
///修改描述:<對此修改的描述>
///修改者中文名
///修改日期:<模組修改日期,格式:YYYY-MM-DD>
///</summary>
3.2.2. 類屬性注釋規範
在類的屬性以以下格式編寫屬性注釋:
/// <summary>
///屬性說明
/// </summary>
3.2.3. 方法注釋規範
在類的方法聲明前以以下格式編寫注釋
/// <summary>
/// 說明:<對該方法的說明>
/// </summary>
/// <param name="<參數名稱>"><參數說明></param>
/// <returns>
///<對方法傳回值的說明,該說明必須明確說明返回的值代表什麼含義>
/// </returns>
3.2.4. 代碼間注釋規範
代碼間注釋分為單行注釋和多行注釋:
單行注釋:
//<單行注釋>
多行注釋:
/*多行注釋1
多行注釋2
多行注釋3*/
代碼中遇到語句塊時必須添加註釋(if,for,foreach,……),添加的注釋必須能夠說明此語句塊的作用和實現手段(所用演算法等等)。
3.3 變數(Variable)命名規範3.3.1. 程式檔案(*.cs)中的變數命名規則
程式中變數名稱 = 變數的首碼 +代表變數含意的英文單詞或單詞縮寫。
1. 類別模組級的變數請用“m_”作首碼
public class hello
{
private string m_Name;
private DateTime m_Date;
}
2. 類的屬性所對應的變數,採用屬性名稱前加“m_”首碼的形式
public class hello
{
private string m_Name;
public string Name
{
get
{
return m_Name;
}
}
}
3. 過程級的變數不使用首碼
public class hello
{
void say()
{
string SayWord;
}
}
4. 過程的參數使用“p_”作為參數
public class hello
{
void say(string p_SayWord)
{
}
}
補充說明:
針對異常捕獲過程中的Exception變數命名,在沒有衝突的情況下,統一命名為e;
如果有衝突的情況下,可以重複e,比如:ee。
try
{
//your code
try
{
//code
}
catch(Exception ee)
{
//your code
}
}
catch(Exception e)
{
//your code
}
補充:如果捕獲異常不需要作任何處理,則不需要定義Exception執行個體
例:
try
{
//your code
}
catch( Exception )
{
}
5. 鑒於大多數名稱都是通過串連若干單詞構造的,請使用大小寫混合的格式以簡化它們的閱讀。每個單詞的第一個字母都是大寫.
6. 即使對於可能僅出現在幾個程式碼中的生存期很短的變數,仍然使用有意義的名稱。僅對於短迴圈索引使用單字母變數名,如 i 或 j。
7. 在變數名中使用互補對,如 min/max、begin/end 和 open/close。
8. 不要使用原義數字或原義字串,如 For i = 1 To 7。而是使用命名常數,如 For i = 1 To NUM_DAYS_IN_WEEK 以便於維護和理解。
3.3.2. 控制項命名規則
控制項命名=Web控制項縮寫首碼 + “_” +變數名
控制項 |
縮寫 |
Label |
lbl |
TextBox |
txt |
CheckBox |
chk |
Button |
cmd |
ListBox |
lst |
DropDownList |
drp |
等等 |
|
3.4 常量命名規範
常量名也應當有一定的意義,格式為 NOUN 或 NOUN_VERB。常量名均為大寫,字之間用底線分隔。
例:
private const bool WEB_ENABLEPAGECACHE_DEFAULT = true;
private const int WEB_PAGECACHEEXPIRESINSECONDS_DEFAULT = 3600;
private const bool WEB_ENABLESSL_DEFAULT = false;
註:
變數名和常量名最多可以包含 255 個字元,但是,超過 25 到 30 個字元的名稱比較笨拙。此外,要想取一個有實際意義的名稱,清楚地表達變數或常量的用途,25 或 30 個字元應當足夠了。
3.5 類(Class)命名規範
- 名字應該能夠標識事物的特性。
- 使用名詞或名詞短語命名類。
- 名字盡量不使用縮寫,除非它是眾所周知的。
- 名字可以有兩個或三個單片語成,但通常不應多於三個。
- 在名字中,所有單詞第一個字母大寫。
- 例如 IsSuperUser,包含ID的,ID全部大寫,如CustomerID。
- 少用縮寫。
- 不要使用底線 (_)。
例:
public class FileStream
public class Button
public class String
3.6 介面(Interface)命名規範
和類命名規範相同,唯一區別是,介面在名字前加上“I”首碼。
例:
interface IDBCommand;
interface IButton;
3.7. 方法(Method)命名規範
- 名字應該能夠標識事物的特性。
- 使用動詞或動名詞短語命名類。
- 在名字中,所有單詞第一個字母大寫。
2. 名字盡量不使用縮寫,除非它是眾所周知的。
3. 名字可以有兩個或三個單片語成,但通常不應多於三個。
6. 少用縮寫。
7. 不要使用底線 (_)。
8. 不要在方法中重複類的名稱。例如,如果某個類已命名為 Book,則不要將某個方法稱為 Book.CloseBook,而可以將方法命名為 Book.Close
3.7. 屬性(Attribute)命名規範
- 名字應該能夠標識事物的特性。
- 使用名詞或名詞短語命名屬性。
- 在名字中,所有單詞第一個字母大寫。
- 名字盡量不使用縮寫,除非它是眾所周知的。
- 名字可以有兩個或三個單片語成,但通常不應多於三個。
- 少用縮寫。
- 不要使用底線 (_)。
事件(Event)命名規範
- 1. 在名字中,所有單詞第一個字母大寫。
- 對事件處理常式名稱使用 EventHandler 尾碼.
- 指定兩個名為 sender 和 e 的參數。sender 參數表示引發事件的對象。sender 參數始終是 object 類型的,即使在可以使用更為特定的類型時也如此。與事件相關聯的狀態封裝在名為 e 的事件類別的執行個體中。對 e 參數類型使用適當而特定的事件類別.
- 用 EventArgs 尾碼命名事件參數類.
- 考慮用動詞命名事件。例如,命名正確的事件名稱包括 Clicked、Painting 和 DroppedDown。
- 使用動名詞(動詞的“ing”形式)建立表示事件前的概念的事件名稱,用過去式表示事件後。例如,可以取消的 Close 事件應當具有 Closing 事件和 Closed 事件。不要使用 BeforeXxx/AfterXxx 命名模式。
- 不要在類型的事件聲明上使用首碼或者尾碼。例如,使用 Close,而不要使用 OnClose。
- 通常情況下,對於可以在衍生類別中重寫的事件,應在類型上提供一個受保護的方法(稱為 OnXxx)。此方法只應具有事件參數 e,因為發送方總是類型的執行個體.
例如:
public delegate void MouseEventHandler(object sender, MouseEventArgs e);
3.8. 命名空間(NameSpace)命名規範
- 命名命名空間時的一般性規則是使用公司名稱,後跟技術名稱和可選的功能與設計,如下所示。
CompanyName.TechnologyName[.Feature][.Design]
例如:
Microsoft.Media
Microsoft.Media.Design
- 在名字中,所有單詞第一個字母大寫,並用句點分隔邏輯組件,如
Microsoft.Office.PowerPoint 中所示。
- 不要為命名空間和類使用相同的名稱。例如,不要既提供 Debug 命名空間也提供 Debug 類
C#程式編碼規範 ----轉