2014-05-14 46 views
1

我:继承(与Collection.Generic工作)

class A : IHelp 

class B : IHelp 

然后,我想做这样的事情,如:

List<A> alist = new List<A>(); 

List<IHelp> hList = (List<IHelp>) alist; // Error!!! 

我是一个初学编程的。我将非常感谢你的详细解答。感谢帮助!

+2

查找协变和逆变。 – paqogomez

回答

3

你不能这样做,因为它会违反原始列表的限制。假设这就像你说的(它实际上给出了一个错误,但假设它的工作原理):

List<A> aList = new List<A>(); 
List<IHelp> hList = aList; // Compile error, but say it would have worked.. 

然后,你可以做:

hList.add(new B()); // WHAT?? 

这是没有意义的,因为你永远无法将类型B的元素添加到类型A的原始列表。这就是为什么C#阻止您完成您想要的任务。

0

这两个类股的一些属性(例如:toString()方法) 列表可以使用这些属性只

,我们可以这样做:

List<object> list = new List<object>(); 
list.Add("foo"); 
list.Add(5); 

foreach(object o in list) 
{ 
    Console.WriteLine(o.ToString()); 
} 

我有同样的问题。

将读取:http://msdn.microsoft.com/en-gb/library/ee207183.aspx

这里的东西怪异:

object[] array = new string[10];  // Possible <-- /!\ not secured. 
List<object> list = new List<string>(); // Impossible 

编辑:是的,我不明白你的榜样,元^^”

但是,我们可以不想添加内容,只需阅读。

ReadOnlyCollections不逆变太:/

编辑2:妈的。我刚刚了解这个问题。 (在 '出' 关键字)

我没有.NET 4.0:“(我将使用阵列^^

(4.0 - >的IEnumerable能够)

(使用Unity3D)