仓酷云 发表于 2015-1-16 22:47:23

ASP.NET网站制作之分离泛型与模板的STL.NET探究

中间码是基于一个虚拟机器。源代码是最高层的,理论上从源代码开始直接编译成本地码能提供最大优化的。而中间码只能是转译成本地码,效率上难免受到损耗。根据虚拟机器所设定的体系结构的特点,和本地机器的差异的多少。模板  入手下手之前,先来看一个笑话,当问一个C++程序员如何完成一个给定的义务时,他(她)大概会供应一打或更多的潜伏办理计划列表,但又会极为具体地标出每种计划的成绩的地方,让你手足无措,难以选择。而VisualC++2005,经由过程C++/CLI言语联编,引进了泛型的观点,使C++程序员可进一步进步程序的开辟效力。关于.NET泛型与C++模板,只管句法上很类似,但泛型与模板是以完整分歧的办法完成的,它们之间没有任何的内置兼容性。

  说到泛型与模板的不同,信任每一个.NET平台的C++程序员城市问这个成绩:我该选择哪一种手艺呢?那些已用C++举行了数年开辟(出格是用VisualC++)的人,信任早已晓得谜底:两种手艺都具有出色的特征,但任何一者都不是另外一者的超集,利用何种手艺只限于给定的义务,简而言之,没有一种手艺能够合用于一切情形下的办理计划。一样,这类进退失据的情况也熬煎了VisualC++程序员数年:Win32或是MFC、ATL或是WTL、COM或是C作风的DLL、#import或是CComPtr。

  触及.NET开辟的C++常识

  在已往,VisualC++使用某些手艺手腕,可以使STL中的汇合与其他手艺协同事情,如在举动模板库(ATL)中称为CComEnuOnSTL的模板化类,它同意一个VisualBasic客户端利用ForEach来列举由C++COM服务器供应的STL汇合的内容。固然这类条理上的集成十分之浅,但在很多受限情形下证明十分有效。基于一样的大旨,STL.NET为C++程序员供应了尺度STL库的一种扩大,这类扩大可同意在一个C++/CLI程序集外部利用的STL汇合,作为泛型汇合表露给其他的.NET程序集。

  STL.NET供应了与尺度STL汇合不异的接口,因而,对熟习尺度STL汇合与算法的C++程序员来讲,不存在进修曲线。以VisualC++2005来作申明,STL.NET的头文件位于Cliext目次中,假如要利用STL.NET汇合,比方vector,必需包括<cliext/vector>而不是尺度的<vector>,别的,STL.NET汇合包括在cliext定名空间中,而不是尺度STL汇合所利用的std定名空间。

  注:VisualC++开辟小组仍在勉力事情使STL.NET变得更容易利用,并进步它的功能。由于STL.NET仍在不休地举行新的改善,本文将不会切磋STL.NET汇合的过深的地方,而会从一种更高的角度来看,为何STL.NET将会无所作为。

  桥接泛型与模板

  桥接泛型与模板这两个分歧的天下,实属一项困难的义务。模板只是一个C++的观点,并只存在于编译时代;但是,泛型是一个.NET观点,它存在于已编译的程序会合,并对一切.NET言语可用。STL.NET所利用的办理计划是把类集看成C++模板类来完成,同时C++模板类也是.NET援用范例,并由实在现了ICollection泛型接口。STL与STL.NET中vector的声明演示了这类计划:

//STLvector声明
template<class_Ty,class_Ax=allocator<_Ty>>
classvector;

//STL.NETvector声明
template<typename_Value_t>
refclassvector:Generic::ICollection<_Value_t>
  在这二者的声明傍边,有一些关头的分歧的地方,除泛型接口的完成以外,STL.NETvector其实不能指定一个分派算符,只是复杂地挪用gcnew来分派一个新的所需元素。STL.NET汇合声明时利用了ref关头字,这意味着它们都是.NET援用范例,将会被分派在.NET托管堆中。
<P>  利用STL.NET

  撤除STL.NET汇合声明时的一些差别(这个差别与C++/CLI和尺度C++间的句法差别有关),利用STL.NET汇合与STL汇合基础上千篇一律。以下的把持台示例程序声了然一个vector工具,接着在汇合中到场了一些其他分歧范例的元素:

#include"stdafx.h"
#include<cliext/vector>

usingnamespaceSystem;
usingnamespacecliext;

