class A : IHelp
class B : IHelp
然后,我想做这样的事情,如:
List<A> alist = new List<A>();
List<IHelp> hList = (List<IHelp>) alist; // Error!!!
我是一个初学编程的。我将非常感谢你的详细解答。感谢帮助!
class A : IHelp
class B : IHelp
然后,我想做这样的事情,如:
List<A> alist = new List<A>();
List<IHelp> hList = (List<IHelp>) alist; // Error!!!
我是一个初学编程的。我将非常感谢你的详细解答。感谢帮助!
你不能这样做,因为它会违反原始列表的限制。假设这就像你说的(它实际上给出了一个错误,但假设它的工作原理):
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
编辑:是的,我不明白你的榜样,元^^”
但是,我们可以不想添加内容,只需阅读。
ReadOnlyCollections不逆变太:/
编辑2:妈的。我刚刚了解这个问题。 (在 '出' 关键字)
我没有.NET 4.0:“(我将使用阵列^^
(4.0 - >的IEnumerable能够)
(使用Unity3D)
查找协变和逆变。 – paqogomez