带有Generic Type参数的C#类约束

时间:2017-05-12 06:50:18

标签: c# asp.net generics constraints

我的泛型类具有泛型类型的条件:

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>

有人能提供解决方案吗?

3 个答案:

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