intmain(array<System::String^>^args)
{
 vector<Object^>^v=gcnewvector<Object^>;
 v->push_back(nullptr);//第一个元素为空
 v->push_back(gcnewObject());//第二个元素为一个纯工具
 v->push_back(1);//第三个元素为装箱的整数
 v->push_back("ElementFour");//第四个元素为字符串
 return0;
}
  以上代码演示了STL.NET的一个主要特性:仍然长短常熟习的汇合类,另外一个特性是,可在一个汇合中利用两种分歧的编程模子,这意味着假如要查找上述代码中的整数1,可以使用以下STLfind算法:

//看成STL汇合利用
boolcontainsOneSTL=find(v->begin(),v->end(),1)!=v->end();
  别的,.NET中ICollection泛型接口也能用于完成一样的逻辑:

//看成.NET汇合利用
boolcontainsOnedotNet=v->Contains(1);
  这类可在统一汇合类中同时利用STL和.NET算法的才能--而不必复制内容或供应桥接函数--同意C++/CLI程序员对任何有关汇合的操纵,选择最得当的函数与库。

  有关STL.NET最初一个特性是,可为用C#或VB.NET编写的.NET程序集,无缝地供应其STL.NET汇合。因为STL.NET汇合完成了ICollection泛型接口,以是在范例平安上,再无任何消耗,再者,STL.NET汇合利用了托管内存来存储汇合中的元素,因而,在与那些供应STL.NET汇合的C++/CLI程序集互操纵时,再无任何功能或代码平安性方面的消耗。

  .NET王国C++程序员的进场券

  STL.NET代表了VisualC++产物的一个主要部分,其同意C++程序员使用他们现有的妙技与履历,尽早利用上带成壮大汇合与算法的类库,而不至于被疾速发展的.NET天下拒之门外。

  STL.NET作为一个光亮的初步,将有助于C++在坚持言语光彩传统的同时,成为.NET言语开辟的第一类选择。其实Java之所以在曾经独步天下,就是因为他的跨平台、安全性,这两方面,效率可不是Java的强项,反而是他最短的一块挡板,虽然net总是用理论证明比.NET快。

灵魂腐蚀 发表于 2015-1-28 15:22:21

由于JSP/Servlet都是基于Java的,所以它们也有Java语言的最大优点——平台无关性,也就是所谓的“一次编写,随处运行(WORA–WriteOnce,RunAnywhere)”。除了这个优点,JSP/Servlet的效率以及安全性也是相当惊人的。

再见西城 发表于 2015-2-5 17:27:00

asp.net最主要特性包括:◆编程代码更简洁◆网站可实现的功能更强大◆运行效率高◆节省服务器的动作资源

山那边是海 发表于 2015-2-13 00:57:10

目前在微软的.net战略中新推出的ASP.net借鉴了Java技术的优点,使用CSharp(C#)语言作为ASP.net的推荐语言,同时改进了以前ASP的安全性差等缺点。但是,使用ASP/ASP.net仍有一定的局限性,因为从某种角度来说它们只能在微软的WindowsNT/2000/XP+IIS的服务器平台上良好运行(虽然像ChilliSoft提供了在UNIX/Linux上运行ASP的解决方案.

老尸 发表于 2015-3-3 11:56:49

对于中小项目来说.net技术是完全可以胜任,但为什么现在大型公司或网站都选择php或java呢?就是因为微软不够开放,没有提供从硬件到应用服务器再到业务应用的整套解决方案。

只想知道 发表于 2015-3-11 10:53:41

但是java靠开源打出的一片天地,特别是在微软的垄断下能打开今天的局面还是有它的生命力的。

小妖女 发表于 2015-3-18 07:12:05

现在的ASP.net分为两个版本:1.1和2.0Asp.net1.1用VS2003(visualstudio2003)编程。Asp.net2.0用VS2005(visualstudio2005)编程。现在一般开发用的是VS2003。

柔情似水 发表于 2015-3-25 12:54:47

在asp.net虚拟主机的服务提供商中,目前首推的是CNNIC的其中一家域名注册机构---时代互联(www.now.net.cn),他们早在2001年微软刚推出Asp.net时就推出了对应的Asp.net虚拟主机了,经笔者的使用测试,他提供的Asp.net性能非常的稳定,版本也会定期的更新,目前他的
页: [1]
查看完整版本: ASP.NET网站制作之分离泛型与模板的STL.NET探究