成人性生交大片免费看视频r_亚洲综合极品香蕉久久网_在线视频免费观看一区_亚洲精品亚洲人成人网在线播放_国产精品毛片av_久久久久国产精品www_亚洲国产一区二区三区在线播_日韩一区二区三区四区区区_亚洲精品国产无套在线观_国产免费www

主頁 > 知識庫 > .NET開發(fā)基礎(chǔ):從簡單的例子理解泛型 分享

.NET開發(fā)基礎(chǔ):從簡單的例子理解泛型 分享

熱門標簽:萊蕪?fù)夂綦婁N機器人價格 五常地圖標注 凱立德導(dǎo)航官網(wǎng)地圖標注 鄭州400電話辦理 聯(lián)通 電銷語音自動機器人 地圖標注和認領(lǐng) 長春呼叫中心外呼系統(tǒng)哪家好 戶外地圖標注軟件手機哪個好用 智能電話營銷外呼系統(tǒng)

從簡單的例子理解泛型
話說有家影視公司選拔偶像派男主角,導(dǎo)演說了,男演員,身高是王道。于是有下面代碼:
 

復(fù)制代碼 代碼如下:

//男演員實體類
public class Boy
{
    //姓名
    private string mName;
    //身高
    private int mHeight;
    public string Name {
        get { return this.mName; }
    }
    public int Height {
        get { return this.mHeight; }
    }

    public Boy(string name, int height) {
        this.mName = name;
        this.mHeight = height;
    }
}

 
//演員選拔類
public class Compare
{
    //導(dǎo)演導(dǎo)超女出生,喜歡一對一PK
    public Boy WhoIsBetter(Boy boy1, Boy boy2)
    {
        if (boy1.Height > boy2.Height)
        {
            return boy1;
        }
        else
        {
            return boy2;
        }
    }
}

 
//測試
static void Main(string[] args)
{
    Boy boy1 = new Boy("潘長江", 165);
    Boy boy2 = new Boy("劉德華", 175);

    Console.WriteLine(new Compare().WhoIsBetter(boy1, boy2).Name);
    Console.ReadLine();
}
 


代碼很簡單,Boy為男演員實體類,包含姓名和身高兩個字段屬性;Compare類中的WhoIsBetter為選拔邏輯方法,負責(zé)選出兩個男演員中較高的那個;測試結(jié)果:劉德華完勝。

任何行業(yè)都是一樣,需求變更無處不在。第二天,需要選女主角,導(dǎo)演說了,女演員,苗條是王道。于是代碼變更,添加了女演員實體類,添加了女演員的選拔方法:
 
復(fù)制代碼 代碼如下:

//添加女演員實體
public class Girl
{
    //姓名
    private string mName;
    //體重
    private int mWeight;
    public string Name
    {
        get { return this.mName; }
    }
    public int Weight
    {
        get { return this.mWeight; }
    }

    public Girl(string name, int weight){
        this.mName = name;
        this.mWeight = weight;
    }
}

 
//演員選拔類中添加一個女演員方法
public class Compare
{
    //男演員身高是王道
    public Boy WhoIsBetter(Boy boy1, Boy boy2)
    {
        if (boy1.Height > boy2.Height)
        {
            return boy1;
        }
        else
        {
            return boy2;
        }
    }

    //女演員苗條是王道
    public Girl WhoIsBetter(Girl girl1, Girl girl2)
    {
        if (girl1.Weight girl2.Weight)
        {
            return girl1;
        }
        else
        {
            return girl2;
        }
    }
}

 
//測試
static void Main(string[] args)
{
    Boy boy1 = new Boy("潘長江", 165);
    Boy boy2 = new Boy("劉德華", 175);

    Girl girl1 = new Girl("鞏俐", 120);
    Girl girl2 = new Girl("周迅", 80);

    Console.WriteLine(new Compare().WhoIsBetter(boy1, boy2).Name);
    Console.WriteLine(new Compare().WhoIsBetter(girl1, girl2).Name);
    Console.ReadLine();
}
 


