ASP.NET网站制作之.NET泛型中的协变与逆变仓酷云
不可能天天有学习.net),我一同学说,你应该早就有作品啦。我惶惶然……以后.NET言语如VB和C#还不撑持泛型的协变(covariance)与逆变(contravariance)。只管微软中的良多人也在议论它,可是在不远的未来这仍是不太大概呈现。对协变与逆变的完全先容要花很长工夫。基于此,请人人参考EricLippert的关于C#中的协变与逆变的系列文章。为了在VB中增添协变与逆变的泛型撑持,LucianWischik提出了上面的语法。范例参数可由关头字“In”和“Out”润色。“In”范例只能作为办法参数。与此相似,“Out”范例只能作为办法的前往范例。
利用Out范例的一个例子就是IEnumerable(OfT)。假如某函数承受一个IEnumerable(OfAnimal)范例参数,那末我们就能够给它传一个IEnumerable(ofBird)。关于In范例,一个不太得当的例子就是按次。看一下上面的接口:
InterfaceIWriter(OfT)Write(valueAsT)假如你向承受Writer(OfAnimal)范例参数的函数传一个IWriter(OfBird),固然就不合错误了。该办法能够将Animal的任何子类传给IWriter.Write,可是它只承受Birds。
假如利用注解,该接口看起来像上面如许:
InterfaceIEnumerable(OfOutT)InterfaceIWriter(OfInT)这是针对VB编写的,它也能够用在C#上。
interfaceIEnumerable<outT>interfaceIWriter<inT>不幸的是,这类语法其实不能间接使用在年夜多半罕见的场景中。好比IList(OfT),当传给一个向汇合中写进的办法时,T应当是In范例。可是当传给一个从汇合中读取的办法时,T应当是Out范例。也许这里应当针对IList创立一个基类,该类会将承受T与前往T的办法辨别开来。
追溯已往,C#和VB都撑持数组协变(out/IEnumerable情形),只管在逆变的情形下这会招致运转时毛病(in/IWriter情形)。如许做的目标是使C#更兼容于Java。年夜多半人都以为这是一个欠好的计划,可是如今却没法改动了。
检察英文原文:CovarianceandContravariancein.NETGenerics
来自:http://www.infoq.com/cn/news/2008/08/GenericVariance
语言是不是不是最重要的? 比如封装性、继承性、多态性等等,这就解决了刚才谈到的ASP的那些弱点。封装性使得代码逻辑清晰,易于管理,并且应用到ASP.Net上就可以使业务逻辑和Html页面分离,这样无论页面原型如何改变。 有一丝可惜的是,这个系列太强了,Java阵营的朋友根本就是哑口无言...争论之火瞬间被浇灭,这不是我想这么早就看到的,但是值了。 最强的技术支持WebService,而且有.NET的所有library做后盾。而且ASP.NET在.NET3.5中还有微软专门为AJAX开发的功能--ASP.NETAJAX。 主流网站开发语言之ASP:ASP是微软(Microsoft)所开发的一种后台脚本语言,它的语法和VisualBASIC类似,可以像SSI(ServerSideInclude)那样把后台脚本代码内嵌到HTML页面中。虽然ASP简单易用,但是它自身存在着许多缺陷,最重要的就是安全性问题。 asp.net空间的支持有:ASP.NET1.1/虚拟目录/MicrosoftFrontPage2000扩展/CDONTS,同时他的网站上也提供了Asp.net的使用详解和程序源代码,相信对使用ASP.NET编程的程序员来说会非常有用哦! 虽然在形式上JSP和ASP或PHP看上去很相似——都可以被内嵌在HTML代码中。但是,它的执行方式和ASP或PHP完全不同。在JSP被执行的时候,JSP文件被JSP解释器(JSPParser)转换成Servlet代码,然后Servlet代码被Java编译器编译成.class字节文件,这样就由生成的Servlet来对客户端应答。所以,JSP可以看做是Servlet的脚本语言(ScriptLanguage)版。 业务逻辑代码都不必做任何改动;继承性和多态性使得代码的可重用性大大提高,你可以通过继承已有的对象最大限度保护你以前的投资。并且C#和C++、Java一样提供了完善的调试/纠错体系。 现在主流的网站开发语言无外乎asp、php、asp.net、jsp等。 如今主流的Web服务器软件主要由IIS或Apache组成。IIS支持ASP且只能运行在Windows平台下,Apache支持PHP,CGI,JSP且可运行于多种平台,虽然Apache是世界使用排名第一的Web服务器平台。 Servlet却在响应第一个请求的时候被载入,一旦Servlet被载入,便处于已执行状态。对于以后其他用户的请求,它并不打开进程,而是打开一个线程(Thread),将结果发送给客户。由于线程与线程之间可以通过生成自己的父线程(ParentThread)来实现资源共享,这样就减轻了服务器的负担,所以,JavaServlet可以用来做大规模的应用服务。 ASP.net的速度是ASP不能比拟的。ASP.net是编译语言,所以,当第一次加载的时候,它会把所有的程序进行编译(其中包括worker进程,还有对语法进行编译,形成一个程序集),当程序编译后,执行速度几乎为0。 通过这次激烈的讨论,我从大家身上学到了太多,开阔了眼界,不管是支持我的还是骂我的,都感谢你们。 ASP.NET:ASP.net是Microsoft.net的一部分,作为战略产品,不仅仅是ActiveServerPage(ASP)的下一个版本;它还提供了一个统一的Web开发模型,其中包括开发人员生成企业级Web应用程序所需的各种服务。ASP.NET的语法在很大程度上与ASP兼容,同时它还提供一种新的编程模型和结构,可生成伸缩性和稳定性更好的应用程序,并提供更好的安全保护。
页:
[1]