使用继承的对象作为参数创建对象

时间:2014-03-22 02:39:07

标签: c# inheritance base

我在C#中有关于继承和构造函数的问题。

实际上,我创建了一个继承自它的类和类,如Window或Message。

在某些时候,我希望另一个类在其构造函数中使用一个List of Elements,以便它可以同时使用Windows和Messages。但是,当我创建新对象时,它只需要基本类型Elements。

因此我无法创造类似的东西:

obj = new Obj(List<Window> w)

它只允许

obj = new Obj(List<Elements> e)

我真的不知道这是什么问题。我试图将Elements类设置为抽象,因为我永远不需要创建一个对象“Element”,但它仍然不起作用。

如果有人可以提供帮助,那将是非常好的:) 谢谢!

1 个答案:

答案 0 :(得分:2)

List<T>不是协变的,因此如果您的构造函数需要List<BaseClass>,则无法传递List<DerivedClass>

改为使用IEnumerable<BaseClass>来获得协方差。

或者使用通用约束使您的类具有通用性:

public class MyClass<T> where T : Element
{
    public MyClass(List<T> items)
    {

    }
}