結(jié)果選出了身高更高的劉德華,選出了體重更輕的周迅,導(dǎo)演很滿意。但從程序設(shè)計角度,這段代碼顯然不夠完美,第一天選男主角,第二天選女主角,往后還要選男配角,選女配角,選群眾......按目前方式,只有往Compare類里不斷添加方法才能滿足導(dǎo)演需求,方法會越來越多,代碼會越來越長。于是,我決定修改WhoIsBetter方法,讓它以后可以支持男主,女主,男配,女配,男群眾,女群眾甚至支持所有兩個對象之間的比較:
 
復(fù)制代碼 代碼如下:

/// summary>
/// 男演員:實現(xiàn)IComparable接口
/// /summary>
public class Boy : IComparable
{
    //姓名
    private string mName;
    //身高
    private int mHeight;
    public string Name {
        get { return this.mName; }
    }
    public int Height {
        get { return this.mHeight; }
    }

    public Boy(string name, int height) {
        this.mName = name;
        this.mHeight = height;
    }

    public int CompareTo(object obj)
    {
        //比較身高
        return this.mHeight - ((Boy)obj).Height;
    }
}

/// summary>
/// 女演員:實現(xiàn)IComparable接口
/// /summary>
public class Girl : IComparable
{
    //姓名
    private string mName;
    //體重 www.jb51.net
    private int mWeight;
    public string Name
    {
        get { return this.mName; }
    }
    public int Weight
    {
        get { return this.mWeight; }
    }

    public Girl(string name, int weight){
        this.mName = name;
        this.mWeight = weight;
    }

    public int CompareTo(object obj)
    {
        //比較體重
        return ((Girl)obj).Weight - this.mWeight;
    }
}
 


首先讓實體類支持自定義的比較,男演員比較身高,女演員比較體重。自定義比較是通過實現(xiàn)IComparable接口完成的,在C#里但凡可以比較的類型,比如int、double、char等都實現(xiàn)了IComparable接口。關(guān)于IComparable接口此處不作詳述,請讀者自行查閱相關(guān)資料。
 
復(fù)制代碼 代碼如下:

public class Compare
{
    //萬物皆object
    public object WhoIsBetter(object obj1, object obj2)
    {
        object result = obj2;
        //判斷比較類型必須相同
        if (obj1.GetType() == obj2.GetType())
        {
            switch (obj1.GetType().ToString())
            {
                //男演員選拔
                case "Generic.Boy":
                    if (((Boy)obj1).CompareTo(obj2) > 0)
                    {
                        result = obj1;
                    }
                    break;
                //女演員選拔
                case "Generic.Girl":
                    if (((Girl)obj1).CompareTo(obj2) > 0)
                    {
                        result = obj1;
                    }
                    break;
                //擴展int類型比較
                case "System.Int32":
                    if (((System.Int32)obj1).CompareTo(obj2) > 0)
                    {
                        result = obj1;
                    }
                    break;
                }
            }
            return result;
        }
    }
 

修改WhoIsBetter方法,除了支持對男演員、女演員的比較,為了展示其擴展性,還新增了int類型的比較。
 
復(fù)制代碼 代碼如下:

//測試
static void Main(string[] args)
{
     Boy boy1 = new Boy("潘長江", 165);
     Boy boy2 = new Boy("劉德華", 175);

     Girl girl1 = new Girl("鞏俐", 120);
     Girl girl2 = new Girl("周迅", 80);

     Console.WriteLine(((Boy)new Compare().WhoIsBetter(boy1, boy2)).Name);
     Console.WriteLine(((Girl)new Compare().WhoIsBetter(girl1, girl2)).Name);
     Console.WriteLine(new Compare().WhoIsBetter(boy1.Height, boy2.Height));
     Console.WriteLine(new Compare().WhoIsBetter(girl1.Weight, girl2.Weight));

     Console.ReadLine();
}
 


測試結(jié)果:
劉德華
周迅
175
120
OK,截止目前,似乎比較完美了,男演員比身高,女演員比體重,還支持int類型比大小,WhoIsBetter方法具有了重用性,如果有需要,往后還能擴展,拿來比較任意兩個對象。在泛型出現(xiàn)以前,似乎確實比較完美,但這也只是相對的,我們來看看目前代碼的弱點:
弱點1:方法的重用性
假設(shè)我們要讓W(xué)hoIsBetter方法支持更多類型,比如支持基本的double,char,bool類型,支持以后導(dǎo)演可能提出的配角比較,群眾比較,那么就必須不斷的擴展方法內(nèi)部代碼,這帶來極大的維護成本。
弱點2:類型安全問題
 
