四虎精品视频-四虎精品成人免费网站-四虎黄色网-四虎国产视频-国产免费91-国产蜜臀97一区二区三区

一句話清晰總結協變(covariant)和逆變 (contravariant)

  看到過園子里面幾篇協變和逆變的文章,但是總覺得寫得不夠清晰,文章這東西最重要的是要把自己想表達的觀點表達出來,這個過程應該是把復雜的東西消化出來從而簡單化,清晰化,而不是故弄玄虛,反其道而行之,下面我們言歸正傳啦。

  我們先來看一段MSDN原文給協變,逆變和變體下個定義:

A generic interface or delegate is called variant if its generic parameters are declared covariant or contravariant. Both C# and Visual Basic enable you to create your own variant interfaces and delegates.

  如果泛型接口或委托的泛型參數聲明為協變或逆變,則將該泛型接口或委托稱為“變體”。 C# 和 Visual Basic 都允許您創建自己的變體接口和委托。

  通俗解釋:

  變體定義 - 帶有協變或逆變參數的泛型接口或委托。也就是說協變和逆變主要關注點在泛型接口或委托。

  那什么又是協變和逆變呢?

  協變

  我們先來看下面一個來自MSDN的例子:

// 協變
IEnumerable<string> strings = new List<string>();
IEnumerable<object> objects = strings;
//大家看到了么一個聲明為IEnumerable<string>的接口類型被賦給了一個更低級別的IEnumerable<object>.
//對,這就是協變。再來看一個例子:
class Base
{
public static void PrintBases(IEnumerable<Base> bases)
{
foreach(Base b in bases)
{
Console.WriteLine(b);
}

}
}

class Derived : Base
{
public static void Main()
{
List<Derived> dlist = new List<Derived>();
Derived.PrintBases(dlist);
     //由于IEnumerable<T>接口是協變的,所以PrintBases(IEnumerable<Base> bases)
//可以接收一個更加具體化的IEnumerable<Derived>作為其參數。
IEnumerable<Base> bIEnum = dlist;
}
}

NET技術一句話清晰總結協變(covariant)和逆變 (contravariant),轉載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

主站蜘蛛池模板: 三年级上册修改病句专项训练| 黑暗圣经在线观看| 《竹升妹之以牙还牙》| 什么水果是热性的| 桐谷| 无所畏惧40集演员表| 康熙王朝电视剧多少集| 红旗车驾驶员个人主要事迹材料| 韩国女主播热舞视频| 果宝特攻5 2030| 听说你喜欢我电视剧剧情介绍| 电影《donselya》在线观看| 工程制图答案| 杨国| 欲海浮沉| 高粱红了 电视剧| 电影《埋葬巴斯托》| gay movies| 文史茶馆| 电影《真爱》完整播放| 演员王磊| 画眉公鸟声音| 电影《堡垒》| 无声真相电影免费播放| jagger| 最爱的人是你韩剧免费观看| 叶子楣代表咋| 淡蓝色的雨简谱 | 中国安全生产报| 调教 打屁股 鞭打 拍击视频| 成都屏蔽机柜厂| 好戏一出| department什么意思| kaori主演电影在线观看| 好像也没那么热血沸腾电影免费观看 | 我在碧桂园的1000天| nina hartley| 最佳男朋友| 八年级上册英语课文| 91天堂| 灵界诱惑 电影|