透明 发表于 2015-1-16 22:29:40

ASP.NET编程:分析C# 2.0泛型类的创立和利用

觉得J2EE好像有很多工具,比如servlet,jboss,tomcat,ejb什么的,可是微软的.NET怎么什么也没有啊?"一次编码,屡次利用",这就是引进泛型的本源。在之前的C++中称为模板,C#泛型经由过程算法和数据布局撑持自力编码。比方,泛型列表意味着,你不用再重写一个强范例汇合。在本文中,作者将向你展现界说和利用泛型是何等简单的事变-请注重,临时以来泛型一向被以为是第一流和最坚苦的术语。
  1、简介
  泛型如今在任何一种言语中都被以为是一个初级的强无力的术语。当我在C++中第一次打仗模板时,我对之有些困惑。以后,我读了BjarneStroustrop的《TheDesignandEvolutionofC++》,才发明模板的利用就象C中的宏和用之来代替的复杂串交换模板一样简单。实在,模板和泛型是不异的器材-只管它们的完成略微分歧。
  C#泛型撑持在利用点处才界说算法及其数据范例。在C#的一些初期版本中,我们能够证实没有泛型也能够事情,由于每品种型都是派生于一个大众基范例-object。这意味着程序员能够基于object范例界说一个栈类而且把统统器材放到该栈上(由于统统都派生于object)。但是,一个object栈意味着,Customer工具,Integer工具和设想的工具都能被安排到统一个栈的实例上。了局是,开辟者要子类化数据范例来把数据范例绑定到他们要与之交互的器材上往。比方,在编写定制的贸易工具时,我们就倡议界说派生于System.Collections.CollectionBase的强范例汇合。缘故原由很复杂:基于object界说统统被以为是弱范例界说。
  业界的妙手们在数十年前就确信强范例优于弱范例,以是.NET终极撑持强范例,这看上往是很天然的事变。强范例算法固然倡议范例化参数-这恰是我们在泛型中所用的器材。
  十几年来,我们一向在利用字母T作为范例化参数的名字。如许,在任何泛型类利用者所供应的数据范例的中央,你都可以找到T。利用泛型的关头仅仅是供应这个T。界说泛型的关头在于完成一个办法或类,而且用特定命据范例来交换失落T。
  C#中的泛型撑持别的一些提炼。比方,一个办法或类能够有多个参数化的范例而且C#泛型还撑持WHERE束缚-它用来详细请求范例化参数的范例。比方,假如一个泛型范例必需完成接口IDisposable,那末C#泛型是撑持完成这一限定的。在文章的最初我们还要看一下束缚成绩。
闲话少说,让我们言回正传。
  2、利用泛型汇合
  有些人问我"面向工具编程(OOP)的答应在那里?",我的回覆是应当从两个方面来看OOP:你所利用的OOP和你创立的OOP。假如我们复杂地看一下假如没有如比方Microsoft的.NET,Borland的VCL,和一切的第三方组件如许的OO框架,那末良多初级的使用程序几近就没法创立。以是,我们能够说OOP已完成了它的答应。不错,临盆好的OOP代码是坚苦的而且多是极具挫败性的;可是记着,你不用须必定要经由过程OOP来完成你的方针。因而,上面起首让我们看一下泛型的利用。
  当你用VisualStudio或C#Express等疾速开辟工具创立工程时,你会看到关于System.Collections.Generic定名空间的参考援用。在这个定名空间中,存在多少泛型数据布局-它们都撑持范例化的汇合,散列,行列,栈,字典和链表等。为了利用这些强无力的数据布局,你所要做的仅是供应数据范例。
  列表1显现出我们界说一个强范例汇合的Customer工具是很简单的。
  列表1这个把持台使用程序包括一个Customer类和一个基于List<T>的强范例汇合Customers。

usingSystem;
usingSystem.Collections.Generic;
usingSystem.Text;
namespaceGenerics{
 classProgram{
  staticvoidMain(string[]args){
   List<Customer>customers=newList<Customer>();
   customers.Add(newCustomer("Motown-Jobs"));
   customers.Add(newCustomer("Fatmans"));
   foreach(Customercincustomers)
   Console.WriteLine(c.CustomerName);
   Console.ReadLine();
  }
 }
 publicclassCustomer{
  privatestringcustomerName="";
  publicstringCustomerName{
   get{returncustomerName;}
   set{customerName=value;}
  }
  publicCustomer(stringcustomerName){
   this.customerName=customerName;
  }
 }
}

  注重,我们有一个强范例汇合-List<Customer>-对这个汇合类自己来讲不必要写一句代码。假如我们想要扩大列表customer,我们能够经由过程从List<Customer>承继而派生一个新类。
共3页:上一页1下一页
语言是不是不是最重要的?

小魔女 发表于 2015-1-19 15:13:28

以上是语言本身的弱点,在功能方面ASP同样存在问题,第一是功能太弱,一些底层操作只能通过组件来完成,在这点上是远远比不上PHP/JSP,其次就是缺乏完善的纠错/调试功能,这点上ASP/PHP/JSP差不多。

admin 发表于 2015-1-27 07:10:30

主流网站开发语言之CGI:CGI就是公共网关接口(CommonGatewayInterface)的缩写。它是最早被用来建立动态网站的后台技术。这种技术可以使用各种语言来编写后台程序,例如C,C++,Java,Pascal等。

小妖女 发表于 2015-2-5 04:10:29

以上是语言本身的弱点,在功能方面ASP同样存在问题,第一是功能太弱,一些底层操作只能通过组件来完成,在这点上是远远比不上PHP/JSP,其次就是缺乏完善的纠错/调试功能,这点上ASP/PHP/JSP差不多。

飘飘悠悠 发表于 2015-2-11 04:27:09

主流网站开发语言之JSP:JSP和Servlet要放在一起讲,是因为它们都是Sun公司的J2EE(Java2platformEnterpriseEdition)应用体系中的一部分。

兰色精灵 发表于 2015-3-1 21:42:05

市场决定一切,我个人从经历上觉得两者至少在很长时间内还是要共存下去,包括C和C++,至少从找工作就看得出来,总不可能大家都像所谓的时尚一样,追捧一门语言并应用它。

简单生活 发表于 2015-3-11 00:31:47

在调试JSP代码时,如果程序出错,JSP服务器会返回出错信息,并在浏览器中显示。这时,由于JSP是先被转换成Servlet后再运行的,所以,浏览器中所显示的代码出错的行数并不是JSP源代码的行数。

若天明 发表于 2015-3-17 17:08:46

这也就是最近几年来随着各种新的后台技术的诞生,CGI应用在Internet上越来越少的原因。CGI方式不适合大访问量的应用。

不帅 发表于 2015-3-24 14:13:21

可以看作是VC和Java的混合体吧,尽管MS自己讲C#内核中更多的象VC,但实际上我还是认为它和Java更象一些吧。首先它是面向对象的编程语言,而不是一种脚本,所以它具有面向对象编程语言的一切特性。
页: [1]
查看完整版本: ASP.NET编程:分析C# 2.0泛型类的创立和利用