復(fù)制代碼 代碼如下:

//測試
static void Main(string[] args)
{
    Boy boy1 = new Boy("潘長江", 165);
    Boy boy2 = new Boy("劉德華", 175);

    Girl girl1 = new Girl("鞏俐", 120);
    Girl girl2 = new Girl("周迅", 80);

    Console.WriteLine(((Boy)new Compare().WhoIsBetter(boy1, girl1)).Name);
    Console.ReadLine();
}
 


如上代碼我拿潘長江跟鞏俐去比較。雖然萬能的object給我們帶來了便捷,同時也帶來了風(fēng)險,這段代碼編譯完全可以通過,但運行時會出現(xiàn)異常,girl對象是沒法轉(zhuǎn)換為Boy類型的,現(xiàn)實里去韓國可以變性,但代碼里絕對不行。所以這個方法就像顆定時炸彈,一不小心傳錯了參數(shù),就會導(dǎo)致嚴重后果,并且編譯階段完全不被發(fā)現(xiàn)。
弱點3:裝箱拆箱導(dǎo)致的性能問題
當向WhoIsBetter方法中傳遞int參數(shù)時,object轉(zhuǎn)換為int導(dǎo)致了拆箱操作:
if (((System.Int32)obj1).CompareTo(obj2) > 0)
反編譯獲取MSIL:
IL_0093:  unbox.any  [mscorlib]System.Int32
C#是強類型語言,但只要引用類型與值類型的相互轉(zhuǎn)換,就避免不了Box與Unbox。有關(guān)裝箱與拆箱的知識請讀者自行查閱相關(guān)資料,此處不作詳述。

理解泛型
OK,到泛型登場了,摘錄了一段MSDN中對泛型的描述:泛型類和泛型方法同時具備可重用性、類型安全和效率,這是非泛型類和非泛型方法無法具備的。這三點,跟我們上面的例子相吻合。
看看使用泛型的解決方案:
 
復(fù)制代碼 代碼如下:

public class CompareT> where T : IComparable
{
    public T WhoIsBetter(T t1, T t2)
    {
        if (t1.CompareTo(t2) > 0)
        {
            return t1;
        }
        else
        {
            return t2;
        }
    }
}

 
//測試
static void Main(string[] args)
{
    Boy boy1 = new Boy("潘長江", 165);
    Boy boy2 = new Boy("劉德華", 175);

    Girl girl1 = new Girl("鞏俐", 120);
    Girl girl2 = new Girl("周迅", 80);

    Console.WriteLine((new CompareBoy>().WhoIsBetter(boy1, boy2)).Name);
    Console.WriteLine((new CompareGirl>().WhoIsBetter(girl1, girl2)).Name);
    Console.WriteLine(new Compareint>().WhoIsBetter(boy1.Height, boy2.Height));
    Console.WriteLine(new Comparestring>().WhoIsBetter(boy1.Name, girl1.Name));
    Console.ReadLine();
}
 


這段代碼在優(yōu)雅度上完勝非泛型,并且可重用性大大提升,可以說它支持所有類型的比較,只要這個類型實現(xiàn)了IComparable接口,同時一勞永逸,不再需要在方法內(nèi)部作任何擴展。
public class CompareT> where T : IComparable{
    //...
}
泛型類的定義是在類名后面跟上T>,這個是泛型專用語法,T表示傳遞進來的類型,你也可以用別的字母代替。
where T : IComparable ,從字面上就能理解,這段表示對T的類型約束。程序是遵循人的意志來執(zhí)行的,按前面的例子,如果莫名其妙的讓程序比較兩個object,它沒辦法知道該去怎么比較。所以我們必須告訴程序,T必須是可比較的類型,T必須實現(xiàn)了IComparable接口。
關(guān)于泛型參數(shù)約束,MSDN提供了一張表格:

