我知道派生类的列表<>不能直接分配给基类的列表<>。但是它如何允许将派生类的相同列表<>分配给IEnumerable类型的基类参数。如何将List <DerivedClass>分配给IEnumerable <BaseClass>参数?
public class Base
{}
public class Derived : Base
{}
public class Test
{
// inside some method...
List<Derived> someElements;
ReadElements(someElements);
public void ReadElements(List<Base> elements) // this throws compile error
{...}
public void ReadElements(IEnumerable<Base> elements) // this one works
{...}
}
我知道List
是IEnumerable
的实施和支持索引和修改的元素,但我似乎不明白这个部分?有人可以解释吗? 谢谢。
请参阅[协方差和反变量](http://blogs.msdn.com/b/csharpfaq/archive/2010/02/16/covariance-and-contravariance-faq.aspx) – Magnus 2012-01-12 21:42:48