ASP.NET网站制作之C# 言语标准--1.13 版本把持
我感觉可以顶到50楼,出乎意料的是大家居然纷纷写出自己的博文,还被编辑做成了专题,置于首页头条。标准|把持 版本把持是一个历程,它以兼容的体例对组件举行不休的改善。假如依附于初期版本的代码从头编译后能够合用于新版本,则组件的新版本与初期版根源代码兼容。相反,假如依附于初期版本的使用程序不必从头编译便可合用于新版本,则组件的新版本为二进制兼容。年夜多半言语基本不撑持二进制兼容性,并且很多言语对增进源代码兼容性所做甚少。实践上,某些言语所含的缺点使得用它开辟出来的组件在不休的改善过程当中,一样平常最少会使依附于该组件的某些客户端代码生效。
比方,请看一个公布名为Base的类的基类作者的情形。在第一个版本中,Base不包括任何F办法。名为Derived的组件从Base派生,并引进F。此Derived类与它所依附的Base类一同公布给客户,客户又部署到浩瀚客户端和服务器。
//AuthorA
namespaceA
{
publicclassBase//version1
{
}
}
//AuthorB
namespaceB
{
classDerived:A.Base
{
publicvirtualvoidF(){
System.Console.WriteLine("Derived.F");
}
}
}
从这时候起,入手下手发生版本成绩。Base的作者天生了一个具有本人的F办法的新版本。
//AuthorA
namespaceA
{
publicclassBase//version2
{
publicvirtualvoidF(){//addedinversion2
System.Console.WriteLine("Base.F");
}
}
}
这个新版本的Base在源代码和二进制方面都应当与初始版本兼容。(假如仅增加一个新的办法就会产兼容性成绩,则基类大概就永久不克不及改善了。)不幸的是,Base中的新F使Derived的F的寄义不清。Derived是指重写Base的F吗?这看上往不太大概,由于编译Derived时,Base还没有F!别的,假如Derived的F切实其实是重写了Base的F,则它必需恪守由Base指定的协议(此协议在编写Derived时髦未指定)!在某些情形下,这是不成能的。比方,Base的F大概请求它的重写一直挪用基办法。Derived的F不成能恪守如许的协议。
C#经由过程请求开辟职员明白声明它们的企图来办理此版本成绩。在原始的代码示例中,代码很分明,由于Base乃至没有F。很分明,因为不存在名为F的基办法,因而Derived的F是一个新办法而不是对基办法的一个重写。
假如Base增加F并公布新版本,则在Derived的二进制版本中对“Derived的F”是甚么仍很分明:它语义上与重写有关,不该将它视为重写。
但是,当从头编译Derived时,其寄义还是不分明的:Derived的作者大概盘算让它的F重写Base的F大概埋没它。因为企图不清,编译器天生一个告诫,并在默许情形下使Derived的F埋没Base的F。此编译历程形成了语义上的二义性(与从头编译Derived前比拟较)。天生的告诫提示Derived的作者Base中存在F办法。
假如Derived的F在语义上与Base的F有关,则Derived的作者能够经由过程在F的声明中利用new关头字来暗示此企图(而且无效地封闭告诫)。
//AuthorA
namespaceA
{
publicclassBase//version2
{
publicvirtualvoidF(){//addedinversion2
System.Console.WriteLine("Base.F");
}
}
}
//AuthorB
namespaceB
{
classDerived:A.Base//version2a:new
{
newpublicvirtualvoidF(){
System.Console.WriteLine("Derived.F");
}
}
}
另外一方面,Derived的作者经由进一步思索,大概决意Derived的F应重写Base的F。能够经由过程利用override关头字来指定此企图,以下所示。
//AuthorA
namespaceA
{
publicclassBase//version2
{
publicvirtualvoidF(){//addedinversion2
System.Console.WriteLine("Base.F");
}
}
}
//AuthorB
namespaceB
{
classDerived:A.Base//version2b:override
{
publicoverridevoidF(){
base.F();
System.Console.WriteLine("Derived.F");
}
}
}
Derived的作者另有另外一种选择,就是变动F的称号,从而完全制止称号抵触。只管此变动会损坏Derived的源代码和二进制兼容性,但这类兼容性的主要性因计划而异。假如不向其他程序公然Derived,则变动F的称号极可能是个好主张,由于这会进步程序的可读性,就是说F的寄义不会再有任何搅浑。
什么叫数据库怎么样?什么意思?你想单学数据库。(其实变成是我问的) 有一丝可惜的是,这个系列太强了,Java阵营的朋友根本就是哑口无言...争论之火瞬间被浇灭,这不是我想这么早就看到的,但是值了。 能产生和执行动态、交互式、高效率的站占服务器的应用程序。运用ASP可将VBscript、javascript等脚本语言嵌入到HTML中,便可快速完成网站的应用程序,无需编译,可在服务器端直接执行。容易编写。 ASP是把代码交给VBScript解释器或Jscript解释器来解释,当然速度没有编译过的程序快了。 最强的技术支持WebService,而且有.NET的所有library做后盾。而且ASP.NET在.NET3.5中还有微软专门为AJAX开发的功能--ASP.NETAJAX。 ASP.NET:ASP.net是Microsoft.net的一部分,作为战略产品,不仅仅是ActiveServerPage(ASP)的下一个版本;它还提供了一个统一的Web开发模型,其中包括开发人员生成企业级Web应用程序所需的各种服务。ASP.NET的语法在很大程度上与ASP兼容,同时它还提供一种新的编程模型和结构,可生成伸缩性和稳定性更好的应用程序,并提供更好的安全保护。 但是目前在CGI中使用的最为广泛的是Perl语言。所以,狭义上所指的CGI程序一般都是指Perl程序,一般CGI程序的后缀都是.pl或者.cgi。 市场决定一切,我个人从经历上觉得两者至少在很长时间内还是要共存下去,包括C和C++,至少从找工作就看得出来,总不可能大家都像所谓的时尚一样,追捧一门语言并应用它。 Asp.net脚本的出现,为ASP空间带来了更高的稳定性,同时也为程序员建站提供更高环境!
页:
[1]