1. 程式人生 > >東軟C#程式設計規範

東軟C#程式設計規範

C#程式設計規範

  Version 2.0
目錄

第一章 概述

 1 方便程式碼的交流和維護。

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

   3 使程式碼更美觀、閱讀更方便。

   4 使程式碼的邏輯更清晰、更易於理解。

術語定義

      將識別符號的首字母和後面連線的每個單詞的首字母都大寫。可以對三字元或更多字元的識別符號使用Pascal 大小寫。例如:

              BackColor

Camel 大小寫

識別符號的首字母小寫,而每個後面連線的單詞的首字母都大寫。例如:

                backColor

1.3.1檔案命名

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

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

1.3.2檔案註釋

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

            /*----------------------------------------------------------------

            // Copyright (C) 2004 東軟集團有限公司

            // 版權所有。

            //

            // 檔名:

            //

檔案功能描述:

            //

            //

            // 建立標識:

            //

            // 修改標識:

           // 修改描述:

            //

            // 修改標識:

            // 修改描述:

//----------------------------------------------------------------*/

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

建立標識修改標識由建立或修改人員的拼音或英文名加日期組成。如:

李軼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)

return1 

2.7   花括號 - {}

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

             if (condition)

             {

             }

             public int Add(int x, int y)

{

 }

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

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

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

             if (somevalue == 1)

             {

                 somevalue = 2;

             }

