如下转载于: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>