【发布时间】:2013-06-02 17:58:29
【问题描述】:
我正在尝试将 DerivedClass 的列表传递给一个接受 BaseClass 列表的函数,但我得到了错误:
cannot convert from
'System.Collections.Generic.List<ConsoleApplication1.DerivedClass>'
to
'System.Collections.Generic.List<ConsoleApplication1.BaseClass>'
现在我可以将我的List<DerivedClass> 转换为List<BaseClass>,但除非我明白为什么编译器不允许这样做,否则我会觉得不自在。
我发现的解释只是说它以某种方式违反了类型安全,但我没有看到它。谁能帮帮我?
编译器允许从List<DerivedClass> 转换为List<BaseClass> 的风险是什么?
这是我的 SSCCE:
class Program
{
public static void Main()
{
BaseClass bc = new DerivedClass(); // works fine
List<BaseClass> bcl = new List<DerivedClass>(); // this line has an error
doSomething(new List<DerivedClass>()); // this line has an error
}
public void doSomething(List<BaseClass> bc)
{
// do something with bc
}
}
class BaseClass
{
}
class DerivedClass : BaseClass
{
}
【问题讨论】:
-
类派生自其基类,但
List<Derived>不是派生自List<Base>。 -
@TimSchmelter 这是否意味着这种继承可能成为
Generic<Derived>可以被认为是从Generic<Base>派生的功能?还是这样的功能会导致问题? -
只是没有这样实现。 marcgravell.blogspot.fr/2009/02/…
-
@TimSchmelter:不;那样是不可能的。
-
@SamIam:您应该首先将其实例化为
List<Base>。
标签: c#