您的位置:首页 > 其它

.NET:为什么需要逆变和协变

2013-06-29 15:23 441 查看

为啥需要协变和逆变?

我目前想到的理由是:逆变和协变的目的是支持多态。

一个小例子

不明白为啥输出的是false和true。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace InOutStudy
{
class Program
{
static void Main(string[] args)
{
IEnumerable<Base> list = new List<Child> { new Child() };

Console.WriteLine((typeof(ICollection<Base>)).IsAssignableFrom((typeof(List<Child>))));

IWorker<Child> woker = new Worker<Base>();

Console.WriteLine((typeof(IWorker<Child>)).IsAssignableFrom((typeof(Worker<Base>))));
}

class Base { }

class Child : Base { }
}

interface IWorker<in T>
{
void Dot(T t);
}

class Worker<T> : IWorker<T>
{
public void Dot(T t)
{
Console.WriteLine(t);
}
}
}


备注

想到逆变和协变,我就有点头疼,用着还好!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: