我有以下类/接口(interface):public abstract class AbstractBasePresenter<T> : IPresenter<T> where T : class, IView{}public interface IPresenter<T>{}public interface IView<TV, TE, TP> : IView where TV : IViewModel where TE : IEditModel //where TP : AbstractBasePresenter<???>{}public interface IView {}有什么方法可以将IView 上的TP约束为从AbstractBasePresenter继承的类?还是我唯一的选择是创建一个非通用的IPresenter接口(interface),然后更新IPresenter来实现它,然后使用检查“TP:IPresenter”?谢谢更新:下面的建议答案不起作用:public interface IView<TV, TE, TP> : IViewwhere TV : IViewModelwhere TE : IEditModelwhere TP : AbstractBasePresenter<IView<TV,TE,TP>>{}我的接口(interface)声明为:public interface IInsuredDetailsView : IView<InsuredDetailsViewModel, InsuredDetailsEditModel, IInsuredDetailsPresenter>{ }public interface IInsuredDetailsPresenter : IPresenter<IInsuredDetailsView>{ }编译器提示无法将IInsuredDetailsPresenter分配给AbstractBasePresenter> (adsbygoogle = window.adsbygoogle || []).push({}); 最佳答案 您可以做到,但是您需要为IView<>接口(interface)提供一个类型参数:public interface IView<TV, TE, TP, T> : IView where TV : IViewModel where TE : IEditModel where TP : AbstractBasePresenter<T> where T : class, IView{} 编辑:根据您问题的版本:IInsuredDetailsPresenter绝对不能分配给AbstractBasePresenter。由于您在原始问题中要求的限制,编译器在提示。更具体地说是由于这部分where TP : AbstractBasePresenter<T>似乎您也想将TP限制为一个接口(interface)。您可以尝试以下代码:public interface IView<TV, TE, TP, T> : IView where TV : IViewModel where TE : IEditModel where TP : IPresenter<T>{}不再需要T的约束,因为IPresenter<T>没有约束。当然,您可以以类似的方式调整armen.shimoon的答案。重点是将AbstractBasePresenter<T>约束替换为IPresenter<T>约束。关于C#通用约束-如何引用当前的类类型?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12313985/ (adsbygoogle = window.adsbygoogle || []).push({});
10-10 07:08