首页 新闻 赞助 找找看

C#不是一般的继承、多态问题

0
悬赏园豆:5 [已解决问题] 解决于 2014-03-12 16:31

有个父类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();
}
}

小也的主页 小也 | 初学一级 | 园豆:75
提问于:2014-03-12 15:25
< >
分享
最佳答案
0

A 、B是类型,List<A> 和 List<B>也是类型。

B继承A,但是 List<B> 不继承List<A>,当然不行。

收获园豆:5
Qlin | 老鸟四级 |园豆:2403 | 2014-03-12 15:55

List中只能放同一种类型,

现在A是父类,B是子类。A a=new B();是可以的。

List<A> AList = new List<B>();为什么不行呢

小也 | 园豆:75 (初学一级) | 2014-03-12 16:04

@小也: 

晕 白说了,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();//类型转换

Qlin | 园豆:2403 (老鸟四级) | 2014-03-12 16:21
其他回答(1)
0

楼上回答的很NICE啊

丫的 | 园豆:1575 (小虾三级) | 2014-03-12 16:30
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册