首页 > 解决方案 > c#泛型与抽象方法

问题描述

我正在尝试为抽象类实现一些通用方法,如下所示:

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 类(它有几个孩子来相应地处理绘画)。有没有解决的办法?

编辑:我确实创建了抽象类,以确保孩子们确实实现了抽象方法。

标签: c#generics

解决方案


new()不允许将抽象类和接口用作T,因为它们不可实例化。new()意味着泛型类型必须声明一个符合实例化对象的公共无参数构造函数。因此,在我看来,您有一个选择:删除该new()子句,如果您可以接受任何源自MyBaseObject泛型的抽象类型。由于您的课程确实是抽象的并且是 的孩子MyBaseObject,因此可以正常工作。


推荐阅读