日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

c#中关于协变性和逆变性(又叫抗变)帮助理解

發布時間:2023/12/4 C# 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c#中关于协变性和逆变性(又叫抗变)帮助理解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

今天回憶了之前看的《深入理解C#》這本書中的泛型章節,其中對泛型的可變性的理解。泛型可變性分兩種:協變和逆變。逆變也又稱為抗變。

 怎么理解這兩個名詞的意思:

  ①:協變即為在泛型接口類型中使用out標識的類型參數。協變的字面意思是“與變化的方向相同”②逆變那就是用in來標識的泛型接口類型的類型參數。逆變的字面意思是“與變化的方向相反”

  需要注意的是無論是協變還是逆變也只能在泛型接口中來使用。

  先來舉個基本的例子,來加強你對可變性的理解。在C#中有隱式類型轉換,比如:


string?str =?"nibian";object?str1 = str;Console.WriteLine(str1);

  

  大家都知道string類型是object類型的子類型,即string->object為子->父;從子類型到父類型的轉換是隱式類型轉換。

舉個例子:


interface?IDemo<out?T>???{???????T Method(string?str);???}???class?One : IDemo<string>???{???????public?string?Method(string?str)???????{???????????return?str;???????}???}???class?Two : IDemo<object>???{???????public?object?Method(string?str)???????{???????????return?str;???????}???}???class?Program???{???????static?void?Main(string[] args)???????{???????????IDemo<string> one =?new?One();???????????IDemo<object> two;???????????two = one;???????????Console.WriteLine(two.Method("2222"));???????}???}

  

因為string是object類型的子類,在這里IDemo<string>和IDemo<object>類型之間也存在著類型轉換的,從IDemo<string>向IDemo<object>進行的轉換可以看成是子類型向父類型的隱式轉換,它的這個用法就是協變。(這里必須要用out)

相反的我們在來看一下有關逆變的代碼:


interface?IDemo<in?T>???{???????string?Method(T str);???}???class?One : IDemo<string>???{???????public?string?Method(string?str)???????{???????????return?str;???????}???}???class?Two : IDemo<object>???{???????public?string?Method(object?str)???????{???????????return?str.ToString();???????}???}???class?Program???{???????static?void?Main(string[] args)???????{???????????IDemo<object> two =?new?Two();???????????IDemo<string> one;???????????one = two;???????????Console.WriteLine(one.Method("2222"));???????}???}

  同樣的從IDemo<object>類型向IDemo<string>類型的轉換,但是在這里我們卻將父類型隱式轉換為子類型的用法叫逆變。(這里必須要用in)

總結:協變和逆變就是在泛型接口類型將類型參數作為輸入和輸出的情況下,對類型間進行隱式轉換的規律。

原文地址:?https://www.cnblogs.com/yubabuneng/p/9506037.html


.NET社區新聞,深度好文,歡迎訪問公眾號文章匯總 http://www.csharpkit.com

總結

以上是生活随笔為你收集整理的c#中关于协变性和逆变性(又叫抗变)帮助理解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。