彻底剖析C#2.0泛型类的创建和使用

彻底剖析C#2.0泛型类的创建和使用,第1张

彻底剖析C#2.0泛型类的创建和使用,第2张

“一次编码,多次使用”是引入泛型的根本。以前在C++中称为template,C#泛型通过算法和数据结构支持独立编码。例如,泛型列表意味着您不必重写强类型集合。在本文中,作者将向您展示定义和使用泛型是多么容易——请注意,泛型一直被认为是最难的术语。

一.导言

在任何语言中,泛型现在都被认为是一个高级而强大的术语。当我第一次接触C++中的模板时,我对它们有些怀疑。之后看了Bjarne Stroustrop的《C++的设计与进化》,才发现模板的使用就像C中的宏和简单的字符串替换模板一样简单。实际上,模板和泛型是一回事——尽管它们的实现略有不同。

# C泛型只支持在使用时定义算法及其数据类型。在C#的一些早期版本中,我们可以证明它可以在没有泛型的情况下工作,因为每个类型都是从一个公共的基本类型-object派生的。这意味着程序员可以基于对象类型定义一个stack类,把所有东西都放到栈上(因为所有东西都是从object派生的)。然而,对象堆栈意味着客户对象、整数对象和假设对象都可以放在同一个堆栈实例中。因此,开发人员必须对数据类型进行子类化,以将它们绑定到他们想要与之交互的事物上。例如,当编写自定义业务对象时,我们建议定义从system派生的强类型集合。原因很简单:所有基于对象定义的都被认为是弱类型定义。

业内专家几十年前就确信强类型优于弱类型,所以这似乎是很自然的。net终于支持强类型了。强类型算法当然建议输入参数——这正是我们在泛型中使用的。

十多年来,我们一直使用字母T作为类型化参数的名称。这样,您可以在任何泛型类用户提供的数据类型中的任何地方找到T。使用泛型的关键只是提供这个T,定义泛型的关键是实现一个方法或者类,用特定的数据类型替换T。

C#中的泛型支持其他改进。例如,一个方法或类可以有多个参数化类型,C#泛型也支持WHERE约束——它用于指定类型化参数的类型。例如,如果一个泛型类型必须实现IDisposable接口,那么C#泛型支持这种限制的实现。文末还要看约束问题。
废话少说,言归正传。

第二,使用泛型集合

有人问我,“面向对象编程(OOP)在哪里?”我的回答是,OOP应该从两个方面来看:你使用的OOP和你创建的OOP。如果单纯看的话,如果没有微软这样的OO框架。NET,Borland的VCL,以及所有的第三方组件,那么很多高级应用就很难被创建出来。所以,我们可以说OOP已经实现了。是的,产生好的OOP代码是困难的,并且可能是极其令人沮丧的;但是记住,你不一定要通过OOP来实现你的目标。所以,我们先来看看泛型的用法。

用Visual Studio或C# Express等快速开发工具创建项目时,会看到naming 空 System之间的引用。Collections.Generic在这个命名空间空中,有几种通用的数据结构——它们都支持类型化集合、散列、队列、栈、字典和链表。要使用这些强大的数据结构,您所要做的就是提供数据类型。

该列表显示了定义强类型客户对象对我们来说很容易。

这个控制台应用程序包含一个Customer类和一组基于List的强类型客户。

使用系统;
使用系统。集合。泛型;
使用系统。文本;
命名空间泛型{
类程序{
静态void Main(string[]args){
List customers = new List();
客户。Add(新客户(“Motown-Jobs”);
客户。Add(新客户(“胖子的”);
foreach(客户中的客户c)
控制台。WriteLine(客户名称);
控制台。ReadLine();
}
}
公共类Customer{
私有字符串customerName =
公共字符串CustomerName {
get { return CustomerName;}
设置{ customerName = value}
}
公共客户(字符串customerName){
this . customerName = customerName;
}
}
}

注意,我们有一个强类型的集合列表,对于这个集合类本身,不需要编写任何代码。如果我们想要扩展列表customer,我们可以通过继承列表来派生一个新的类。

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » 彻底剖析C#2.0泛型类的创建和使用

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情