c# - 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 类(它有几个孩子来相应地处理绘画)。有没有解决的办法?
编辑:我确实创建了抽象类,以确保孩子们确实实现了抽象方法。
解决方案
new()不允许将抽象类和接口用作T
,因为它们不可实例化。new()
意味着泛型类型必须声明一个符合实例化对象的公共无参数构造函数。因此,在我看来,您有一个选择:删除该new()
子句,如果您可以接受任何源自MyBaseObject
泛型的抽象类型。由于您的课程确实是抽象的并且是 的孩子MyBaseObject
,因此可以正常工作。
推荐阅读
- c++ - 如何在 DriverKit 系统扩展中分配内存并将其映射到另一个进程?
- html - 当我将文本输入单个 div 时,我所有的 div 都会扩展
- python - Pandas CSV 分隔符、特殊字符和插入行问题
- java - 使用 maven shade 插件构建后出现 MessageBodyProviderNotFoundException [已解决]
- mongodb - 在本地 Windows 10 上运行 metoer 的 mongorestore 集合
- flutter - 在 Flutter 中使用 DropDownField 无法获得价值
- r - dplyr / base R:使用行索引的逻辑组合计算新列
- pandas - 随机数据框列排序
- python-3.x - 如何检查这个双端队列在 Python 中是否为空?
- azure - 我可以自动扩大/缩小 Azure 应用服务计划吗?