具有派生类参数的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);

并得到编译错误?我应该如何解决

具有派生类参数的Colletion

您所期望的被称为协方差。这意味着实际的泛型类型比所需的泛型类型更具体。您可以看到协方差并不适用于所有泛型类:List<Derived>不应该分配给List<Base>,因为如果您将Base无形项添加到列表中会发生什么,而列表实际上是Derived实例的列表?因此IEnumerable协变IList不变量

此概念已应用于.NET 4.0中的集合类。当您使用.NET<4,这些类是不变的。