孙斌
【摘 要】当我们需要写功能相似函数过程,同时可处理int、string、Date或其它数据类型时,因方法参数类型不同,只能分别写多个重载函数过程处理每种数据类型。如能在方法中传入通用数据类型,就可合并代码。这就自然而然的引入了泛型概念。通过介绍使用泛型的优点,说明使用泛型原因,结合井筒曲线图道类生成,说明使用泛型建立抽象工厂方法。
【关键词】数据类型 泛型 实例和实例化
1 泛型定义和优点
泛型是一种通用的数据类型。泛型可通过反射获取泛型数据类型中使用的类型信息。泛型最常见的用途是创建集合类。.NET类库在System.Collections.Generic命名空间中包含几个新的集合类。
使用泛型可方便高效的重用代码,当需要实现时,再进行处理。在.NET中使用泛型,它的数据类型和内部数据可在不导致增加代码情况下更改,而不管使用的是值类型还是引用类型,都可一次性地编写,并进行测试和系统部署,可通过任何类型来重用它,且都具有类型安全特性。因一般代码不会强行对值类型进行装箱和取消装箱,或对引用类型进行向下强制类型转换,所以使我们的程序性能得到显著提高。
2 实际应用
以井筒曲线图道类工厂为例,建立一个泛型抽象工厂。
(1)定义一个图道类工厂方法,实现一个采用无参数构造函数来创建对象的工厂WellTrackFactory,代码如下:
public class WellTrackFactory
(2)解决方法重载问题,引入TypeToken
public sealed class TypeToken
static private TypeToken
static public TypeToken
private TypeToken() { }}
这个类没有成员,且每个类型实参只能创建一个实例,因此性能较高。但就因该实例上带有其类型实参的类型信息,因此可作为判断函数重载依据。下面就用TypeToken
public interface IAbstractFactory
T1 Create(TypeToken
(3)针对抽象工厂实现具体工厂。具体工厂是利用生产每种图道类型单一工厂来组合实现。因此只要有每种图道类型单一工厂就可直接组合生成抽象工厂,而无需定义一个专用类来生成图道。代码如下:
public class FactTrackFactory
{private IWellTrackFactory
private IWellTrackFactory
public FactTrackFactory(IFactory
{factory1 = f1;factory2 = f2;}public T1 Create(TypeToken
{return factory1.Create();}public T2 Create(TypeToken
{return factory2.Create(); }}public static class FactTrackFactory
{public static FactTrackFactory T2>(IWellTrackFactory {return new FactTrackFactory (4)建立实例使用这个泛型抽象工厂。以曲线型图道为例,代码如下: //曲线型图道public abstract class CurveWellTrack{ public abstract string TrackName { get; }//图道名称 public abstract string TrackCaption { get; }//图道图头标题 } 下面就可以随意生成所需的抽象工厂接口,并快速从现有的单独图道工厂组合成特定的具体工厂实现。先定义一个生产图道类的方法: public static IAbstractFactory return FactTrackFactory.NewFactory(new WellTrackFactory }else if (type == "Rect"){return FactTrackFactory.NewFactory(new WellTrackFactory (5)将生产出的图道信息,输出到窗体中: public static void ExportProduct(ListBox lb) {//生产两个类型图道IAbstractFactory ImageWellTrack track2 = factory1.Create(TypeToken lb.Items.Add("图道1" + track1.TrackName);lb.Items.Add(track1.TrackCaption); lb.Items.Add("图道2" + track2.TrackName);lb.Items.Add(track2.TrackCaption);} 3 结语 文章简单介绍了泛型的定义以及优点,并结合井筒曲线的图道类的生成,说明了用泛型技术成功地增强原本重用性较低的抽象工厂的原理,演示了泛型在提高抽象性和代码重用方面卓越的价值。