我的泛型类具有泛型类型的条件:
public abstract class ReportModel<ReportHandler> where ReportHandler : IReportHandler
然后我有这个Controller类
public abstract class ReportController<ReportModelType> : Controller
我需要的是 ReportModelType 必须继承抽象 ReportModel 类的条件。麻烦的是我然后被迫为 ReportModel 提供一个类型参数,我不想指定一个参数。我需要这样的通配符:
public abstract class ReportController<ReportModelType> : Controller where ReportModelType : ReportModel<*any type which satifies ReportModels contraint>
有人能提供解决方案吗?
答案 0 :(得分:1)
C#
中没有通用类型的通配符然而,您可以考虑两种解决方案
将其设为界面
public interface IReportModel
{}
public abstract class ReportModel<ReportHandler> : IReportModel
where ReportHandler : IReportHandler
使用该界面:
... ReportController<ReportModelType> : Controller
where ReportModelType : IReportModel
考虑将ReportModel ReportHandler类型作为下一课程的一部分
... ReportController<ReportModelType> : Controller
where ReportModelType : ReportModel<ReportHandler>
where ReportHandler : IReportHandler
答案 1 :(得分:1)
你可以这样做:
public interface IReportHandler
{
}
public abstract class ReportModel<ReportHandler>
where ReportHandler : IReportHandler
{
}
public abstract class ReportController<ReportModelType, ReportHandler>
where ReportModelType : ReportModel<ReportHandler>
where ReportHandler : IReportHandler
{
}
答案 2 :(得分:1)
据我所知,C#中没有通用的通配符,所以你所能做的只是寻找替代方案。
我建议您向ReportHandler
添加另一个通用类型参数ReportController
,约束新类型参数以实现IReportHandler
并使ReportModelType
实现ReportModel<ReportHandler>
。
public abstract class ReportController<ReportModelType, ReportHandler> : Controller
where ReportHandler : IReportHandler
where ReportModelType: ReportModel<ReportHandler>