如下轉載於:http://www.it28.cn/ASPNET/825095.htmlhtml
下面這個規範是我爲朋友寫的幾點建議,寫的很範,做爲BLOG,願與你們一塊兒分享。只給出部分設計規範樣例,關於.NET編程的詳細規範、設計請參考相關書籍。編程
一、命名規範函數
1.1 命名空間命名,通常命名爲」公司簡稱+產品名稱+程序包」的形式,如ARSC.EngineMap.Geometry、SharpMap.Framework、SharpMap.Controls、GoogleMap.Downloader、GoogleMap.App等,其長度通常要求不能過於太長。程序集的名稱能夠和命名空間保持一直。注意能夠在不一樣的.DLL裏面定義相同的命名空間。工具
1.2 變量命名,若是是局部變量、函數接口變量,主要以易於表達概念的英語進行命名。單詞第一個字符必須小寫,若是是組合單詞,第二個單詞應該大寫,如firstName、computerName。ui
Public void ConcactName (string firstName,string lastName);spa
對於成員變量須要定義以」_」開頭,如:設計
Public class Person代理
{orm
Private string _firstName;htm
Private string _lastName;
Private int _age;
}
1.3 類命名,類主要由名詞性短語命名,類的第一個單詞都是大寫,作到見名知意,如Person、Computer、ExtensionManager、PrintManager、FormatTransform、HttpDownloader、TcpDownloader、CommandPool、XmlHelper、XmlUtility、ProductFinder、ProductRepository、CourseCatalog等。注意的是類命名不能加複數形式如Persons表示人的集合,正確命名應該爲PersonCollection。
1.4 接口命名,接口命名能夠參考類命名規則,可是其須要在命名前加」I」。如ICommandPool、IDownloader、IPrintManager、IProductFinder等。
1.5 方法命名,主要以動名詞短語構成,函數主要表達一種計算功能或者任務,所以給函數取一個合適的名字很是重要,如CaculateArea、QueryProduct、CreateBar、ExportView、CanSeek、HasValue、HasChildern等。長名稱函數通常用於私有函數中,如CopyProductsToRepositoryFromCache這個函數要比註釋好的多。
1.6 代理命名,如提供回調的代理須要加上CallBack後綴:
Public delegate void ProgressNotificationCallBack(int curPos,int totalSize);提供事件原型的代理須要加上EventHandler後綴,如:
Public delegate void CurrentToolChangedEventHandler(object sender,MapToolEventArgs e);
1.7 事件命名,主要是要可以見名知意,如
Public event CurrentToolChangedEventHandler CurrentToolChanged;
Public event EventHandler CurrentLayerChanged;
1.8 屬性命名,提供私有成員的訪問控制如
Public string Name
{
Get{return _name;}
Set
{
If(value==null)
Throw new ArgumentNullException(「Name can’t be set null.」);
_name=value;
}
}
二、成員訪問控制
成員訪問控制主要由internal(在該DLL內能夠訪問)、protected(子類能夠訪問)、private(私有訪問)、public(訪問不受控制)和Protected internal(在其子類或者該DLL內部能夠訪問),咱們將全部成員變量都設計成私有,若是須要公開該數據,須要提供屬性。如:
Public class Person
{
Private string _name;
Public string Name
{
Get{return _name;}
Set {_name=value;}
}
}
三、XML代碼註釋
對於公開函數接口必須提供代碼XML註釋,便於造成開發文檔。私有函數可適當加以註釋。詳細請參考MSDN。
/// <summary>
/// 命令池對象,主要用於命令按鈕的註冊和反註冊。
/// </summary>
///<remarks>
///每個命令池都和一個<seealso cref="ICommandBars"/>綁定在一塊兒,
///若是想將按鈕添加到<seealso cref="ICommandBars"/>上,首先必須在命令池中註冊該按鈕項目。
///</remarks>
public interface ICommandPool
{
/// <summary>
/// 獲取命令池中工具條項目。
/// </summary>
/// <param name="uid">命令按鈕全局惟一標識符。</param>
/// <returns>返回工具條項目。</returns>
ICommandItem GetCommandItem(GuidClass uid);
/// <summary>
/// 獲取和設置應用程序鉤子其爲<seealso cref="Jackey.Framework.IApplication"/>。
/// </summary>
object Hook { get; set; }
/// <summary>
/// 獲取和設置COM對象鉤子。該鉤子只須要在COM應用程序中進行設置。
/// </summary>
object COMHookObject { get;set;}
/// <summary>
/// 獲取和設置命令按鈕單擊回調函數。
/// </summary>
ButtonClickCallBack ButtonClick { get;set;}
/// <summary>
/// 利用指定全局惟一標識符註冊命令按鈕。
/// </summary>
/// <param name="cmd">命令對象。</param>
/// <param name="guid">命令按鈕全局惟一標識符。</param>