999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

使用泛型建立井筒曲線圖道工廠

2015-07-03 09:27:29孫斌
中國科技縱橫 2015年12期

孫斌

【摘 要】當我們需要寫功能相似函數過程,同時可處理int、string、Date或其它數據類型時,因方法參數類型不同,只能分別寫多個重載函數過程處理每種數據類型。如能在方法中傳入通用數據類型,就可合并代碼。這就自然而然的引入了泛型概念。通過介紹使用泛型的優點,說明使用泛型原因,結合井筒曲線圖道類生成,說明使用泛型建立抽象工廠方法。

【關鍵詞】數據類型 泛型 實例和實例化

1 泛型定義和優點

泛型是一種通用的數據類型。泛型可通過反射獲取泛型數據類型中使用的類型信息。泛型最常見的用途是創建集合類。.NET類庫在System.Collections.Generic命名空間中包含幾個新的集合類。

使用泛型可方便高效的重用代碼,當需要實現時,再進行處理。在.NET中使用泛型,它的數據類型和內部數據可在不導致增加代碼情況下更改,而不管使用的是值類型還是引用類型,都可一次性地編寫,并進行測試和系統部署,可通過任何類型來重用它,且都具有類型安全特性。因一般代碼不會強行對值類型進行裝箱和取消裝箱,或對引用類型進行向下強制類型轉換,所以使我們的程序性能得到顯著提高。

2 實際應用

以井筒曲線圖道類工廠為例,建立一個泛型抽象工廠。

(1)定義一個圖道類工廠方法,實現一個采用無參數構造函數來創建對象的工廠WellTrackFactory,代碼如下:

public class WellTrackFactory : IWellTrackFactory where TTrack : TAbstractTrack, new(){public TAbstractTrack Create(){ return new TTrack(); }}

(2)解決方法重載問題,引入TypeToken類型,定義如下:

public sealed class TypeToken{

static private TypeToken instanceValue = new TypeToken();

static public TypeToken Instance{ get { return instanceValue; }}

private TypeToken() { }}

這個類沒有成員,且每個類型實參只能創建一個實例,因此性能較高。但就因該實例上帶有其類型實參的類型信息,因此可作為判斷函數重載依據。下面就用TypeToken作為區分生產函數重載依據,定義一個生產兩種圖道類的抽象工廠接口,實現如下:

public interface IAbstractFactory{

T1 Create(TypeToken token); T2 Create(TypeToken token);}

(3)針對抽象工廠實現具體工廠。具體工廠是利用生產每種圖道類型單一工廠來組合實現。因此只要有每種圖道類型單一工廠就可直接組合生成抽象工廠,而無需定義一個專用類來生成圖道。代碼如下:

public class FactTrackFactory : IAbstractFactory

{private IWellTrackFactory factory1;

private IWellTrackFactory factory2;

public FactTrackFactory(IFactory f1, IWellTrackFactory f2)

{factory1 = f1;factory2 = f2;}public T1 Create(TypeToken token)

{return factory1.Create();}public T2 Create(TypeToken token)

{return factory2.Create(); }}public static class FactTrackFactory

{public static FactTrackFactory NewFactory

T2>(IWellTrackFactory f1, IWellTrackFactory f2)

{return new FactTrackFactory(f1, f2); }}

(4)建立實例使用這個泛型抽象工廠。以曲線型圖道為例,代碼如下:

//曲線型圖道public abstract class CurveWellTrack{

public abstract string TrackName { get; }//圖道名稱

public abstract string TrackCaption { get; }//圖道圖頭標題 }

下面就可以隨意生成所需的抽象工廠接口,并快速從現有的單獨圖道工廠組合成特定的具體工廠實現。先定義一個生產圖道類的方法:

public static IAbstractFactory WellTrackFactory(string type){if (type == "Line"){

return FactTrackFactory.NewFactory(new

WellTrackFactory(),new WellTrackFactory());

}else if (type == "Rect"){return FactTrackFactory.NewFactory(new WellTrackFactory(),new WellTrackFactory());} return null; }

(5)將生產出的圖道信息,輸出到窗體中:

public static void ExportProduct(ListBox lb)

{//生產兩個類型圖道IAbstractFactory factory1 = WellTrackFactory("Line");CurveWellTrack track1 = factory1.Create(TypeToken.Instance);

ImageWellTrack track2 = factory1.Create(TypeToken.Instance);

lb.Items.Add("圖道1" + track1.TrackName);lb.Items.Add(track1.TrackCaption);

lb.Items.Add("圖道2" + track2.TrackName);lb.Items.Add(track2.TrackCaption);}

3 結語

文章簡單介紹了泛型的定義以及優點,并結合井筒曲線的圖道類的生成,說明了用泛型技術成功地增強原本重用性較低的抽象工廠的原理,演示了泛型在提高抽象性和代碼重用方面卓越的價值。

主站蜘蛛池模板: 国产欧美日韩综合一区在线播放| 亚洲天堂视频网站| 日韩无码一二三区| 国产AV毛片| 免费人成又黄又爽的视频网站| 精品久久久久成人码免费动漫| 77777亚洲午夜久久多人| 亚洲精品亚洲人成在线| 久久黄色免费电影| аⅴ资源中文在线天堂| 亚洲精品高清视频| 亚洲日韩第九十九页| 99伊人精品| 在线观看免费黄色网址| jizz在线观看| 97青青青国产在线播放| 老司机午夜精品网站在线观看 | 都市激情亚洲综合久久| 久久久久国色AV免费观看性色| 福利国产在线| 色综合天天综合中文网| 动漫精品中文字幕无码| 中文字幕丝袜一区二区| 四虎免费视频网站| 九九九国产| aa级毛片毛片免费观看久| 久久成人免费| 成人国产精品视频频| 亚洲成a人在线播放www| 国产日产欧美精品| 色综合久久久久8天国| 一本大道香蕉高清久久| 中文字幕天无码久久精品视频免费 | AV老司机AV天堂| 综合色区亚洲熟妇在线| 亚洲精品爱草草视频在线| 亚洲国产成人自拍| 免费高清毛片| 亚洲成人福利网站| 成人福利在线视频| 国产人成乱码视频免费观看| 天天干天天色综合网| 久夜色精品国产噜噜| 免费视频在线2021入口| 久久亚洲黄色视频| 91九色最新地址| 色天天综合| 精品无码国产自产野外拍在线| 熟妇人妻无乱码中文字幕真矢织江| 亚洲女同一区二区| 色综合激情网| 精品夜恋影院亚洲欧洲| 久久久久88色偷偷| 久久精品娱乐亚洲领先| 国产剧情国内精品原创| 国产一区亚洲一区| 国产麻豆永久视频| 国产精品9| 在线无码私拍| 久久美女精品国产精品亚洲| 99久久国产综合精品女同| 色播五月婷婷| 欧洲极品无码一区二区三区| 四虎永久在线精品影院| 狠狠色婷婷丁香综合久久韩国| 欧美日韩综合网| 亚洲精品中文字幕午夜| 国产精品女同一区三区五区| 九九九久久国产精品| 亚洲欧美成人| 亚洲天堂精品在线观看| 国产成人无码Av在线播放无广告| 亚洲综合色区在线播放2019| 亚洲成年网站在线观看| 真实国产乱子伦高清| 97视频在线观看免费视频| 亚洲资源在线视频| 亚洲综合亚洲国产尤物| 91蝌蚪视频在线观看| 国产精品美乳| 欧美日韩导航| 国产欧美亚洲精品第3页在线|