创建一个以继承对象作为参数的对象
本文关键字:对象 参数 继承 创建 一个以 | 更新日期: 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)
{
}
}