【发布时间】:2019-10-10 22:45:24
【问题描述】:
我正在尝试为抽象类实现一些通用方法,如下所示:
public abstract class MyAbstractClass : MyBaseObject {
public MyAbstractClass() : base() { } // there is a parameterless constructor...
}
public class MyList<T> where T : MyBaseObject, new() {
// a generic container that is designed for the base class
}
//--- some paint control of mine
public class PaintControl : IDisposable {
public void InitDrawItems(MyList<MyAbstractClass> items) {
// paint items => this is where the compilation error occurs...
}
}
我得到以下编译错误:
错误 24“MyAbstractClass”必须是具有公共无参数构造函数的非抽象类型,才能将其用作泛型类型或方法“MyList”中的参数“T”
当然,我想使用抽象的 MyAbstractClass 类(它有几个孩子来相应地处理绘画)。 有没有办法解决这个问题?
编辑:我确实创建了抽象类,以确保孩子们确实实现了抽象方法。
【问题讨论】:
-
你不能新建一个抽象类
-
来自官方文档:新约束指定泛型类声明中的任何类型参数都必须具有公共无参数构造函数。 要使用新的约束,类型不能是抽象的。见:docs.microsoft.com/en-us/dotnet/csharp/language-reference/…
-
好的,有 2 条出路 1. 将 MyAbstractClass 设为非抽象或在
PainControl中使用特定的非抽象子,对吗? -
@neggenbe 接口不能解决问题,你也不能创建接口实例。
-
您还可以删除
T的new()约束。这实际上意味着您不能将抽象类或接口与MyList一起使用。