亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

抗變與協變

2019-11-14 14:01:41
字體:
來源:轉載
供稿:網友

前言

  工作一年了,平時也喜歡看看書,逛逛園子;但說到寫博,還真的沒有,說到底,只有一個字:懶!現在想改掉這個“毛病”了,希望多把平時工作學習到的知識和遇到的問題記錄下來,一是可以梳理自己的思路,加深理解;二是可以向更多的朋友學習和分享;三是可以鍛煉自己的寫作水平;可謂百利而無一害!

  平時偶爾會遇到一些小問題,很多時候都是查了記住,或者簡單寫寫筆記,當時理解就過了,沒有形成文檔,等過段時間又遇到同樣的問題,又要重新去查去理解,甚是麻煩。希望以后把這些東西寫成文章,盡管可能是很小的問題,也當做筆記記錄。關于c#的一些概念、語法或者規范,就記錄在【c#筆記】。由于不是初學邊學邊記,所以沒有一定的時間和學習順序,只是平時遇到覺得有必要,就記錄下來。

一、遇到問題

  工作是基于.net3.5開發,實際過程遇到一個問題。假設我們有一個 Base 類,一個 Derived 類,Derived 繼承了 Base。如下:

    class Base    {    }    class Derived : Base    {    }  

  當我用IEnumerable<Base> 作為形參,List<Derived> 作為實參時,發現編譯出錯了!原本父類作為形參,傳遞子類是再正常不過的,但在泛型中確編譯不通過。

二、探究問題

  通常我們在設計參數和返回值都有一個原則,參數要盡可能“泛”,返回值要盡可能的“細”。泛,指得是用接口或者父類作為參數,這樣可以接收更多的參數類型;細,指的是返回具體類型,這樣可以更好說明方法的作用。

  舉個例子:

        string[] strs = new string[] { "hello", "Word" };        //這樣的缺點是數組就傳遞不了了,還要調用一次 ToList()        static void Test_1(List<string> list)        {        }        //正確的做法,應該用IEnumerable<T>        static void Test_2(IEnumerable<string> list)        {        }  

  可見,參數的“泛”可以提供更大的靈活性。

  接著就進入本次的主題:抗變與協變。需要說明的是,抗變與協變是在4.0開始支持的。假設有一個方法需要Derived集合作為參數,那么基于上面的原則,我們會這樣設計:

  static void TestIn(IEnumerable<Base> bases)  {  }

  接著我們向下面這樣調用,在3.5下就會發現編譯不通過,提示無法將 List<Derived>轉換為IEnumerable<Base>。

 List<Derived> listIn = new List<Derived>(); TestIn(listIn);

  同樣的代碼,我們拿到4.0下,發現編譯通過了。比較 IEnumerable泛型接口,我們發現4.0下的定義為:  

 public interface IEnumerable<out T> : IEnumerable

  發現多了 out 關鍵字,這就是協變。msdn對于類型參數的解釋是:out 要枚舉的對象的類型。該類型參數是協變的。即可以使用指定的類型或派生程度更高的類型。

  我們可以這樣理解協變,參數的類型就是協變的,父類用子類代替,也就是子類當父類使用。

  理解協變后,抗變就好理解了。函數的返回值就是抗變的,子類用父類代替,也就是父類當子類使用。在非泛型的情況下,我們可以這樣接收方法的返回值:  

  object obj = Test_3();  static string Test_3()  {    return "hello world";  }  

  當然,我們覺得這樣調用也應該是可以的:  

  IEnumerable<Base> listOut = TestOut();  static IEnumerable<Derived> TestOut()  {    return new List<Derived>();  }

  在3.5下,這樣同樣會編譯錯誤。4.0下就沒有問題。

三、總結

   協變與抗變的概念其實我們經常遇到(參數協變、返回值抗變),而且我們也會習慣的這樣設計。但對于泛型,.net 到了4.0才提供這樣的支持,這為泛型的使用提供了更大的靈活性。

  ok,實際我們不怎么需要去理解概念性的東西,知道原理和理解怎么使用即可。以上是我的個人理解,如果有朋友想要更深入的理解,可以參見msdn。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