5、 右花括號 “}” 後建議加一個註釋以便於方便的找到與之相應的 {。如

               while  (1)

               {

                   if  (valid)

                   {

                   } // if valid

                   else

                   {

                   } // not valid

                } // 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

{

} // namespaceLangchao.Procument.Web

3.2   文件型註釋

 該類註釋採用.Net已定義好的Xml標籤來標記,在宣告介面、類、方法、屬性、欄位都應該使用該類註釋,以便程式碼完成後直接生成程式碼文件,讓別人更好的瞭解程式碼的實現和介面。如

///<summary>MyMethod is amethod in the MyClass class.

///<para>Here's how youcould make a second paragraph in a description.

///<seecref="System.Console.WriteLine"/>

///for information about outputstatements.

///</para>

            ///<seealsocref="MyClass.Main"/>

            ///</summary>

  public static void MyMethod(int Int1)

{

           }

3.3   類c註釋

      該類註釋用於

           1 不再使用的程式碼。

           2 臨時測試遮蔽某些程式碼。

       用法

   /*

[修改標識]

[修改原因]

. . . (the source code )

*/

3.4   單行註釋

      該類註釋用於

1 方法內的程式碼註釋。如變數的宣告、程式碼或程式碼段的解釋。註釋示例:

         //

// 註釋語句

         //

        private int number;

        // 註釋語句

        private int number;

          2 方法內變數的宣告或花括號後的註釋, 註釋示例:

if ( 1 == 1)    // always true

               {   

                  statement;

                 } // always true

3.5   註釋標籤

標籤

用法

作用

<c>

c>text</c>

text 希望將其指示為程式碼的文字。

為您提供了一種將說明中的文字標記為程式碼的方法。使用 <code> 將多行指示為程式碼

<para>

<para>content</para>

content段落文字。

<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> 標記以描述該屬性所表示的值。


第四章 申明

一行只建議作一個宣告,並按字母順序排列。如

          int level;   //推薦

          int size;    //推薦

          int x, y;    //不推薦

      建議在變數宣告時就對其做初始化。       

4.3  位置

      變數建議置於塊的開始處,不要總是在第一次使用它們的地方做宣告。如

         void MyMethod()

          {

              intint1 = 0;         // beginning of methodblock

if (condition)

{

                  int int2 = 0;     // beginning of "if" block

          ...

              }

          }

       不過也有一個例外

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

{

                   ...

                }

       應避免不同層次間的變數重名

int count;

            ...

void MyMethod()

{

                if (condition)

                {

                    int count = 0;     // 避免

                     ...

                 }

                 ...

}

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

      2左花括號 “{” 出現在宣告的下行並與之對齊,單獨成行。

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

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

publicclass Control: Component

{

   private int handle;

   public  int Handle

   {

      get

      {

         return handle;

}

   }

}

名稱應該說明“什麼”而不是“如何”。通過避免使用公開基礎實現(它們會發生改變)的名稱,可以保留簡化複雜性的抽象層。例如,可以使用 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。而是使用命名常數,如 Fori = 1 To NUM_DAYS_IN_WEEK 以便於維護和理解。

大寫

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

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             //浪潮公司的採購單管理系統

         namespace Langchao.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 class FileStream

            public class Button

public class String

5.6   介面

      以下規則概述介面的命名指南:

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

名詞。介面名稱 ICustomAttributeProvider 使用名詞短語。名稱IPersistable 使用形容詞。

2、使用 Pascal 大小寫。

      3、少用縮寫。

4、給介面名稱加上字母 I 字首,以指示該型別為介面。在定義類/介面對(其中類是介面的標準

實現)時使用相似的名稱。兩個名稱的區別應該只是介面名稱上有字母 I 字首。

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

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

只是介面名前有一個I字首。

          以下是正確命名的介面的示例。

                publicinterface IServiceProvider

                public interface IFormatable

          以下程式碼示例闡釋如何定義 IComponent 介面及其標準實現Component 類。

               publicinterface IComponent

               {

                   //Implementation code goes here.

               }

               public classComponent: IComponent

               {

                   //Implementation code goes here.

}

應該總是將字尾Attribute 新增到自定義屬性類。以下是正確命名的屬性類的示例。

public classObsoleteAttribute

          {

}  

       列舉 (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(stringtypeName)

string Format(string format,args() As object)

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

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

          2 使用 Pascal 大小寫。

           3 以下是正確命名的方法的例項。

              RemoveAll()

              GetCharArray()

Invoke()

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

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

           2 使用 Pascal 大小寫。

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

4考慮用與屬性的基礎型別相同的名稱建立屬性。例如,如果宣告名為 Color 的屬性,則屬

性的型別同樣應該是 Color。請參閱本主題中後面的示例。

          以下程式碼示例闡釋正確的屬性命名。

public class SampleClass

                 {

                      public Color BackColor

                      {

                           // Code for Get and Set accessors goeshere.

}

                  }

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

                 public enum Color

                 {

                     // Insert code for Enum here.

                  }

                  public classControl

{

                       public Color Color

                       {

get

{

// Insert codehere.

}

set

{

// Insert codehere.

}

                        }

                   }

           以下程式碼示例不正確,原因是Color 屬性是 Integer 型別的。

                public enum Color

{

// Insert codefor Enum here.

}

                public classControl

                {

                    public int Color

                    {

                        // Insert code here

                     }

                }

           在不正確的示例中,不可能引用 Color 列舉的成員。Color.Xxx 將被解釋為訪問一個成員,

該成員首先獲取 Color 屬性( C# 中為 int型別)的值,然後再訪問該值的某個成員(該成

員必須是 System.Int32 的例項成員)。

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

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

2、指定兩個名為 sender 和 e 的引數。sender 引數表示引發事件的物件。sender引數始

終是object 型別的,即使在可以使用更為特定的型別時也如此。與事件相關聯的狀態封裝

在名為 e 的事件類的例項中。對 e 引數型別使用適當而特定的事件類。

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

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

5、使用動名詞(動詞的“ing”形式)建立表示事件前的概念的事件名稱,用過去式表示事

件後。例如,可以取消的 Close 事件應當具有 Closing 事件和 Closed 事件。不要使用

BeforeXxx/AfterXxx命名模式。

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

7、通常情況下,對於可以在派生類中重寫的事件,應在型別上提供一個受保護的方法(稱為

OnXxx)。此方法只應具有事件引數 e,因為傳送方總是型別的例項。

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

           public delegatevoid MouseEventHandler(object sender, MouseEventArgs e);

      以下示例闡釋正確命名的事件引數類。

          public classMouseEventArgs : EventArgs

                {

             int x;

               int y;

      publicMouseEventArgs(int x, int y)

                  {

this.x = x;

this.y = y;

}

                  public int X

            {

                      get

                      {

                    return x;

          }

                  }

            publicint Y

                  {

             get

       {

                           return y;

      }

                  }

          }

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

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

                 public const string PAGE_TITLE ="Welcome";

        以下規則概述欄位的命名指南:

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

            2、public 使用 Pascal 大小寫。

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

要使用大寫字母。下面是正確命名的欄位的示例。

class SampleClass

{

        stringurl;

stringdestinationUrl;

}

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

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

6、對預定義物件例項使用公共靜態只讀欄位。如果存在物件的預定義例項,則將它們宣告為

物件本身的公共靜態只讀欄位。使用 Pascal 大小寫,原因是欄位是公共的。下面的程式碼

示例闡釋公共靜態只讀欄位的正確使用。

                 public struct Color

    {

    public static readonly Color Red = new Color(0x0000FF);

    public Color(int rgb)

{

 // Insert code here.}

                          public Color(byte r, byte g,byte b)

                 {

// Insert code here.

                           }

                      public byte RedValue

                 {

                 get

            {

            return Color;

     }

    }

    }

       以下規則概述靜態欄位的命名指南:

           1、使用名詞、名詞短語或者名詞的縮寫命名靜態欄位。

           2、使用 Pascal 大小寫。

           3、對靜態欄位名稱使用匈牙利語表示法字首。

           4、建議儘可能使用靜態屬性而不是公共靜態欄位。

集合是一組組合在一起的類似的型別化物件,如雜湊表、查詢、堆疊、字典和列表,集合的命名

建議用複數。

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

System、Collections、Forms或 UI。有關 .NET 框架名稱空間的列表,請參閱類庫。

另外,避免使用和以下關鍵字衝突的識別符號。

AddHandler

AddressOf

Alias

And

Ansi

As

Assembly

Auto

Base

Boolean

ByRef

Byte

ByVal

Call

Case

Catch

CBool

CByte

Cchar

CDate

CDec

CDbl

Char

Cint

Class

CLng

CObj

Const

Cshort

CSng

CStr

CType

Date

Decimal

Declare

Default

Delegate

Dim

Do

Double

Each

Else

ElseIf

End

Enum

Erase

Error

Event

Exit

ExternalSource

False

Finalize

Finally

Float

For

Friend

Function

Get

GetType

Goto

Handles

If

Implements

Imports

In

Inherits

Integer

Interface

Is

Let

Lib

Like

Long

Loop

Me

Mod

Module

MustInherit

MustOverride

MyBase

MyClass

Namespace

New

Next

Not

Nothing

NotInheritable

NotOverridable

Object

On

Option

Optional

Or

Overloads

Overridable

Overrides

ParamArray

Preserve

Private

Property

Protected

Public

RaiseEvent

ReadOnly

ReDim

Region

REM

RemoveHandler

Resume

Return

Select

Set

Shadows

Shared

Short

Single

Static

Step

Stop

String

Structure

Sub

SyncLock

Then

Throw

To

True

Try

TypeOf

Unicode

Until

volatile

When

While

With

WithEvents

WriteOnly

Xor

Eval

extends

instanceof

package

var


第六章 語句

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

            a++;      //推薦

            b--;       //推薦

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

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

            1 子語句要縮排。

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

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

                while (d + =  s++)

                 {

          n++;

              }

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

           return;

        returnmyDisk.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 user id

       foreach 語句使用格式

              foreach (objectobj in array)

              {

                  statements;

}

        注意 1在迴圈過程中不要修改迴圈計數器。

           2對每個空迴圈體給出確認性註釋。

        while語句使用格式

            while(condition)

            {

                statements;

            }

         空的 while 語句使用格式

              while(condition);

         do - while 語句使用格式

              do

              {

                  statements;

              } while(condition);       

     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; 語句結束。

          try - catch  語句使用格式

              try

              {