.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 }
备注
想到逆变和协变,我就有点头疼,用着还好!