c# - 具有多个泛型类型参数的抽象类中的链式继承
问题描述
首先,让我们在手头的问题之前列出我所拥有的工作。
假设已经存在两个这样的抽象类:
public abstract class BaseApiController<T> : ApiController where T : ApiController
public abstract class BaseLibraryController<T, M> : BaseApiController<T>
where T : ApiController
where M : ITrackedCommandMessage
API 控制器也是如此,例如:
public class LibraryController : BaseLibraryController<BaseApiController<LibraryController>, VideoLibraryMessage>
我的目标是为 LibraryController(和其他 ASP.NET Web API 控制器,因此它必须是可重用的)提供新的(与 BaseLibraryController 相比在业务上下文中不同)功能,同时通过 BaseLibraryController 继承保留可用的功能。
到目前为止,我尝试的是创建一个额外的抽象类,例如:
public abstract class BaseFolderController<T> : BaseApiController<T>
where T : ApiController
它实现了有问题的新功能,然后修改 BaseLibraryController 以从它继承,如下所示:
public abstract class BaseLibraryController<T, M> : BaseFolderController<T>
where T : BaseApiController<T>
where M : ITrackedCommandMessage
以及更改 LibraryController 以尝试促进上述更改:
public class LibraryController :
BaseLibraryController<BaseFolderController<BaseApiController<LibraryController>>,
VideoLibraryMessage>
唉,这就是编译器抛出以下错误的地方:
BaseFolderController<BaseApiController<LibraryController>> cannot be used as type parameter T, there's no implicit reference conversion from BaseFolderController<BaseApiController<LibraryController>> to BaseApiController<BaseFolderController<BaseApiController<LibraryController>>>
虽然错误消息非常具有描述性,但到目前为止,我还无法理解为什么这不适用于我尝试的语法以及如何修改语法以使其工作。
请注意,我什至不确定额外的抽象类是否是正确的设计选择,也许有更好(并且可能更容易?)的方法来实现既定目标,所以我也愿意接受设计建议。
解决方案
推荐阅读
- ios - 此代码将永远不会执行警告 swift equatable enum
- arrays - jq通过在数组上选择空结果
- excel - 如何使用 VBA excel 在 Internet Explorer 文本框中输入数据
- javascript - 将 Redux 存储中的对象数组渲染为 React 组件
- java - 如何在 JTextField 中禁止特殊字符
- java - 根据映射到类的 yaml 中的条件查找“行”字段
- cassandra - scylla读取路径和cassandra读取路径有什么区别?
- ios - iOS 应用内购买 恢复完成后自动购买
- solr - 如果与查询字符串的 50% 匹配,如何查询 Solr 以获取文档?
- powershell - 使用 PowerShell 创建文件夹和过滤器