【发布时间】:2022-10-13 19:59:27
【问题描述】:
我正在尝试在构造函数中使用多态性,但如果没有解决方法就无法使其工作。
我有 :
public class A { }
public class B : A { }
为什么这不起作用:
IList<B> blist = new List<B> ...
IList<A> alist = (IList<A>)blist ;
当没有列表的相同工作正常时:
B bt = new B..
A a = (A)b;
当想要在构造函数中使用列表时,这尤其令人讨厌,尤其是在执行任何其他操作之前调用基本构造函数的 c# 限制。 禁止这样做:
public X(IList<B> param) : base((IList<A> param))
{}
有什么方法可以在不调用虚拟 base() 并完全重写构造函数的情况下正确地做到这一点?
我发现的一种方法是: 根据( section.Select(b => (A) b).ToList() )
但感觉很笨拙...
【问题讨论】:
-
X来自什么? -
它派生自另一个类 (Y)。它的构造函数中有一个 List<A> 而不是 B
标签: c# constructor polymorphism