首页 > 解决方案 > 具有多个泛型类型参数的抽象类中的链式继承

问题描述

首先,让我们在手头的问题之前列出我所拥有的工作。

假设已经存在两个这样的抽象类:

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>>>

虽然错误消息非常具有描述性,但到目前为止,我还无法理解为什么这不适用于我尝试的语法以及如何修改语法以使其工作。

请注意,我什至不确定额外的抽象类是否是正确的设计选择,也许有更好(并且可能更容易?)的方法来实现既定目标,所以我也愿意接受设计建议。

标签: c#asp.netgenerics

解决方案


推荐阅读