天天看點

東軟 C#程式設計規範 zz

第一章 概述

規範制定原則

1 友善代碼的交流和維護。

2 不影響編碼的效率,不與大衆習慣沖突。

3 使代碼更美觀、閱讀更友善。

4 使代碼的邏輯更清晰、更易于了解。

術語定義

Pascal 大小寫

将辨別符的首字母和後面連接配接的每個單詞的首字母都大寫。可以對三字元或更多字元的辨別符使用Pascal 大小寫。例如:BackColor

Camel 大小寫

辨別符的首字母小寫,而每個後面連接配接的單詞的首字母都大寫。例如:backColor

檔案命名組織

1.3.1檔案命名

1 檔案名遵從Pascal命名法,無特殊情況,擴充名小寫。

2 使用統一而又通用的檔案擴充名: C# 類  .cs

1.3.2檔案注釋

1 在每個檔案頭必須包含以下注釋說明

複制  儲存

檔案功能描述隻需簡述,具體詳情在類的注釋中描述。

建立辨別和修改辨別由建立或修改人員的拼音或英文名加日期組成。如:李轶20040408

一天内有多個修改的隻需做一個在注釋說明中做一個修改辨別就夠了。

在所有的代碼修改處加上修改辨別的注釋。

第二章   代碼外觀

2.1   列寬

代碼列寬控制在110字元左右。

2.2   換行

當表達式超出或即将超出規定的列寬,遵循以下規則進行換行

1、在逗号後換行。

2、 在操作符前換行。

3、規則1優先于規則2。

當以上規則會導緻代碼混亂的時候自己采取更靈活的換行規則。

2.3   縮進

縮進應該是每行一個Tab(4個空格),不要在代碼中使用Tab字元。

Visual Studio.Net設定:工具->選項->文本編輯器->C#->制表符->插入空格

2.4   空行

空行是為了将邏輯上相關聯的代碼分塊,以便提高代碼的可閱讀性。

在以下情況下使用兩個空行

1、接口和類的定義之間。

2、枚舉和類的定義之間。

3、類與類的定義之間。        

在以下情況下使用一個空行

1、方法與方法、屬性與屬性之間。

2、方法中變量聲明與語句之間。

3、方法與方法之間。

4、方法中不同的邏輯塊之間。

5、方法中的傳回語句與其他的語句之間。

6、屬性與方法、屬性與字段、方法與字段之間。

7、注釋與它注釋的語句間不空行,但與其他的語句間空一行。

2.5   空格

在以下情況中要使用到空格

