具有派生类参数的Colletion
本文关键字:Colletion 参数 派生 | 更新日期: 2023-09-27 18:28:43
我有这个类和方法
public class Base{ // members;}
public class Derived : Base{// members}
myMethod(IEnumerable<Base> in1);
试着这样调用myMethod
:
myMethod(IEnumerable<Derived > in2);
并得到编译错误?我应该如何解决
您所期望的被称为协方差。这意味着实际的泛型类型比所需的泛型类型更具体。您可以看到协方差并不适用于所有泛型类:List<Derived>
不应该分配给List<Base>
,因为如果您将Base
无形项添加到列表中会发生什么,而列表实际上是Derived
实例的列表?因此IEnumerable
是协变,IList
是不变量。
此概念已应用于.NET 4.0中的集合类。当您使用.NET<4,这些类是不变的。