继承(使用Collection.Generic)

本文关键字:Generic Collection 使用 继承 | 更新日期: 2023-09-27 18:03:17

我有:

class A : IHelp
class B : IHelp

然后我想做这样的事情:

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

我是一个初级程序员。我将非常感谢您的详细答复。谢谢你的帮助!

继承(使用Collection.Generic)

不能进行这样的强制转换,因为它将违反原始列表的约束。假设它像你说的那样工作(它实际上给出了一个错误,但假设它工作):

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#阻止你进行想要的赋值的原因。

这两个类共享一些属性(例如: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

编辑:是的,我不明白你的例子,meta ^^'

但是,我们可能不想添加一些东西,只是阅读。

ReadOnlyCollections也不是逆变的:/

编辑2:该死。我刚刚明白了这个问题。('out'关键字)

我没有。net 4.0:'(我将使用Arrays ^^

(使用4.0 -> IEnumerable可以实现)

(使用Unity3D)