不要使用是 或 的實例字段。如果避免將字段直接公開給開發人員,可以更輕松地對類進行版本控制,原因是在維護二進制兼容性時字段不能被更改為屬性。考慮為字段提供 get 和set 屬性訪問器,而不是使它們成為公共的。get 和 set 屬性訪問器中可執行代碼的存在使得可以進行后續改進,如在使用屬性或者得到屬性更改通知時根據需要創建對象。下面的代碼示例闡釋帶有 get 和 set 屬性訪問器的私有實例字段的正確使用。例:
public class Control: Component
{
private int handle;
public int Handle
{
get
{
return handle;
}
}
}
1|5命名規范
命名概述
名稱應該說明“什么”而不是“如何”。通過避免使用公開基礎實現(它們會發生改變)的名稱,可以保留簡化復雜性的抽象層。例如,可以使用(),而不是()。
命名原則是:
選擇正確名稱時的困難可能表明需要進一步分析或定義項的目的。使名稱足夠長以便有一定的意義,并且足夠短以避免冗長。唯一名稱在編程上僅用于將各項區分開。表現力強的名稱是為了幫助人們閱讀;因此,提供人們可以理解的名稱是有意義的。不過,請確保選擇的名稱符合適用語言的規則和標準。
以下幾點是推薦的命名方法:
?避免容易被主觀解釋的難懂的名稱,如方面名(),或者屬性名xxK8。這樣的名稱會導致多義性。
?在類屬性的名稱中包含類名是多余的,如Book.。而是應該使用Book.Title。
?只要合適,在變量名的末尾或開頭加計算限定符(Avg、Sum、Min、Max、Index)。
?在變量名中使用互補對,如min/max、begin/end和open/close。
?布爾變量名應該包含Is,這意味著Yes/No或True/False值,如。
?在命名狀態變量時,避免使用諸如Flag的術語。狀態變量不同于布爾變量的地方是它可以具有兩個以上的可能值。不是使用,而是使用更具描述性的名稱,如。
?即使對于可能僅出現在幾個代碼行中的生存期很短的變量,仍然使用有意義的名稱。僅對于短循環索引使用單字母變量名,如 i 或 j。可能的情況下,盡量不要使用原義數字(幻數)或原義字符串,如
for (int i = 1; i < 7; i++)。而是使用命名常數,如for (int i = 1; i < ; i++)以便于維護和理解。
大小寫規則
大寫
?組織名縮寫使用大寫
?兩個或者更少字母組成的標識符使用大寫。例:
.IO
.Web.UI
SCB..UI
下表匯總了大寫規則,并提供了不同類型的標識符的示例。
標識符
大小寫
示例
類
枚舉類型
枚舉值
事件
異常類
注意: 總是以 后綴結尾。
只讀的靜態字段
接口
注意: 總是以 I 前綴開始。
方法
命名空間
.
屬性
公共實例字段
注意: 應優先使用屬性。
受保護的實例字段
Camel
注意: 應優先使用屬性。
私有的實例字段
Camel
參數
Camel
方法內的變量
Camel
縮寫
為了避免混淆和保證跨語言交互操作,請遵循有關區縮寫的使用的下列規則:
?不要將縮寫或縮略形式用作標識符名稱的組成部分。例如,使用,而不要使用。
?不要使用計算機領域中未被普遍接受的縮寫。
?在適當的時候,使用眾所周知的縮寫替換冗長的詞組名稱。例如,用UI作為User 縮
寫,用OLAP作為On-line 的縮寫。
?在使用縮寫時,對于超過兩個字符長度的縮寫請使用 大小寫或 Camel 大小寫。例如使用或;但是,應當大寫僅有兩個字符的縮寫,如:.IO,而不是.Io。
?不要在標識符或參數名稱中使用縮寫。如果必須使用縮寫,對于由多于兩個字符所組成的縮寫請使用Camel 大小寫。
命名空間
?命名命名空間時的一般性規則是使用公司名稱,后跟技術名稱和可選的功能與設計,如:
.[.][.]
例如:
SCB. // 賽酷比公司的供應鏈系統
SCB..// 賽酷比公司的供應鏈系統的業務規則模塊
?命名空間使用大小寫。
?指的是該項目的英文縮寫或軟件名。
?命名空間和類不能使用同樣的名字。例如,有一個類被命名為Debug后,就不要再使用Debug作為一個名稱空間名。
類
?使用 大小寫。
?用名詞或名詞短語命名類。
?使用全稱避免縮寫,除非縮寫已是一種公認的約定,如URL、HTML
?不要使用類型前綴,如在類名稱上對類使用 C 前綴。例如,使用類名稱,而不是
。
?不要使用下劃線字符 (_)。
?有時候需要提供以字母 I 開始的類名稱,雖然該類不是接口。只要 I 是作為類名稱組成部分的整個單詞的第一個字母,這便是適當的。例如,類名稱是適當的。在適當的地方,使用復合單詞命名派生的類。派生類名稱的第二個部分應當是基類的名稱。例如,對于從名為的類派生的類是適當的名稱,原因是一種。請在應用該規則時進行合理的判斷。例如,對于從派生的類是適當的名稱。盡管按鈕是一種控件,但是將作為類名稱的一部分將使名稱不必要地加長。
public class FileStream
public class Button
public class String
接口
?用名詞或名詞短語,或者描述行為的形容詞命名接口。例:
o接口名稱使用描述性名詞
o接口名稱ider使用名詞短語
o接口名稱使用形容詞。
?使用 大小寫。
?少用縮寫。
?給接口名稱加上字母 I 前綴,以指示該類型為接口。在定義類/接口對(其中類是接口的標準實現)時使用相似的名稱。兩個名稱的區別應該只是接口名稱上有字母 I 前綴。
?不要使用下劃線字符 (_)。
以下代碼示例闡釋如何定義 接口及其標準實現 類。
public interface IComponent
{
// Implementation code goes here.
}
public class Component: IComponent
{
// Implementation code goes here.
}
屬性類 ()
應該總是將后綴 添加到自定義屬性類。例:
public class ObsoleteAttribute
{
}
枚舉 (Enum)
枚舉 (Enum) 值類型從 Enum 類繼承。
?對于 Enum 類型和值名稱使用 大小寫。
?少用縮寫。
?不要在 Enum 類型名稱上使用 Enum 后綴。
?對大多數 Enum 類型使用單數名稱,但是對作為位域的 Enum 類型使用復數名稱。
?總是將添加到位域 Enum 類型。
參數
?使用描述性參數名稱。參數名稱應當具有足夠的描述性,以便參數的名稱及其類型可用于在大多數情況下確定它的含義。
?對參數名稱使用 Camel 大小寫。
?使用描述參數的含義的名稱,而不要使用描述參數的類型的名稱。開發工具將提供有關參數的類型的有意義的信息。因此,通過描述意義,可以更好地使用參數的名稱。
?不要給參數名稱加匈牙利語類型表示法的前綴,僅在適合使用它們的地方使用它們。
?不要使用保留的參數。保留的參數是專用參數,如果需要,可以在未來的版本中公開它們。相反,如果在類庫的未來版本中需要更多的數據,請為方法添加新的重載。
Type ()
(, )
方法
?使用動詞或動詞短語命名方法。
?使用 大小寫。
RemoveAll()
GetCharArray()
Invoke()
屬性 ()
?使用名詞或名詞短語命名屬性。
?使用 大小寫。
?考慮用與屬性的基礎類型相同的名稱創建屬性。例如,如果聲明名為Color的屬性,則屬
性的類型同樣應該是 Color。
public class SampleClass
{
public Color BackColor
{
// Code for Get and Set accessors goes here.
}
}
以下代碼示例闡釋提供其名稱與類型相同的屬性。
public enum Color
{
// Insert code for Enum here.
}
public class Control
{
public Color Color
{
get
{
// Insert code here.
}
set
{
// Insert code here.
}
}
}
事件
?對事件處理程序名稱使用后綴。
?指定兩個名為和e的參數。參數表示引發事件的對象。參數始
終是類型的,即使在可以使用更為特定的類型時也如此。與事件相關聯的狀態封裝
在名為e的事件類的實例中。對e參數類型使用適當而特定的事件類。
?用后綴命名事件參數類。
?考慮用動詞命名事件。
?使用動名詞(動詞的“ing”形式)創建表示事件前的概念的事件名稱,用過去式表示事
件后。例如,可以取消的Close事件應當具有事件和事件。不要使用
/命名模式。
?不要在類型的事件聲明上使用前綴或者后綴。例如,使用Close,而不要使用。
?通常情況下,對于可以在派生類中重寫的事件,應在類型上提供一個受保護的方法(稱為
OnXxx)。此方法只應具有事件參數e,因為發送方總是類型的實例。
public delegate void MouseEventHandler(object sender, MouseEventArgs e);
public class MouseEventArgs : EventArgs
{
int x;
int y;
public MouseEventArgs(int x, int y)
{
this.x = x;
this.y = y;
}
public int X
{
get
{
return x;
}
}
public int Y
{
get
{
return y;
}
}
}
常量 (const)
所有單詞大寫,多個單詞之間用 "_" 隔開。如:
const = "";
字段
?、 使用 Camel 大小寫。
? 使用 大小寫。
?拼寫出字段名稱中使用的所有單詞。僅在開發人員一般都能理解時使用縮寫。
class SampleClass
{
string url;
string destinationUrl;
}
?不要對字段名使用匈牙利語表示法。好的名稱描述語義,而非類型。
?不要對字段名或靜態字段名應用前綴。具體說來,不要對字段名稱應用前綴來區分靜態和非靜態字段。例如,應用g_或s_前綴是不正確的。
?對預定義對象實例使用公共靜態只讀字段。如果存在對象的預定義實例,則將它們聲明為
對象本身的公共靜態只讀字段。使用 大小寫,原因是字段是公共的。
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;
}
}
}
靜態字段
?使用名詞、名詞短語或者名詞的縮寫命名靜態字段。
?使用 大小寫。
?建議盡可能使用靜態屬性而不是公共靜態字段。
集合
集合是一組組合在一起的類似的類型化對象,如哈希表、查詢、堆棧、字典和列表,集合的命名建議用復數。
措詞
避免使用與常用的 .NET 框架命名空間重復的類名稱。例如,不要將以下任何名稱用作類名稱:、、Forms 或 UI。有關 .NET 框架命名空間的列表,請參閱類庫。
另外公司名稱翻譯大小寫規則公司名稱翻譯大小寫規則,避免使用與C#語言關鍵字沖突的標識符。
1|6語句
每行一個語句
每行最多包含一個語句。如:
a++; // 推薦
b--; // 推薦
a++; b--; // 不推薦
復合語句
復合語句是指包含"父語句{子語句;子語句;}"的語句,使用復合語句應遵循以下幾點
?子語句要縮進。
?左花括號“{” 在復合語句父語句的下一行并與之對齊,單獨成行。
?即使只有一條子語句要不要省略花括號“ {}”。如:
while(d += s++)
{
n++;
}
語句
語句中不使用括號,除非它能使返回值更加清晰。如:
return;
return myDisk.size();
return (size ? size : defaultSize);
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;
}
for、 語句
for 語句使用格式
for (initialization; condition; update)
{
statements;
}
空的 for 語句(所有的操作都在、或中實現)使用格式
for (; ; ); // user id
語句使用格式
foreach (object obj in array)
{
statements;
}
注意
?在循環過程中不要修改循環計數器。
?對每個空循環體給出確認性注釋。
while 語句
while 語句使用格式
while (condition)
{
statements;
}
空的 while 語句使用格式
while ();
do - while 語句
do - while 語句使用格式
do
{
statements;
} while (condition);
- case 語句
- case語句使用格式
switch (condition)
{
case 1:
statements;
????????break;
case 2:
statements;
????????break;
default:
statements;
break;
}
注意:
?語句中的每個case各占一行。
?為所有語句提供分支。
?所有的非空 case 語句必須用 break; 語句結束。
try - catch 語句
try - catch語句使用格式
try
{
statements;
}
catch (ExceptionClass e)
{
statements;
}
finally
{
statements;
}
using 塊語句
using 塊語句使用格式
using (object)
{
statements;
}
1|7控件命名規則
命名方法
控件名簡寫+英文描述,英文描述首字母大寫
主要控件名簡寫對照表
?控件名 => 簡寫
?Label => lbl
? => txt
? => btn
? =>
? =>
? => ddl
? => lst
? => dg
? => dl
? => chk
? => chkls
? => rdo
? => rdolt
?Image => img
?Panel => pnl
? => cld
? => ar
?Table => tbl
?or => rfv
? => cv
? => rv
? => rev
? => vs
? =>
1|8其他
表達式
?避免在表達式中用賦值語句
?避免對浮點類型做等于或不等于判斷
類型轉換
?盡量避免強制類型轉換。
?如果不得不做類型轉換,盡量用顯式方式。