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

为啥需要协变和逆变?

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

一个小例子

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

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6 
 7 namespace InOutStudy
 8 {
 9     class Program
10     {
11         static void Main(string[] args)
12         {
13             IEnumerable<Base> list = new List<Child> { new Child() };
14 
15             Console.WriteLine((typeof(ICollection<Base>)).IsAssignableFrom((typeof(List<Child>))));
16 
17             IWorker<Child> woker = new Worker<Base>();
18 
19             Console.WriteLine((typeof(IWorker<Child>)).IsAssignableFrom((typeof(Worker<Base>))));
20         }
21 
22         class Base { }
23 
24         class Child : Base { }
25     }
26 
27     interface IWorker<in T>
28     {
29         void Dot(T t);
30     }
31 
32     class Worker<T> : IWorker<T>
33     {
34         public void Dot(T t)
35         {
36             Console.WriteLine(t);
37         }
38     }
39 }

备注

想到逆变和协变,我就有点头疼,用着还好!

 

posted on 2013-06-29 15:23  幸福框架  阅读(776)  评论(0编辑  收藏  举报

导航

我要啦免费统计