使用派生类参数进行集合

时间:2014-11-02 13:40:47

标签: c# inheritance ienumerable

我有这个类和方法

public class Base{ // members;}
public class Derived : Base{// members} 
myMethod(IEnumerable<Base> in1);

尝试像这样呼叫myMethod

myMethod(IEnumerable<Derived > in2);

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

1 个答案:

答案 0 :(得分:1)

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

此概念已应用于.NET 4.0中的集合类。当您使用.NET的版本时&lt; 4,那些课程是不变的。