天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

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

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

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

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.

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

  通俗解釋:

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

  那什么又是協(xié)變和逆變呢?

  協(xié)變

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

// 協(xié)變
IEnumerable<string> strings = new List<string>();
IEnumerable<object> objects = strings;
//大家看到了么一個聲明為IEnumerable<string>的接口類型被賦給了一個更低級別的IEnumerable<object>.
//對,這就是協(xié)變。再來看一個例子:
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>接口是協(xié)變的,所以PrintBases(IEnumerable<Base> bases)
//可以接收一個更加具體化的IEnumerable<Derived>作為其參數(shù)。
IEnumerable<Base> bIEnum = dlist;
}
}

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

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

主站蜘蛛池模板: 国产伊人自拍 | AV精品爆乳纯肉H漫网站 | 五月丁香啪啪. | 国产精品亚洲高清一区二区 | 精品国产在线观看福利 | 色综合久久88色综合天天提莫 | 日韩精品无码视频一区二区蜜桃 | 无人区免费一二三四乱码 | 乱叫抽搐流白浆免费视频 | 调教椅上的调教SM总裁被调教 | 伦理电影2499伦理片 | caoporon超碰在线视频 | 3D漫画H精品啪啪无码 | 兰桂坊人成社区亚洲精品 | 快穿做妓女好爽H | 被黑人做的白浆直流 | 被室友C哭调教双性 | 久色视频网 | 久久成人a毛片免费观看网站 | 久色视频网 | 青青青青久久久久国产的 | 久久精品亚洲AV中文2区金莲 | 久久6699精品国产人妻 | 99久久热视频只有精品 | 强奷漂亮女老板在线播放 | 青青草原国产在线 | 午夜福利体验免费体验区 | 亚洲AV怡红院AV男人的天堂 | 九九大香尹人视频免费 | 成人区精品一区二区不卡AV免费 | 最近最新的日本字幕MV | 国产AV亚洲一区精午夜麻豆 | 国产三级多多影院 | 国产精品永久AV无码视频 | 性一交一无一伦一精一品 | 午夜AV内射一区二区三区红桃视 | 色综合久久久久久 | 日本二区三区欧美亚洲国 | 久久视频精品3线视频在线观看 | 洗濯屋H纯肉动漫在线观看 羲义嫁密着中出交尾gvg794 | 欲乱艳荡少寡妇全文免费 |