約束 說明
T:結(jié)構(gòu) 類型參數(shù)必須是值類型??梢灾付ǔ齆ullable 以外的任何值類型。
T:類 類型參數(shù)必須是引用類型;這一點也適用于任何類、接口、委托或數(shù)組類型。
T:new() 類型參數(shù)必須具有無參數(shù)的公共構(gòu)造函數(shù)。當與其他約束一起使用時,new() 約束必須最后指定。
T:基類名> 類型參數(shù)必須是指定的基類或派生自指定的基類。
T:接口名稱> 類型參數(shù)必須是指定的接口或?qū)崿F(xiàn)指定的接口??梢灾付ǘ鄠€接口約束。約束接口也可以是泛型的。
T:U 為T 提供的類型參數(shù)必須是為U 提供的參數(shù)或派生自為U 提供的參數(shù)。 

您可能感興趣的文章:
  • asp.net實現(xiàn)利用反射,泛型,靜態(tài)方法快速獲取表單值到Model的方法
  • 詳解.NET 4.0中的泛型協(xié)變(covariant)和反變(contravariant)
  • .NET基礎(chǔ)之自定義泛型分析
  • .net泛型通用函數(shù)的特殊問題的解決方法
  • 使用.NET中的Action及Func泛型委托深入剖析
  • .NET CORE動態(tài)調(diào)用泛型方法詳解

標簽:紅河 西寧 岳陽 西藏 衢州 福州 湖州 宣城

