欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

一篇文章看懂C#中的協(xié)變、逆變

 更新時間:2019年08月29日 09:34:37   作者:Virgil-Zhou  
這篇文章主要給大家介紹了如何通過一篇文章看懂C#中協(xié)變、逆變的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學(xué)習(xí)或者使用C#具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧

1. 基本概念

官方:協(xié)變和逆變都是術(shù)語,前者指能夠使用比原始指定的派生類型的派生程度更大(更具體的)的類型,后者指能夠使用比原始指定的派生類型的派生程度更小(不太具體的)的類型。[MSDN]

公式:

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

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

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

2. 協(xié)變(Covariance)

1) out關(guān)鍵字

     對于泛型類型參數(shù),out 關(guān)鍵字可指定類型參數(shù)是協(xié)變的。 可以在泛型接口和委托中使用 out 關(guān)鍵字。[MSDN]

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

   

           備注:泛型委托的協(xié)變原理也是一樣的。

        3) 什么是協(xié)變?

           協(xié)變就是對具體成員的輸出參數(shù)進行一次類型轉(zhuǎn)換,且類型轉(zhuǎn)換的準(zhǔn)則是 “里氏替換原則”。

3. 逆變(Contravariance)

 1) in關(guān)鍵字

     對于泛型類型參數(shù),in 關(guān)鍵字可指定類型參數(shù)是逆變的。 可以在泛型接口和委托中使用 in 關(guān)鍵字。[MSDN]

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

     

    備注:泛型委托的逆變原理也是一樣的。

        3) 什么是逆變?

            逆變就是對具體成員的輸入?yún)?shù)進行一次類型轉(zhuǎn)換,且類型轉(zhuǎn)換的準(zhǔn)則是 “里氏替換原則”。

4. 自問自答

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

      因為它們都只能定義方法成員(接口不能定義字段),而方法成員在創(chuàng)建對象的時候是不涉及到對象內(nèi)存分配的,所以它們是類型(內(nèi)存)安全的。

      為什么不針對泛型?因為泛型類是模板類,而類成員是包含字段的,不同類型的字段是影響對象內(nèi)存分配的,沒有派生關(guān)系的類型它們是不兼容的,也是內(nèi)存不安全的。

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

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

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

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

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,謝謝大家對腳本之家的支持。

相關(guān)文章

  • C#使用日志組件log4net

    C#使用日志組件log4net

    這篇文章介紹了C#日志組件log4net的使用方法,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • UnityShader3實現(xiàn)波浪效果

    UnityShader3實現(xiàn)波浪效果

    這篇文章主要為大家詳細介紹了UnityShader3實現(xiàn)波浪效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-03-03
  • C#編寫ActiveX網(wǎng)頁截圖控件

    C#編寫ActiveX網(wǎng)頁截圖控件

    這篇文章主要介紹了C#編寫ActiveX網(wǎng)頁截圖控件,作為學(xué)習(xí)C#編寫ActiveX的一個簡單入門教程,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-06-06
  • 淺析.NET中AsyncLocal的實現(xiàn)原理

    淺析.NET中AsyncLocal的實現(xiàn)原理

    這篇文章主要為大家詳細介紹了.NET中AsyncLocal的具體實現(xiàn)原理,文中的示例代碼講解詳細,具有一定的借鑒價值,如果有講得不清晰或不準(zhǔn)確的地方,還望指出
    2023-08-08
  • C# 10個常用特性匯總

    C# 10個常用特性匯總

    這篇文章主要介紹了C# 10個常用特性,文中示例代碼非常詳細,幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • C#實現(xiàn)Windows服務(wù)安裝卸載開啟停止

    C#實現(xiàn)Windows服務(wù)安裝卸載開啟停止

    本文主要介紹了C#實現(xiàn)Windows服務(wù)安裝卸載開啟停止,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • C#中Dictionary類使用實例

    C#中Dictionary類使用實例

    這篇文章主要介紹了C#中Dictionary類使用實例,本文直接給出一個使用實例,包含一些Dictionary的基本用法,需要的朋友可以參考下
    2015-06-06
  • C#設(shè)計模式實現(xiàn)之迭代器模式

    C#設(shè)計模式實現(xiàn)之迭代器模式

    迭代器模式把對象的職責(zé)分離,職責(zé)分離可以最大限度減少彼此之間的耦合程度,從而建立一個松耦合的對象,這篇文章主要給大家介紹了關(guān)于C#設(shè)計模式實現(xiàn)之迭代器模式的相關(guān)資料,需要的朋友可以參考下
    2021-08-08
  • C#基于SerialPort類實現(xiàn)串口通訊詳解

    C#基于SerialPort類實現(xiàn)串口通訊詳解

    這篇文章主要為大家詳細介紹了C#基于SerialPort類實現(xiàn)串口通訊,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • 實例詳解C#正則表達式

    實例詳解C#正則表達式

    這篇文章主要通過實例詳解C#正則表達式的相關(guān)資料,需要的朋友可以參考下
    2016-01-01

最新評論