List <t>继承行为奇怪</t>

时间:2012-12-10 14:29:20

标签: c# list generics inheritance

  

可能重复:
  C# variance problem: Assigning List<Derived> as List<Base>

我遇到列表继承问题。它看起来像具有更多指定成员的通用List无法转换为具有其基本成员的列表。 看看这个:

class A
{
    public int aValue {get; set;}
}

class B : A
{
    public int anotherValue {get; set;}
}

您现在可能希望List<B>也是List<A>,但事实并非如此。 List<A> myList = new List<B>()是不可能的。甚至不是List<A> myList = (List<A>)new List<B>()我在面向对象编程3年后错过了一些基本概念吗?

2 个答案:

答案 0 :(得分:6)

烨!

假设你可以做到

List<A> myList = new List<B>();

然后假设你有一个班级

class C : A { public int aDifferentValue { get; set; } }

CA,因此您可以调用myList.Add(new C()),因为myList认为它是List<A>

但是C不是B所以myList - 真的 a List<B> - 不能保持C 1}}。


相反,假设你可以做

List<B> myList = new List<A>();

您可以愉快地致电myList.Add(new B()),因为BA

但是假设其他内容在您的列表中卡住C(因为CA)。

然后myList[0]可能会返回C - 这不是B

答案 1 :(得分:-2)

不允许进行简单的转换 现在使用

List<B> lb = new List<B> { ... };
List<A> la = lb.Cast<A>().ToList();