巨人網(wǎng)絡(luò)通訊聲明:本文標題《.NET開發(fā)基礎(chǔ):從簡單的例子理解泛型 分享》,本文關(guān)鍵詞  .NET,開發(fā),基礎(chǔ),從,簡單,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《.NET開發(fā)基礎(chǔ):從簡單的例子理解泛型 分享》相關(guān)的同類信息!
  • 本頁收集關(guān)于.NET開發(fā)基礎(chǔ):從簡單的例子理解泛型 分享的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    欧美人狂配大交3d怪物一区| 日本a一级在线免费播放| 五月天婷婷在线播放| 无码日韩精品一区二区| 性欧美freesex顶级少妇| 99久久久精品视频| 国产精品久久久久久一区二区| 日韩视频在线一区| 国产真实乱人偷精品| 日产福利视频在线观看| 久久久国产精品黄毛片| www.av免费| 国产在线精品一区| 99re8精品视频在线观看| 欧美剧在线免费观看网站| 五月天亚洲精品| 久久精品国产亚洲AV无码麻豆| 日本www在线观看视频| 亚洲综合社区| 综合色就爱涩涩涩综合婷婷| 亚洲国产欧美视频| 欧美精品99久久久**| 欧美高清影院| 亚洲第一页在线播放| 成人黄色av免费在线观看| 香蕉国产在线| 韩国一区二区三区四区| 国精产品一品二品国精品69xx| 国产美女在线播放| 久久成人18免费网站| 三级在线观看网站| 无遮挡又爽又刺激的视频| 国产精品不卡在线| 日韩一区二区电影网| 男人的天堂视频网站| 欧美全黄视频| 91免费版网站入口| 蜜桃麻豆av在线| 欧美a级片免费看| 国产一区不卡精品| 亚洲高清精品中出| 极品尤物av丝袜美腿在线观看| 男人和女人啪啪网站| 国产在线观看av| 国产xxxxxx久色视频在| 精品国产va久久久久久久| 欧美一区二区三区色| 最近2019中文字幕mv免费看| 亚洲国产精品第一页| 日本人妻一区二区三区| 中文字幕日韩精品一区| 在线免费一级片| 亚洲色图 在线视频| 久久久久亚洲AV成人无码国产| 免费一级毛片在线观看| 韩国女主播一区二区三区| 久久99久久久久久久噜噜| 国产精品无圣光一区二区| 免费中国女人69xxxxx视频| 国产精品久久婷婷六月丁香| 激情综合色播五月| www.激情.com| 蜜桃91精品入口| 特级黄国产片一级视频播放| 国产福利片在线观看| 亚洲乱色熟女一区二区三区| 亚洲亚洲人成综合网络| 国产69精品久久久久99| 中文官网资源新版中文第二页在线观看| 伊人发布在线| 国产91在线|亚洲| 一区二区三区日韩精品| 91精品国产91热久久久做人人| 欧美亚洲一区二区三区四区| 亚洲三级网址| 91亚洲精品久久久蜜桃借种| 亚洲色大成网站www久久九九| 国产免费一区二区三区视频| 国内精品美女在线观看| 视频一区视频二区国产精品| xxxx国产视频| 成人久久一区二区| 三级影片在线观看| 欧美一级高清片在线观看| 成人444kkkk在线观看| 国产精品久久久久永久免费看| 午夜福制92视频| 国产高清一级毛片在线不卡| 久久免费视频网| 电影k8一区二区三区久久| 一本色道久久综合亚洲| 成年美女黄网站色大片不卡| 欧美三级黄色大片| 欧美性猛交xxxx黑人猛交| 99re6在线视频精品免费| 国产成人香蕉在线视频网站| 阿v视频在线观看| 国产成人无码精品久久久性色| 久久亚洲精品中文字幕| 国产精品19p| 黄色三级生活片| 成年免费插网| 国产成人成网站在线播放青青| 国产精品日韩一区| 国产情侣一区二区| 亚洲制服欧美另类| 精品无码久久久久成人漫画| 中文字幕42页丝袜| 曰本三级在线| 最近中文字幕2019第二页视频| 色婷婷**av毛片一区| 羞羞色午夜精品一区二区三区| 日本在线人成| 精品久久久久一区| 粉嫩精品一区二区三区在线观看| 国产黄a三级三级三级av在线看| 欧美精品自拍| 欧美性猛交bbbbb精品| 日韩伦理av| 免费a级观看| 亚洲一级毛片| 久久视频在线| 久久久久久久久久久久久久国产| 9久久9毛片又大又硬又粗| 亚洲免费黄色网址| 伊人色综合久久天天人手人婷| aaa国产一区| 一个色综合导航| 中文在线不卡| 成人性生交大片免费看无遮挡aⅴ| 亚洲人挤奶视频| 亚洲国产精品欧美久久| 国产福利电影| 青青青青草视频| 亚洲成人福利在线观看| 精品人妻无码一区二区性色| 在线视频在线视频7m国产| 国产精华一区二区三区| 一个人看的日本免费视频| silk一区二区三区精品视频| 久久久久一区二区| 中文字幕久久久av一区| 亚洲天堂av网| 国产在线视频三区| 中文字幕精品国产| 国产成人精品一区二区色戒| 91久久精品www人人做人人爽| 2020国产精品极品色在线观看| 一区二区三区视频国产日韩| 免费成人深夜天涯网站| 日日悠悠久久| 福利资源在线久| 午夜精品一区二区三区在线| 国产在线国偷精品免费看| 亚洲免费观看| 国产一区二区三区黄视频| 亚洲综合色在线观看| 无套内谢丰满少妇中文字幕| av一区二区三区免费观看| 亚洲精品欧美极品| 国产精品不卡在线| 日韩欧美激情电影| 激情综合网av| 国产精品久久久久久久久久新婚| 亚洲天堂av在线| 国产精品日韩精品中文字幕| 欧美老熟妇喷水| 亚洲精品一区二区三区香蕉| 亚洲激情文学| 亚洲精品中文字幕| 欧美激情精品久久久久久变态| 国产呦萝稀缺另类资源| 亚洲裸体俱乐部裸体舞表演av| 国产美女视频免费观看下载软件| 999视频在线免费观看| 不卡在线一区二区| 黄色a级三级三级三级| 色哟哟精品观看| 亚洲人成啪啪网站| 天堂社区 天堂综合网 天堂资源最新版| 日本网站免费在线观看| 亚洲欧美日韩一级| 国产精品suv一区二区69| 天天操天天干视频| 黄色网在线播放| 人妻无码中文字幕| 日韩女在线观看| xxx免费观看| 欧美成人片在线| 老熟妻内射精品一区| 久久嫩草精品久久久精品| 欧洲视频在线免费观看| 欧美国产亚洲视频| 国产亚洲a∨片在线观看| 99久9在线视频| 波多野结衣黄色网址| 91精品久久久久久久| 日本aⅴ亚洲精品中文乱码| 久草资源站在线观看| 十八禁视频网站在线观看| 亚洲第一狼人区| 久久精品国产亚洲| 无码人妻久久一区二区三区| 欧美一区在线视频| 日本综合在线观看| 97一区二区三区| 最新中文字幕在线观看视频| 再深点灬舒服灬太大了添少妇视频| 亚洲精品久久久久久国产精华液| 欧美行性性性o00x| 影音先锋中文字幕在线视频| 青青青视频在线免费观看| 亚洲人成在线观看一区二区| 濑亚美莉大战黑人中文字幕| 国产精品日产欧美久久久久| 国产精品久久久久久久久婷婷| 黄色网在线视频| 欧美videossexotv100| 中文字幕人成高清视频| av免费在线免费观看| 日韩大陆av| 国产丝袜一区二区| 日韩精品一区二区在线视频| 亚洲av无码一区二区三区dv| 欧美高清另类hdvideosexjaⅴ| 青青青国产在线观看| 全部免费的黄色毛片| 成人午夜电影在线播放| 日韩一级片av| 91精品国产91久久久久游泳池| 欧美国产小视频| 碰碰视频免费| 日韩一区欧美一区| 久久大大胆人体| 123成人网| 国产黄色免费观看| 欧美激情xxxx| 国产美女高潮视频| a级黄色一级片| 在线观看视频h| www.色精品| 美女被内谢流白浆高视频| 非洲黑人最猛性xxxx交| 久久精品99国产精品| 天天色 色综合| 国产偷v国产偷v亚洲高清| 男生和女生一起差差差视频| 国产精品国产一区二区三区四区| 成人性生生活性生交12| 国产白嫩美女无套久久| 日韩中文字幕在线视频播放| 天天综合中文字幕| 日本不卡影院| 一级片视频在线观看| 久久久在线视频| 成人私拍视频| 亚州视频一区二区三区| 久久免费视频色| 清纯唯美日韩| 小黄鸭精品aⅴ导航网站入口| 午夜激情福利视频| 一区二区精品在线观看| 国产小视频免费在线网址| 日韩国产一区二区| 久久福利视频网| 二区三区中文字幕| 奇米一区二区三区四区久久| 中文字幕亚洲一区| 国产精品视频久| 欧美艹逼视频| 成人永久免费| 国产成人avxxxxx在线看| 2018中文字幕在线观看| 国产精品性做久久久久久| 亚洲第一精品区| 国产极品粉嫩福利姬萌白酱| 1024视频在线| 成人手机在线视频| 色噜噜狠狠狠综合欧洲色8| 日韩精品三区四区| 国产不卡精品一区二区三区| 中国jizz妇女jizz妇女| 亚洲第一论坛sis| 4hu四虎永久在线观看| 久视频在线观看| 国产欧美一区二区三区不卡高清| 亚洲欧洲一二区| 91成人免费在线视频| 91文字幕巨乱亚洲香蕉| 国产黄a三级三级三级av在线看| 深夜做爰性大片蜜桃| 国产精品久久777777换脸| 波多野结衣视频在线观看| 亚洲国产成人精品综合99| 国产精品毛片va一区二区三区| 国产一区二中文字幕在线看| 日本电影欧美片| 在线影院国内精品| 日韩经典第一页| 麻豆福利在线观看| 久久久久久久久久久久久久久久久久久| av欧美精品.com| 中文字幕亚洲情99在线| 国产区日韩欧美| 久久亚洲综合国产精品99麻豆精品福利| 蜜桃av一区二区在线观看| 全国男人的天堂网| 亚洲成人精品| 国产一区免费| 黄色片视频在线播放| 久久久一二三| 无码人妻一区二区三区一| 亚洲一区二区三区在线看| 欧美精品成人91久久久久久久| 久久久久久久久久久久久女国产乱| 亚洲免费999| 麻豆tv入口在线看| av电影在线免费| 日韩一区二区在线免费| 26uuu国产一区二区三区| 在线免费激情视频| 欧美性猛交xxxx乱大交蜜桃| 国产精品av免费在线观看| 欧美多人爱爱视频网站| 一区二区三区产品免费精品久久75| av一区二区在线观看| 国产夫妻自拍一区| 欧美成人久久电影香蕉|