马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
我也不知道,我原来理解的,NET就是C++编程,只是与net网页编程相对,呵呵。以为.ET就是高级C++编程。上面这个标准是我为伴侣写的几点倡议,写的很范,作为BLOG,愿与人人一同分享。只给出部分计划标准样例,关于.NET编程的具体标准、计划请参考相干书本。
1、定名标准
1.1定名空间定名,一样平常定名为”公司简称+产物称号+程序包”的情势,如ARSC.EngineMap.Geometry、SharpMap.Framework、SharpMap.Controls、GoogleMap.Downloader、GoogleMap.App等,其长度一样平常请求不克不及过于太长。程序集的称号能够和定名空间坚持一向。注重能够在分歧的.DLL内里界说不异的定名空间。
1.2变量定名,假如是部分变量、函数接口变量,次要以易于表达观点的英语举行定名。单词第一个字符必需小写,假如是组合单词,第二个单词应当年夜写,如firstName、computerName。
PublicvoidConcactName(stringfirstName,stringlastName);
关于成员变量必要界说以”_”开首,如:
PublicclassPerson
{
Privatestring_firstName;
Privatestring_lastName;
Privateint_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后缀:
PublicdelegatevoidProgressNotificationCallBack(intcurPos,inttotalSize);供应事务原型的代办署理必要加上EventHandler后缀,如:
PublicdelegatevoidCurrentToolChangedEventHandler(objectsender,MapToolEventArgse);
1.7事务定名,次要是要可以见名知意,如
PubliceventCurrentToolChangedEventHandlerCurrentToolChanged;
PubliceventEventHandlerCurrentLayerChanged;
1.8属人命名,供应公有成员的会见把持如
PublicstringName
{
Get{return_name;}
Set
{
If(value==null)
ThrownewArgumentNullException(“Namecan’tbesetnull.”);
_name=value;
}
}
2、成员会见把持
成员会见把持次要由internal(在该DLL内能够会见)、protected(子类能够会见)、private(公有会见)、public(会见不受把持)和Protectedinternal(在其子类大概该DLL外部能够会见),我们将一切成员变量都计划成公有,假如必要公然该数据,必要供应属性。如:
PublicclassPerson
{
Privatestring_name;
PublicstringName
{
Get{return_name;}
Set{_name=value;}
}
}
3、XML代码正文
关于公然函数接口必需供应代码XML正文,便于构成开辟文档。公有函数可得当加以正文。具体请参考MSDN。
///<summary>
///命令池对象,次要用于命令按钮的注册和反注册。
///每个命令池都和一个<seealsocref="ICommandBars"/>绑定在一同,
///假如想将按钮增加到<seealsocref="ICommandBars"/>上,起首必需在命令池中注册该按钮项目。
publicinterfaceICommandPool
///<paramname="uid">命令按钮全局独一标识符。</param>
///<returns>前往工具条项目。</returns>
ICommandItemGetCommandItem(GuidClassuid);
///猎取和设置使用程序钩子其为<seealsocref="Jackey.Framework.IApplication"/>。
///猎取和设置COM对象钩子。该钩子只必要在COM使用程序中举行设置。
objectCOMHookObject{get;set;}
ButtonClickCallBackButtonClick{get;set;}
///<paramname="cmd">命令对象。</param>
///<paramname="guid">命令按钮全局独一标识符。</param>
///<returns>前往工具条项目。</returns>
ICommandItemRegisterCommandItem(ICommandObjectcmd,GuidClassguid);
///<paramname="cmd">命令对象。</param>
///<paramname="cmdType">工具条项目范例</param>
///<paramname="guid">命令按钮全局独一标识符。</param>
///<returns>前往工具条项目。</returns>
ICommandItemRegisterCommandItem(ICommandObjectcmd,CommandTypeEnumcmdType,GuidClassguid);
///<paramname="exeConfigPath">设置文件路径</param>
voidRegisterCommandItemFromConfiguration(stringexeConfigPath);
///<paramname="cmdID">命令按钮全局独一标识符。</param>
voidUnRegisterCommandItem(GuidClasscmdID);
///从XML文件中提取工具条和按钮,静态天生体系菜单,菜单天生算法存储于菜单天生引导者类.
publicclassXmlCommandBuilder:ICommandBuilder
#regionprivateandprotectedmembers
privateICommandBarsiCmdBars;
privateList<ICommandBar>_cmdBarList;
protectedXmlDocument_document;
protectedreadonlystaticstringCOMMAND_ITEM_GUID="commandid";
///<paramname="xmlConfigPath">工具条设置文件路径。</param>
///<paramname="cmdBars">工具条办理器接口。</param>
///<exceptioncref="System.ArgumentNullException">当xmlConfigPath为空抛出该非常。</exception>
///<exceptioncref="System.ArgumentNullException">当cmdBars为空抛出该非常。</exception>
publicXmlCommandBuilder(stringxmlConfigPath,ICommandBarscmdBars)
if(String.IsNullOrEmpty(xmlConfigPath))
thrownewArgumentNullException("xmlConfigPathcan"tbenullorempty.");
thrownewArgumentNullException("cmdBarscan"tbenull.");
_document=newXmlDocument();
_document.Load(xmlConfigPath);
关于具有非托管资本,如文件指针、数据库毗连、套接字等必需完成尺度IDisposable形式。关于组合完成IDisposable的类也应当完成IDisposable形式。
publicclassBaseClass:IDisposable
privateFileStream_readStream;
privateFileStream_writeStream;
//假如该类没有非托管资本则正文该闭幕器函数,该函数的增加会从必定
protectedvirtualvoidDispose(booldisposing)
//dosomethingreleaseunmanagedresources.
GC.SuppressFinalize(this);
publicclassDerivedClass:BaseClass
privateFileStream_myStream;
//假如该类没有非托管资本则正文该闭幕器函数,该函数的增加会从必定
publicvoidReadNextChunk()
thrownewObjectDisposedException("objecthasbeendisposed.");
protectedoverridevoidDispose(booldisposing)
5.1制止在一个年夜的轮回内里实行装箱和拆箱操纵。办理举措是使用泛型如List<T>代替ArrayList。
ArrayListlist=newArrayList();
Debug.WriteLine(list[i].ToString());
5.2关于庞大的事务交互的体系,在每一个类被闭幕前确保其已刊出一切事务。不然及易产生内存保守。这类情形在.Net和COM互操纵中常常呈现,如ArcObject的各类事务。
5.3关于工具类如WorkspaceHelper(封装AO的事情空间操纵的类)应当做到复杂和易于了解,不要把Helper和Utility类看成年夜杂烩,甚么办法都往内里放,这将招致代码十分难以修正。工具类的办法多数为静态办法,该类也为静态类。只管不要把类计划为静态类,一旦计划成静态类,将没法使用多态的上风。
来自:http://www.ckuyun.com/wobushixiaocai/archive/2008/04/17/1157722.html
其实net网页编程之所以在曾经独步天下,就是因为他的跨平台、安全性,这两方面,效率可不是net网页编程的强项,反而是他最短的一块挡板,虽然net总是用理论证明比.NET快。 |