环境:
window 10
.netcore 3.1
vs2019 16.5.1
一、为什么要有协变?
首先看下面的代码:
还有下面的:
其实上面报错的是同一个问题,就是你无法用List<Fruit>指向List<Apple>!
我们的疑问在于,明明是一个盛放苹果的箱子,我们说它可以盛放水果怎么了???
下面我来说一下原因:
首先,不能根据这个类的用途去判断,因为你无法保证List这个类一定是集合(List当然是集合,但如果是Person<T>呢,它是做什么的?只是盛放东西吗?)。
其次,Apple继承自Fruit没错,但List<Apple>和List<Fruit>压根就没有继承的说法,它们是不同的类型(泛型参数类型不同也是不同的类型):Console.WriteLine(typeof(List<Apple>) == typeof(List<Fruit>));输出为:false
所以&#x