|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
觉得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[2][3]下一页
语言是不是不是最重要的? |
|