<ul id="qxxfc"><fieldset id="qxxfc"><tr id="qxxfc"></tr></fieldset></ul>


      1. 基本概念

      官方:
      協(xié)變和逆變都是術(shù)語,前者指能夠使用比原始指定的派生類型的派生程度更大(更具體的)的類型,后者指能夠使用比原始指定的派生類型的派生程度更小(不太具體的)的類型。
      [MSDN]
      <https://docs.microsoft.com/zh-cn/dotnet/standard/generics/covariance-and-contravariance>

      公式:

      ? ? ? ? ? 協(xié)變:IFoo<父類> = IFoo<子類>;

      ? ? ? ? ? 逆變:IBar<子類> =? IBar<父類>;

      暫時(shí)不理解沒關(guān)系,您接著往下看。

      2. 協(xié)變(Covariance)

      1) out關(guān)鍵字

      ? ? ?對(duì)于泛型類型參數(shù),out?關(guān)鍵字可指定類型參數(shù)是協(xié)變的。?可以在泛型接口和委托中使用?out?關(guān)鍵字。[MSDN]
      <https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/keywords/out-generic-modifier>
      ?

      2) 魯迅:一張圖勝過千言萬語(圖小看不清,單機(jī)鼠標(biāo)右鍵 -> 在新標(biāo)簽頁中打開圖片)

      ? ??

      ? ? ? ?? ? 備注:泛型委托的協(xié)變?cè)硪彩且粯拥摹?br>
      ? ? ? ? 3) 什么是協(xié)變?

      ? ? ? ? ? ?協(xié)變就是對(duì)具體成員的輸出參數(shù)進(jìn)行一次類型轉(zhuǎn)換,且類型轉(zhuǎn)換的準(zhǔn)則是 “里氏替換原則
      <https://baike.baidu.com/item/%E9%87%8C%E6%B0%8F%E6%9B%BF%E6%8D%A2%E5%8E%9F%E5%88%99/3744239?fr=aladdin>
      ”。

      3. 逆變(Contravariance)

      ?1) in關(guān)鍵字

      ? ? ?對(duì)于泛型類型參數(shù),in?關(guān)鍵字可指定類型參數(shù)是逆變的。?可以在泛型接口和委托中使用?in?關(guān)鍵字。[MSDN]
      <https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/keywords/in-generic-modifier>

      ?2) 魯迅:一張圖勝過千言萬語(圖小看不清,單機(jī)鼠標(biāo)右鍵 ->?在新標(biāo)簽頁中打開圖片)

      ? ? ??

      ? ? 備注:泛型委托的逆變?cè)硪彩且粯拥摹?br>
      ? ? ? ? 3) 什么是逆變?

      ? ? ? ? ? ? 逆變就是對(duì)具體成員的輸入?yún)?shù)進(jìn)行一次類型轉(zhuǎn)換,且類型轉(zhuǎn)換的準(zhǔn)則是 “里氏替換原則
      <https://baike.baidu.com/item/%E9%87%8C%E6%B0%8F%E6%9B%BF%E6%8D%A2%E5%8E%9F%E5%88%99/3744239?fr=aladdin>
      ”。

      4. 自問自答

      1)協(xié)變、逆變 為什么只能針對(duì)泛型接口或者委托?而不能針對(duì)泛型類?

      ? ? ? 因?yàn)樗鼈兌贾荒芏x方法成員(接口不能定義字段),而方法成員在創(chuàng)建對(duì)象的時(shí)候是不涉及到對(duì)象內(nèi)存分配的,所以它們是類型(內(nèi)存)安全的。

      ? ? ?
      為什么不針對(duì)泛型?因?yàn)榉盒皖愂悄0孱悾惓蓡T是包含字段的,不同類型的字段是影響對(duì)象內(nèi)存分配的,沒有派生關(guān)系的類型它們是不兼容的,也是內(nèi)存不安全的。

      2)協(xié)變、逆變 為什么是類型安全的?

      ? ? ? 本質(zhì)上是里氏替換原則,由里氏替換原則可知:派生程度小的是派生程度大的子集,所以子類替換父類的位置整個(gè)程序功能都不會(huì)發(fā)生改變。

      3)官方對(duì)?協(xié)變、逆變 的定義現(xiàn)在是否能看懂?

      ? ? ??
      上面看懂了,官方定義肯定也是沒問題的。派生程度小可以理解為基類,派生程度大可以理解為子類或派生類,至于為什么用程度這個(gè)詞,是因?yàn)槔^承鏈的深度是沒限制的。

      ?

      友情鏈接
      ioDraw流程圖
      API參考文檔
      OK工具箱
      云服務(wù)器優(yōu)惠
      阿里云優(yōu)惠券
      騰訊云優(yōu)惠券
      京東云優(yōu)惠券
      站點(diǎn)信息
      問題反饋
      郵箱:[email protected]
      QQ群:637538335
      關(guān)注微信

        <ul id="qxxfc"><fieldset id="qxxfc"><tr id="qxxfc"></tr></fieldset></ul>
          精品黄网站 | 你懂得av | 午夜视频啊啊啊 | 日韩性爱视频无码 | 中国一级操逼视频 | xxfree性人妖hd丝袜 | 赵总极品寻花最新章节更新 | 散兵被到爽高潮痉挛 | 我要看特级片 | 国产有码 |