欧美大屁股bbbbxxxx,狼人大香伊蕉国产www亚洲,男ji大巴进入女人的视频小说,男人把ji大巴放进女人免费视频,免费情侣作爱视频

歡迎來到入門教程網(wǎng)!

C#教程

當前位置:主頁 > 軟件編程 > C#教程 >

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

來源:本站原創(chuàng)|時間:2020-01-10|欄目:C#教程|點擊: 次

1. 基本概念

官方:協(xié)變和逆變都是術(shù)語,前者指能夠使用比原始指定的派生類型的派生程度更大(更具體的)的類型,后者指能夠使用比原始指定的派生類型的派生程度更?。ú惶唧w的)的類型。[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) 魯迅:一張圖勝過千言萬語(圖小看不清,單機鼠標右鍵 -> 在新標簽頁中打開圖片)

   

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

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

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

3. 逆變(Contravariance)

 1) in關(guān)鍵字

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

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

     

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

        3) 什么是逆變?

            逆變就是對具體成員的輸入?yún)?shù)進行一次類型轉(zhuǎn)換,且類型轉(zhuǎ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é)習或者工作具有一定的參考學(xué)習價值,謝謝大家對我們的支持。

上一篇:C#日期格式字符串的相互轉(zhuǎn)換操作實例分析

欄    目:C#教程

下一篇:C# 導(dǎo)出Excel的6種簡單方法實現(xiàn)

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

本文地址:http://mengdiqiu.com.cn/a1/C_jiaocheng/4666.html

網(wǎng)頁制作CMS教程網(wǎng)絡(luò)編程軟件編程腳本語言數(shù)據(jù)庫服務(wù)器

如果侵犯了您的權(quán)利,請與我們聯(lián)系,我們將在24小時內(nèi)進行處理、任何非本站因素導(dǎo)致的法律后果,本站均不負任何責任。

聯(lián)系QQ:835971066 | 郵箱:835971066#qq.com(#換成@)

Copyright © 2002-2020 腳本教程網(wǎng) 版權(quán)所有