1、 關鍵字和左括符 “(” 應該用空格隔開。如

複制  儲存

while (true)

注意在方法名和左括符 “(” 之間不要使用空格,這樣有助于辨認代碼中的方法調用與關鍵字。

2、  多個參數用逗号隔開,每個逗号後都應加一個空格。

3、  除了 . 之外,所有的二進制操作符都應用空格與它們的操作數隔開。一進制操作符、++及--與操作    數間不需要空格。如

複制  儲存

a += c + d;

a = (a + b) / (c * d);

while (d++ == s++)

{

    n++;

}

PrintSize("size is " + size + "\n");

4、 語句中的表達式之間用空格隔開。如

複制  儲存

for (expr1; expr2;expr3)

2.6   括号 - ()

1、 左括号“(” 不要緊靠關鍵字,中間用一個空格隔開。

2、 左括号“(”  與方法名之間不要添加任何空格。

3、 沒有必要的話不要在傳回語句中使用()。如

複制  儲存

if (condition)

   Array.Remove(1);

return 1;

2.7   花括号 - {}

1、 左花括号 “{” 放于關鍵字或方法名的下一行并與之對齊。如

複制  儲存

if (condition)

{

}

public int Add(intx, int y)

{

}

2、左花括号 “{” 要與相應的右花括号 “}”對齊。

3、 通常情況下左花括号 “{”單獨成行,不與任何語句并列一行。

4、 if、while、do語句後一定要使用{},即使{}号中為空或隻有一條語句。如

複制  儲存

if (somevalue == 1)

{

    somevalue = 2;

}

5、 右花括号 “}” 後建議加一個注釋以便于友善的找到與之相應的 {。如

複制  儲存

while (1)

{

    if(valid)

    {

    } // ifvalid

    else

    {

    } // notvalid

} // end forever

第三章 程式注釋

3.4   注釋概述

1、修改代碼時,總是使代碼周圍的注釋保持最新。

2、在每個例程的開始,提供标準的注釋樣本以訓示例程的用途、假設和限制很有幫助。注釋樣本應該是解釋它為什麼存在和可以做什麼的簡短介紹.

3、避免在代碼行的末尾添加注釋;行尾注釋使代碼更難閱讀。不過在批注變量聲明時,行尾注釋是合适的;在這種情況下,将所有行尾注釋在公共制表位處對齊。 

4 、避免雜亂的注釋,如一整行星号。而是應該使用空白将注釋同代碼分開。 

5 、避免在塊注釋的周圍加上印刷框。這樣看起來可能很漂亮,但是難于維護。

6 、在部署釋出之前,移除所有臨時或無關的注釋,以避免在日後的維護工作中産生混亂。

7 、如果需要用注釋來解釋複雜的代碼節,請檢查此代碼以确定是否應該重寫它。盡一切可能不注釋難以了解的代碼,而應該重寫它。盡管一般不應該為了使代碼更簡單以便于人們使用而犧牲性能,但必須保持性能和可維護性之間的平衡。

8 、在編寫注釋時使用完整的句子。注釋應該闡明代碼,而不應該增加多義性。 

9 、在編寫代碼時就注釋,因為以後很可能沒有時間這樣做。另外,如果有機會複查已編寫的代碼,在今天看來很明顯的東西六周以後或許就不明顯了。

10 、避免多餘的或不适當的注釋,如幽默的不主要的備注。

11、 使用注釋來解釋代碼的意圖。它們不應作為代碼的聯機翻譯。 

12、 注釋代碼中不十分明顯的任何内容。

13 、為了防止問題反複出現,對錯誤修複和解決方法代碼總是使用注釋,尤其是在團隊環境中。

14 、對由循環和邏輯分支組成的代碼使用注釋。這些是幫助源代碼讀者的主要方面。 

15 、在整個應用程式中,使用具有一緻的标點和結構的統一樣式來構造注釋。 

16 、用空白将注釋同注釋分隔符分開。在沒有顔色提示的情況下檢視注釋時,這樣做會使注釋很明顯且容易被找到。

17 、在所有的代碼修改處加上修改辨別的注釋。

18 、為了是層次清晰,在閉合的右花括号後注釋該閉合所對應的起點。

複制  儲存

namespaceLangchao.Procument.Web

{

} // namespace Langchao.Procument.Web

3.2   文檔型注釋

該類注釋采用.Net已定義好的Xml标簽來标記,在聲明接口、類、方法、屬性、字段都應該使用該類注釋,以便代碼完成後直接生成代碼文檔,讓别人更好的了解代碼的實作和接口。如

複制  儲存

///<summary>MyMethod is a method in the MyClassclass.

///<para>Here's how you could make a secondparagraph in a description.

///<see cref="System.Console.WriteLine"/>

///for information about output statements.

///</para>

///<seealso cref="MyClass.Main"/>

///</summary>

public static voidMyMethod(int Int1)

{

}

3.3   類c注釋

該類注釋用于

1 不再使用的代碼。

2 臨時測試屏蔽某些代碼。

用法

複制  儲存

計件工序名稱資料

3.4   單行注釋

該類注釋用于

1 方法内的代碼注釋。如變量的聲明、代碼或代碼段的解釋。注釋示例:

複制  儲存

//

// 注釋語句

//

private intnumber;

複制  儲存

// 注釋語句

private intnumber;

2 方法内變量的聲明或花括号後的注釋, 注釋示例:

複制  儲存

if (1 == 1)    // always true

{

    statement;

} // always true

3.5   注釋标簽

标簽 用法 作用
<c>

c>text</c>

text 希望将其訓示為代碼的文本。

為您提供了一種将說明中的文本标記為代碼的方法。使用 <code> 将多行訓示為代碼
<para>

<para>content</para>

content段落文本。

用于諸如 <remarks> 或 <returns> 等标記内,使您得以将結構添加到文本中。
<param>

<param name='name'>description</param>

name 為方法參數名。将此名稱用單引号括起來 (' ')。

應當用于方法聲明的注釋中,以描述方法的一個參數。
<paramref>

<paramref name="name"/>

name

要引用的參數名。将此名稱用雙引号括起來 (" ")。

<paramref> 标記為您提供了一種訓示詞為參數的方法。可以處理 XML 檔案,進而用某種獨特的方法格式化該參數。
<see>

<see cref="member"/>

cref = "member" 對可以通過目前編譯環境進行調用的成員或字段的引用。編譯器檢查到給定代碼元素存在後,将 member 傳遞給輸出 XML 中的元素名。必須将 member 括在雙引号 (" ") 中。

使您得以從文本内指定連結。使用 <seealso> 訓示希望在“請參閱”一節中出現的文本。
<seealso>

<seealso cref="member"/>

cref = "member" 對可以通過目前編譯環境進行調用的成員或字段的引用。編譯器檢查到給定代碼元素存在後,将 member 傳遞給輸出 XML 中的元素名。必須将 member 括在雙引号 (" ") 中

使您得以指定希望在“請參閱”一節中出現的文本。使用 <see> 從文本
<example>

<example>description</example>

description

代碼示例的說明。

使用 <example> 标記可以指定使用方法或其他庫成員的示例。一般情況下,這将涉及到 <code> 标記的使用。
<code>

<code>content</code>

content 為希望将其标記為代碼的文本。

記為您提供了一種将多行訓示為代碼的方法。使用 <c> 訓示應将說明中的文本标記為代碼
<summary>

<summary>description</summary>

此處description 為對象的摘要。

應當用于描述類型成員。使用 <remarks> 以提供有關類型本身的資訊。
<exception>

<exception cref="member">description</exception>

cref = "member" 對可從目前編譯環境中擷取的異常的引用。編譯器檢查到給定異常存在後,将 member 轉換為輸出 XML 中的規範化元素名。必須将 member 括在雙引号 (" ") 中。

description 說明。

<exception> 标記使您可以指定類能夠引發的異常。
<include>

<include file='filename' path='tagpath[@name="id"]' />

filename 包含文檔的檔案名。該檔案名可用路徑加以限定。将 filename 括在單引号中 (' ')。

Tagpath:filename 中指向标記名的标記路徑。将此路徑括在單引号中 (' ')。

name 注釋前邊的标記中的名稱說明符;名稱具有一個 id。

id

位于注釋之前的标記的 id。将此 id 括在雙引号中 (" ")。

<include> 标記使您得以引用描述源代碼中類型和成員的另一檔案中的注釋。這是除了将文檔注釋直接置于源代碼檔案中之外的另一種可選方法。

<include> 标記使用 XML XPath 文法。有關自定義 <include> 使用的方法,請參閱 XPath 文檔。

<list>

<list type="bullet" | "number" | "table">

   <listheader>

      <term>term</term>

      <description>description</description>

   </listheader>

   <item>

      <term>term</term>

      <description>description</description>

   </item>

</list>

term  定義的項,該項将在 text 中定義。

description  目符号清單或編号清單中的項或者 term 的定義。

<listheader> 塊用于定義表或定義清單中的标題行。定義表時,隻需為标題中的項提供一個項。

清單中的每一項用 <item> 塊指定。建立定義清單時,既需要指定 term 也需要指定 text。但是,對于表、項目符号清單或編号清單,隻需為 text 提供一個項。

清單或表所擁有的 <item> 塊數可以根據需要而定。

<permission>

<permission cref="member">description</permission>

cref = "member" 對可以通過目前編譯環境進行調用的成員或字段的引用。編譯器檢查到給定代碼元素存在後,将 member 轉換為輸出 XML 中的規範化元素名。必須将 member 括在雙引号 (" ") 中。

description  成員的通路的說明。

<permission> 标記使您得以将成員的通路記入文檔。System.Security.PermissionSet 使您得以指定對成員的通路。
<remarks>

<remarks>description</remarks>

description 成員的說明。

<remarks> 标記是可以指定有關類或其他類型的概述資訊的位置。<summary> 是可以描述該類型的成員的位置。
<returns>

<returns>description</returns>

description 傳回值的說明。

<returns> 标記應當用于方法聲明的注釋,以描述傳回值。
<value>

<value>property-description</value>

property-description 屬性的說明。

<value> 标記使您得以描述屬性。請注意,當在 Visual Studio .NET 開發環境中通過代碼向導添加屬性時,它将會為新屬性添加 <summary> 标記。然後,應該手動添加 <value> 标記以描述該屬性所表示的值。

第四章 申明

4.1   每行聲明數

一行隻建議作一個聲明,并按字母順序排列。如

複制  儲存

int level;   //推薦

int size;    //推薦

int x, y;    //不推薦

4.2   初始化

建議在變量聲明時就對其做初始化。        

4.3   位置

變量建議置于塊的開始處,不要總是在第一次使用它們的地方做聲明。如

複制  儲存

void MyMethod()

{

    int int1= 0;         // beginning of methodblock

    if(condition)

    {

        intint2 = 0;     // beginning of"if" block

        //...

    }

}

不過也有一個例外

複制  儲存

for (int i =0; i < maxLoops; i++)

{

    //  ...

}

應避免不同層次間的變量重名,如

複制  儲存

int count;

void MyMethod()

{

    if(condition)

    {

        intcount = 0;     // 避免

    }

}

4.4   類和接口的聲明

1 在方法名與其後的左括号間沒有任何空格。

2 左花括号 “{” 出現在聲明的下行并與之對齊,單獨成行。

3 方法間用一個空行隔開。

4.5   字段的聲明

不要使用是 public 或 protected 的執行個體字段。如果避免将字段直接公開給開發人員,可以更輕松地對類進行版本控制,原因是在維護二進制相容性時字段不能被更改為屬性。考慮為字段提供 get 和set 屬性通路器,而不是使它們成為公共的。 get 和 set 屬性通路器中可 執行代碼的存在使得可以進行後續改進,如在使用屬性或者得到屬性更改通知時根據需要建立對象。下面的代碼示例闡釋帶有get 和 set 屬性通路器的私 有執行個體字段的正确使用。 示例:

複制  儲存

public classControl: Component

            {

               privateint handle;

               public  int Handle

               {

                  get

                  {

                    return handle;

                  }

               }

}

第五章 命名規範

5.1   命名概述

名稱應該說明“什麼”而不是“如何”。通過避免使用公開基礎實作(它們會發生改變)的名稱,可以保留簡化複雜性的抽象層。例如,可以使用 GetNextStudent(),而不是 GetNextArrayElement()。 

命名原則是:

選擇正确名稱時的困難可能表明需要進一步分析或定義項的目的。使名稱足夠長以便有一定的意義,并且足夠短以避免冗長。唯一名稱在程式設計上僅用于将各項區分開。表現力強的名稱是為了幫助人們閱讀;是以,提供人們可以了解的名稱是有意義的。不過,請確定選擇的名稱符合适用語言的規則和标準。

以下幾點是推薦的命名方法。

1、避免容易被主觀解釋的難懂的名稱,如方面名 AnalyzeThis(),或者屬性名 xxK8。這樣的名稱會導緻多義性。

2、在類屬性的名稱中包含類名是多餘的,如 Book.BookTitle。而是應該使用 Book.Title。

3、隻要合适,在變量名的末尾或開頭加計算限定符(Avg、Sum、Min、Max、Index)。

4、在變量名中使用互補對,如 min/max、begin/end 和 open/close。 

5、布爾變量名應該包含 Is,這意味着 Yes/No 或 True/False 值,如 fileIsFound。

6、在命名狀态變量時,避免使用諸如 Flag 的術語。狀态變量不同于布爾變量的地方是它可以具有兩個以上的可能值。不是使用 documentFlag,而是使用更具描述性的名稱,如 documentFormatType。 (此項隻供參考)

7、即使對于可能僅出現在幾個代碼行中的生存期很短的變量,仍然使用有意義的名稱。僅對于短循環索引使用單字母變量名,如 i 或 j。 可能的情況下,盡量不要使用原義數字或原義字元串,如

For i = 1 To 7。而是使用命名常數,如 For i = 1 To NUM_DAYS_IN_WEEK 以便于維護和了解。

5.2   大小寫規則

大寫

辨別符中的所有字母都大寫。僅對于由兩個或者更少字母組成的辨別符使用該約定。例如:

複制  儲存

System.IO

System.Web.UI

下表彙總了大寫規則,并提供了不同類型的辨別符的示例。

辨別符 大小寫 示例
Pascal AppDomain
枚舉類型 Pascal ErrorLevel
枚舉值 Pascal FatalError
事件 Pascal ValueChange
異常類 Pascal WebException 注意 總是以 Exception 字尾結尾。
隻讀的靜态字段 Pascal RedValue
接口 Pascal IDisposable 注意 總是以 I 字首開始。
方法 Pascal ToString
命名空間 Pascal System.Drawing
屬性 Pascal BackColor
公共執行個體字段 Pascal RedValue 注意 很少使用。屬性優于使用公共執行個體字段。
受保護的執行個體字段 Camel redValue 注意 很少使用。屬性優于使用受保護的執行個體字段。
私有的執行個體字段 Camel redValue
參數 Camel typeName
方法内的變量 Camel backColor

5.3   縮寫

為了避免混淆和保證跨語言互動操作,請遵循有關區縮寫的使用的下列規則: 

1 不要将縮寫或縮略形式用作辨別符名稱的組成部分。例如,使用 GetWindow,而不要使用 GetWin。 

2 不要使用計算機領域中未被普遍接受的縮寫。 

3 在适當的時候,使用衆所周知的縮寫替換冗長的詞組名稱。例如,用 UI 作為 User Interface 縮

寫,用 OLAP 作為 On-line Analytical Processing 的縮寫。 

4在使用縮寫時,對于超過兩個字元長度的縮寫請使用 Pascal 大小寫或 Camel 大小寫。例如,使用 HtmlButton 或 HTMLButton。但是,應當大寫僅有兩個字元的縮寫,如,System.IO,而不是 System.Io。

5 不要在辨別符或參數名稱中使用縮寫。如果必須使用縮寫,對于由多于兩個字元所組成的縮寫請使用Camel 大小寫,雖然這和單詞的标準縮寫相沖突。

5.4   命名空間

1、命名命名空間時的一般性規則是使用公司名稱,後跟技術名稱和可選的功能與設計,如下所示。

複制  儲存

CompanyName.TechnologyName[.Feature][.Design]

例如:

複制  儲存

namespaceLangchao.Procurement         //浪潮公司的采購單管理系統

namespaceLangchao.Procurement.DataRules   //浪潮公司的采購單管理系統的業務規則子產品

2、命名空間使用Pascal大小寫,用逗号分隔開。

3、TechnologyName 指的是該項目的英文縮寫,或軟體名。

4、命名空間和類不能使用同樣的名字。例如,有一個類被命名為Debug後,就不要再使用Debug作為一個名稱空間名。

5.5   類

1、使用 Pascal 大小寫。

2、用名詞或名詞短語命名類。

3、使用全稱避免縮寫,除非縮寫已是一種公認的約定,如URL、HTML    

4 、不要使用類型字首,如在類名稱上對類使用 C 字首。例如,使用類名稱 FileStream,而不是 

CFileStream。 

5 、不要使用下劃線字元 (_)。 

6 、有時候需要提供以字母 I 開始的類名稱,雖然該類不是接口。隻要 I 是作為類名稱組成部分的整個單詞的第一個字母,這便是适當的。例 如,類名稱 IdentityStore 是适當的。在适當的地方,使用複合單詞命名派生的類。派生類名稱的第二個部分應當是基類的名稱。例如,ApplicationException 對于從名為 Exception 的類派生的類是适當的名稱,原因 ApplicationException 是一種Exception。請在應用該規則時進行合理的判斷。例如,Button 對于 從 Control 派生的類是适當的名稱。盡管按鈕是一種控件,但是将 Control 作為類名稱的一部分将使名稱不必要地加長。

複制  儲存

public classFileStream{}

public classButton{}

public classString{}

5.6   接口

以下規則概述接口的命名指南: 

1、用名詞或名詞短語,或者描述行為的形容詞命名接口。例如,接口名稱 IComponent 使用描述性

名詞。接口名稱 ICustomAttributeProvider 使用名詞短語。名稱 IPersistable 使用形容詞。 

2、使用 Pascal 大小寫。 

3、少用縮寫。 

4、給接口名稱加上字母 I 字首,以訓示該類型為接口。在定義類/接口對(其中類是接口的标準

實作)時使用相似的名稱。兩個名稱的差別應該隻是接口名稱上有字母 I 字首。 

5、不要使用下劃線字元 (_)。 

6、當類是接口的标準執行時,定義這一對類/接口組合就要使用相似的名稱。兩個名稱的不同之處

隻是接口名前有一個I字首。

以下是正确命名的接口的示例。

複制  儲存

public interfaceIServiceProvider

public interfaceIFormatable

以下代碼示例闡釋如何定義 IComponent 接口及其标準實作 Component 類。

複制  儲存

public interfaceIComponent

{

    //Implementation code goes here.

}

public classComponent : IComponent

{

    //Implementation code goes here.

}

5.7   屬性 (Attribute)

應該總是将字尾 Attribute 添加到自定義屬性類。以下是正确命名的屬性類的示例。

複制  儲存

public classObsoleteAttribute

{

}

5.8   枚舉 (Enum)

枚舉 (Enum) 值類型從 Enum 類繼承。以下規則概述枚舉的命名指南: 

1 對于 Enum 類型和值名稱使用 Pascal 大小寫。 

2 少用縮寫。 

3 不要在 Enum 類型名稱上使用 Enum 字尾。 

4 對大多數 Enum 類型使用單數名稱,但是對作為位域的 Enum 類型使用複數名稱。

5 總是将 FlagsAttribute 添加到位域 Enum 類型。 

5.9   參數

以下規則概述參數的命名指南: 

1、使用描述性參數名稱。參數名稱應當具有足夠的描述性,以便參數的名稱及其類型可用于在大多數情況下确定它的含義。 

2、對參數名稱使用 Camel 大小寫。 

3、 使用描述參數的含義的名稱,而不要使用描述參數的類型的名稱。開發工具将提供有關參數的類型的有意義的資訊。是以, 通過描述意義,可以更好地使用參數的名稱。少用基于類型的參數名稱,僅在适合使用它們的地方使用它們。 

4、不要使用保留的參數。保留的參數是專用參數,如果需要,可以在未來的版本中公開它們。相反,如果在類庫的未來版本中需要更多的資料,請為方法添加新的重載。 

5、不要給參數名稱加匈牙利語類型表示法的字首。 

以下是正确命名的參數的示例。

複制  儲存

Type GetType(string typeName)

string Format(stringformat, args() As object)

5.10 方法

以下規則概述方法的命名指南: 

1 使用動詞或動詞短語命名方法。 

2 使用 Pascal 大小寫。 

3 以下是正确命名的方法的執行個體。

複制  儲存

RemoveAll()

GetCharArray()

Invoke()

5.11 屬性 (property)

以下規則概述屬性的命名指南: 

1 使用名詞或名詞短語命名屬性。 

2 使用 Pascal 大小寫。 

3 不要使用匈牙利語表示法。 

4 考慮用與屬性的基礎類型相同的名稱建立屬性。例如,如果聲明名為 Color 的屬性,則屬性的類型同樣應該是 Color。請參閱本主題中後面的示例。 

以下代碼示例闡釋正确的屬性命名。

複制  儲存

public classSampleClass

{

    publicColor BackColor

    {

        // Codefor Get and Set accessors goes here.

    }

}

以下代碼示例闡釋提供其名稱與類型相同的屬性。

複制  儲存

public enum Color

{

    // Insertcode for Enum here.

}

public classControl

{

    publicColor Color

    {

        get

        {

            //Insert code here.

        }

        set

        {

            //Insert code here.

        }

    }

}

以下代碼示例不正确,原因是 Color 屬性是 Integer 類型的。

複制  儲存

public enum Color

{

    // Insertcode for Enum here.

}

public classControl

{

    public intColor

    {

        //Insert code here

    }

}

在不正确的示例中,不可能引用 Color 枚舉的成員。Color.Xxx 将被解釋為通路一個成員,該成員首先擷取 Color 屬性( C# 中為 int 類型)的值,然後再通路該值的某個成員(該成員必須是 System.Int32 的執行個體成員)。

5.12 事件

以下規則概述事件的命名指南: 

1、對事件處理程式名稱使用 EventHandler 字尾。 

2、指定兩個名為 sender 和 e 的參數。sender 參數表示引發事件的對象。sender 參數始終是object 類型的,即使 在可以使用更為特定的類型時也如此。與事件相關聯的狀态封裝在名為 e 的事件類的執行個體中。對 e 參數類型使用适當而特定的事件類。 

3、用 EventArgs 字尾命名事件參數類。 

4、考慮用動詞命名事件。 

5、使用動名詞(動詞的“ing”形式)建立表示事件前的概念的事件名稱,用過去式表示事件後。例如,可以取消的 Close 事件應當具有 Closing 事件和 Closed 事件。不要使用eforeXxx/AfterXxx 命名模式。 

6、不要在類型的事件聲明上使用字首或者字尾。例如,使用 Close,而不要使用 OnClose。 

7、通常情況下,對于可以在派生類中重寫的事件,應在類型上提供一個受保護的方法(稱為OnXxx)。此方法隻應具有事件參數 e,因為發送方總是類型的執行個體。 

以下示例闡釋具有适當名稱和參數的事件處理程式。

複制  儲存

public delegate voidMouseEventHandler(object sender, MouseEventArgs e);

以下示例闡釋正确命名的事件參數類。

複制  儲存

public classMouseEventArgs : EventArgs

{

    int x;

    int y;

    publicMouseEventArgs(int x, int y)

    {

        this.x= x;

        this.y= y;

    }

    public intX

    {

        get

        {

            returnx;

        }

    }

    public intY

    {

        get

        {

            returny;

        }

    }

}

5.13 常量 (const)

以下規則概述常量的命名指南: 

所有單詞大寫,多個單詞之間用 "_" 隔開。 如

複制  儲存

public const stringPAGE_TITLE = "Welcome";

5.14 字段

以下規則概述字段的命名指南: 

1、private、protected 使用 Camel 大小寫。

2、public 使用 Pascal 大小寫。

3、拼寫出字段名稱中使用的所有單詞。僅在開發人員一般都能了解時使用縮寫。字段名稱不

要使用大寫字母。下面是正确命名的字段的示例。

複制  儲存

class SampleClass

{

    stringurl;

    stringdestinationUrl;

}

4、不要對字段名使用匈牙利語表示法。好的名稱描述語義,而非類型。 

5、不要對字段名或靜态字段名應用字首。具體說來,不要對字段名稱應用字首來區分靜态和非靜态字段。例如,應用 g_ 或 s_ 字首是不正确的。 

6、對預定義對象執行個體使用公共靜态隻讀字段。如果存在對象的預定義執行個體,則将它們聲明為

對象本身的公共靜态隻讀字段。使用 Pascal 大小寫,原因是字段是公共的。下面的代碼

示例闡釋公共靜态隻讀字段的正确使用。

複制  儲存

public structColor

{

    public staticreadonly Color Red = new Color(0x0000FF);

    publicColor(int rgb)

    {

        //Insert code here

    }

    publicColor(byte r, byte g, byte b)

    {

        //Insert code here.

    }

    public byteRedValue

    {

        get

        {

            returnColor;

        }

    }

}

5.15 靜态字段

以下規則概述靜态字段的命名指南: 

1、使用名詞、名詞短語或者名詞的縮寫命名靜态字段。 

2、使用 Pascal 大小寫。 

3、對靜态字段名稱使用匈牙利語表示法字首。 

4、建議盡可能使用靜态屬性而不是公共靜态字段。 

5.16 集合

集合是一組組合在一起的類似的類型化對象,如哈希表、查詢、堆棧、字典和清單,集合的命名建議用複數。

5.17 措詞

避免使用與常用的 .NET 架構命名空間重複的類名稱。例如,不要将以下任何名稱用作類名稱:

System、Collections、Forms 或 UI。有關 .NET 架構命名空間的清單,請參閱類庫。

另外,避免使用和以下關鍵字沖突的辨別符。

AddHandler AddressOf Alias And Ansi As Assembly Auto Base Boolean ByRef ByteByVal Call Case Catch CBool CByte Cchar CDate CDec CDbl Char Cint Class CLngCObj Const Cshort CSng CStr CType Date Decimal Declare Default Delegate Dim DoDouble Each Else ElseIf End Enum Erase Error Event Exit ExternalSource FalseFinalize Finally Float For Friend Function Get GetType Goto Handles IfImplements Imports In Inherits Integer Interface Is Let Lib Like Long Loop MeMod Module MustInherit MustOverride MyBase MyClass Namespace New Next NotNothing NotInheritable NotOverridable Object On Option Optional Or OverloadsOverridable Overrides ParamArray Preserve Private Property Protected PublicRaiseEvent ReadOnly ReDim Region REM RemoveHandler Resume Return Select Set ShadowsShared Short Single Static Step Stop String Structure Sub SyncLock Then ThrowTo True Try TypeOf Unicode Until volatile When While With WithEvents WriteOnlyXor Eval extends instanceof package var

第六章 語句

6.1   每行一個語句

每行最多包含一個語句。如

複制  儲存

a++;       //推薦

b--;       //推薦

a++;b--;  //不推薦

6.2 複合語句

複合語句是指包含"父語句{子語句;子語句;}"的語句,使用複合語句應遵循以下幾點

1 子語句要縮進。

2 左花括号“{” 在複合語句父語句的下一行并與之對齊,單獨成行。

3 即使隻有一條子語句要不要省略花括号“ {}”。 如

複制  儲存

while (d++ == s++)

{

    n++;

}

6.3 return 語句

return語句中不使用括号,除非它能使傳回值更加清晰。如

複制  儲存

return;

return myDisk.size();

return (size ? size :defaultSize);

6.4 if、 if-else、if else-if 語句 

if、 if-else、if else-if 語句使用格式

複制  儲存

if (condition)

{

    statements;

}

if (condition)

{

    statements;

}

else

{

    statements;

}

if (condition)

{

    statements;

}

else if(condition)

{

    statements;

}

else

{

    statements;

}

6.4   for、foreach 語句

for 語句使用格式

複制  儲存

for (initialization;condition; update)

{

    statements;

}

空的 for 語句(所有的操作都在initialization、condition 或 update中實作)使用格式

複制  儲存

for (initialization;condition; update);    // update userid

foreach 語句使用格式

複制  儲存

foreach (objectobj in array)

{

    statements;

}

注意 

1在循環過程中不要修改循環計數器。

2對每個空循環體給出确認性注釋。

6.5 while 語句

while 語句使用格式

複制  儲存

while (condition)

{

    statements;

}

空的 while 語句使用格式

複制  儲存

while (condition);

6.7.       do - while 語句

do - while 語句使用格式

複制  儲存

do

{

    statements;

} while (condition);

6.8.      switch - case 語句

switch - case  語句使用格式

複制  儲存

switch (condition)

{

case 1:

    statements;

    break;

case 2:

    statements;

    break;

default:

    statements;

    break;

}

注意:

1、語句switch中的每個case各占一行。

2、語句switch中的case按字母順序排列。

3、為所有switch語句提供default分支。 

4、所有的非空 case 語句必須用 break; 語句結束。

6.9. try - catch 語句      

try - catch  語句使用格式

複制  儲存

try

{

    statements;

}

catch (ExceptionClasse)

{

    statements;

}

finally

{

    statements;

}

6.10.   using 塊語句      

using 塊語句使用格式

複制  儲存

using (object)

{

    statements;

}

6.11.   goto 語句      

goto 語句使用格式

複制  儲存

goto Label1:

    statements;

Lable1:

    statements;

第七章 控件命名規則

7.1 命名方法

控件名簡寫+英文描述,英文描述首字母大寫

7.2   主要控件名簡寫對照表

控件名 簡寫 控件名 簡寫
Label lbl TextBox txt
Button btn LinkButton lnkbtn
ImageButton imgbtn DropDownList ddl
ListBox lst DataGrid dg
DataList dl CheckBox chk
CheckBoxList chkls RadioButton rdo
RadioButtonList rdolt Image img
Panel pnl Calender cld
AdRotator ar Table tbl
RequiredFieldValidator rfv CompareValidator cv
RangeValidator rv RegularExpressionValidator rev
ValidatorSummary vs CrystalReportViewer rptvew

第八章 其他

8.1 表達式

1 避免在表達式中用指派語句

3 避免對浮點類型做等于或不等于判斷 

8.2 類型轉換

1盡量避免強制類型轉換。

2如果不得不做類型轉換,盡量用顯式方式。

附錄一: 匈牙利命名法

匈牙利命名法是一名匈牙利程式員發明的,而且他在微軟工作了多年。此命名法就是通過微軟的各種産品和文檔傳出來的。多數有經驗的程式員,不管他們用的是哪門兒語言,都或多或少在使用它。

這種命名法的基本原則是:

變量名=屬性+類型+對象描述

即一個變量名是由三部分資訊組成,這樣,程式員很容易了解變量的類型、用途,而且便于記憶。

下邊是一些推薦使用的規則例子,你可以挑選使用,也可以根據個人喜好作些修改再用之。

⑴屬性部分:

全局變量: g_

常量 : c_

類成員變量: m_

⑵類型部分:

指針: p

句柄: h

布爾型: b

浮點型: f 

無符号: u

⑶描述部分:

初始化: Init

臨時變量: Tmp

目的對象: Dst

源對象: Src

視窗: Wnd 

下邊舉例說明:

hwnd: h表示句柄,wnd表示視窗,合起來為“視窗句柄”。

m_bFlag: m表示成員變量,b表示布爾,合起來為:“某個類的成員變量,布爾型,是一個狀态标志”。

下一篇: part1