有个父类A,被子类B继承,现在父类可以通过多态的形式调用子类,但是如果把父类和子类都放到List中就提示类型无法转换,下面贴出代码,望高手赐教
public class A
{
int test = 0;
public A()
{
test = 5;
Console.WriteLine("A 公有默认构造函数 ,test={0}", test);
}
}
class B : A
{
public B()
{
Console.WriteLine("B 公有默认构造函数");
}
}
class Program
{
static void Main(string[] args)
{
//这个多态没问题。
A a = new B();
//这行代码提示类型无法转换的问题
//无法将类型“System.Collections.Generic.List<继承.B>”隐式转换为“System.Collections.Generic.List<继承.A>”
List<A> AList = new List<B>();
Console.ReadLine();
}
}
A 、B是类型,List<A> 和 List<B>也是类型。
B继承A,但是 List<B> 不继承List<A>,当然不行。
List中只能放同一种类型,
现在A是父类,B是子类。A a=new B();是可以的。
List<A> AList = new List<B>();为什么不行呢
@小也:
晕 白说了,List<A> 看成一个整体, 是一种类型,List<B>是另一种类型,
这两种类型相同吗还是有继承?
IList<A> alist=new List<A>(); //实现
IEnumerable<A> alist=new List<B>(); //谐变
IList<A> alist= new List<B>().Cast<A>().ToList();//类型转换
楼上回答的很NICE啊