继承(使用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!!!
我是一个初级程序员。我将非常感谢您的详细答复。谢谢你的帮助!
不能进行这样的强制转换,因为它将违反原始列表的约束。假设它像你说的那样工作(它实际上给出了一个错误,但假设它工作):
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)