我在C#中有关于继承和构造函数的问题。
实际上,我创建了一个继承自它的类和类,如Window或Message。
在某些时候,我希望另一个类在其构造函数中使用一个List of Elements,以便它可以同时使用Windows和Messages。但是,当我创建新对象时,它只需要基本类型Elements。
因此我无法创造类似的东西:
obj = new Obj(List<Window> w)
它只允许
obj = new Obj(List<Elements> e)
我真的不知道这是什么问题。我试图将Elements类设置为抽象,因为我永远不需要创建一个对象“Element”,但它仍然不起作用。
如果有人可以提供帮助,那将是非常好的:) 谢谢!
答案 0 :(得分:2)
List<T>
不是协变的,因此如果您的构造函数需要List<BaseClass>
,则无法传递List<DerivedClass>
。
改为使用IEnumerable<BaseClass>
来获得协方差。
或者使用通用约束使您的类具有通用性:
public class MyClass<T> where T : Element
{
public MyClass(List<T> items)
{
}
}