一区二区三区国产视频| 亚洲精品动漫100p| 青青久久av北条麻妃海外网| 久久99久久久久久久噜噜| 日产日韩在线亚洲欧美| 久久久这里只有精品视频| 日韩欧美国产高清91| 亚洲永久免费观看| 日本欧美国产在线| 国产成人aa精品一区在线播放| 性欧美暴力猛交69hd| 国产日韩精品在线观看| 国产精品久久一区| 国产v综合ⅴ日韩v欧美大片| 黄色一区二区三区| 国产91精品久久久久久| 国产亚洲欧美aaaa| 欧美性猛交xxxx富婆| 亚洲欧洲中文天堂| 日韩精品在线观看视频| 久久国产精品久久国产精品| 国产精品男人的天堂| 精品国产拍在线观看| 久久久www成人免费精品| 亚洲精品国产精品乱码不99按摩| 欧美一级视频免费在线观看| 亚洲成人激情视频| 51色欧美片视频在线观看| 国产精品亚洲美女av网站| 久久久亚洲精选| 91免费看片网站| 欧美大秀在线观看| 久久综合伊人77777尤物| 色噜噜狠狠狠综合曰曰曰88av| 亚洲护士老师的毛茸茸最新章节| 色妞色视频一区二区三区四区| 91国产中文字幕| 国产成人a亚洲精品| 亚洲成人网在线观看| 91视频九色网站| 久久av资源网站| 亚洲女人初尝黑人巨大| 久久天天躁狠狠躁夜夜爽蜜月| 一区二区中文字幕| 91精品国产91| 欧美日韩国产一区二区三区| 精品五月天久久| 亚洲高清久久网| 国产亚洲日本欧美韩国| 国产福利精品av综合导导航| 日本成人免费在线| 成人亚洲欧美一区二区三区| 成人午夜一级二级三级| 欧美日韩亚洲系列| 欧美野外猛男的大粗鳮| 亚洲а∨天堂久久精品9966| 欧美最近摘花xxxx摘花| 亚洲欧美日韩中文在线| 日韩精品中文在线观看| 在线播放日韩精品| 欧美高清第一页| 日韩美女免费观看| 91精品国产色综合久久不卡98口| 久久琪琪电影院| 中文字幕日韩视频| 51精品国产黑色丝袜高跟鞋| 亚洲欧美国产一区二区三区| 日韩一区二区三区xxxx| 日韩电影视频免费| 91手机视频在线观看| 国产成人jvid在线播放| 中文字幕亚洲无线码在线一区| 欧美诱惑福利视频| 国产午夜精品美女视频明星a级| 国产91在线高潮白浆在线观看| 97视频免费在线观看| 欧美日韩激情视频8区| 欧美国产日本在线| 青草青草久热精品视频在线观看| 免费97视频在线精品国自产拍| 97成人精品区在线播放| 成人免费自拍视频| 亚洲精品wwwww| 欧美午夜精品久久久久久人妖| 精品亚洲精品福利线在观看| 亚洲精品视频二区| 奇米4444一区二区三区| 亚洲精品视频在线播放| 伊人久久综合97精品| 亚洲国产成人精品久久久国产成人一区| 国产精品美女在线观看| 国产精品wwww| 久久精品国产亚洲精品| 欧美夜福利tv在线| 日韩精品极品在线观看| 亚洲国产精品久久久久秋霞蜜臀| 久久精品国产2020观看福利| 精品欧美激情精品一区| 国产在线拍偷自揄拍精品| 亚洲精品乱码久久久久久按摩观| 97精品伊人久久久大香线蕉| 久久精品电影一区二区| 日本久久久久亚洲中字幕| 91久久精品国产| 亚洲免费人成在线视频观看| 成人国产精品av| 8090理伦午夜在线电影| 久久久久久亚洲| 色婷婷综合久久久久| 欧美大胆在线视频| 国产精品久久久久久久av电影| 欧美视频精品一区| 欧美性猛交xxxx富婆弯腰| 成人精品久久久| 亚洲欧美一区二区精品久久久| 亚洲xxx自由成熟| 精品视频中文字幕| 亚洲天堂av网| 亚洲最大的免费| 在线观看国产精品91| 性金发美女69hd大尺寸| 国产精品夜间视频香蕉| 欧美激情啊啊啊| 欧美黄色片在线观看| 国产精品影片在线观看| 欧美精品免费看| 欧美性猛交丰臀xxxxx网站| 亚洲精品电影网| 欧美另类极品videosbestfree| 97精品在线观看| 久久人体大胆视频| 国产在线观看一区二区三区| 日韩免费观看在线观看| 亚洲欧洲一区二区三区久久| 91成品人片a无限观看| 日韩有码在线播放| 欧美亚洲激情在线| 最好看的2019的中文字幕视频| 一个人www欧美| 精品动漫一区二区| 欧美在线激情视频| 国产精品欧美一区二区三区奶水| 亚洲国产一区二区三区四区| 91成人在线观看国产| 国产精品9999| 国产精品高潮呻吟久久av无限| 久久久亚洲影院| 日韩美女在线观看一区| 欧美亚洲一级片| 国产精品永久免费在线| 国产精品91久久久| 日韩av在线不卡| 日韩电影视频免费| 久久天天躁狠狠躁夜夜躁2014| 国产精品成人va在线观看| www.日韩不卡电影av| 国产精品免费视频久久久| 精品一区二区三区电影| 日韩精品高清在线观看| 久久久久久久久国产精品| 国产精品久久久久久久久久久久久久| 日韩av成人在线观看| 亚洲免费电影在线观看| 精品福利一区二区|