我有这个类和方法
public class Base{ // members;}
public class Derived : Base{// members}
myMethod(IEnumerable<Base> in1);
尝试像这样呼叫myMethod
:
myMethod(IEnumerable<Derived > in2);
并获得编译错误? 我应该如何解决
答案 0 :(得分:1)
您期望的是协方差。这意味着实际的泛型类型比所需的更具体。您可以看到协方差不适用于所有泛型类:List<Derived>
不应分配给List<Base>
,因为如果将Base
个内容添加到列表中会发生什么情况,实际上是Derived
个实例的列表?因此IEnumerable
是协变而IList
是不变。
此概念已应用于.NET 4.0中的集合类。当您使用.NET的版本时&lt; 4,那些课程是不变的。