创建一个以继承对象作为参数的对象

本文关键字:对象 参数 继承 创建 一个以 | 更新日期: 2023-09-27 17:51:21

我有一个关于c#中继承和构造函数的问题。

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

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

因此,我不能创建如下内容:

obj = new Obj(List<Window> w)

只允许

obj = new Obj(List<Elements> e)
我真不知道是什么问题。我尝试将Elements类设置为抽象类,因为我永远不需要创建对象"Element",但它仍然不起作用。

如果有人能帮忙,那就太好了:)谢谢!

创建一个以继承对象作为参数的对象

List<T>不是协变的,所以如果你的构造函数期望List<BaseClass>,你不能传递List<DerivedClass>

IEnumerable<BaseClass>代替,得到协方差

或者让你的类具有泛型约束:

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