我有一个具有通用返回类型方法的非通用接口。
public interface IReport
{
List<T> GenerateReport<T>();
}
如何在客户端类中实现此方法?我尝试了以下方法。全部显示错误。 方法1:
public class Report : IReport
{
public List<T> GenerateReport<T>()
{
return new List<ReportModel>(){ new ReportModel { Name="Report1" } };
}
}
方法2:
public class Report : IReport
{
public List<ReportModel> GenerateReport<ReportModel>()
{
return new List<ReportModel>(){ new ReportModel { Name="Report1" } };
}
}
答案 0 :(得分:2)
你不能,不是那样。
您的IReport
接口保证您有一种方法GenerateReport
,该方法可以接受任何类型的报告,并将生成该报告。
您的Report
类仅承诺能够生成ReportModels
-它不能生成任何类型的报告。
如果我有一个类型为IReport
的变量,我希望能够要求它生成任何类型的报告,例如:
IReport report = ...
report.GenerateReport<ReportModel>();
report.GenerateReport<OtherReportModel>();
您的Report
类无法做到这一点-它只能生成包含ReportModel
的报告,因此您在界面中违反了合同。
您可能想做的是使整个IReport
接口通用:
public interface IReport<T>
{
List<T> GenerateReport();
}
然后您的Report
类可以实现IReport<ReportModel>
。这意味着它承诺将生成包含ReportModel
且不包含其他类型报告的报告:
public class Report : IReport<ReportModel>
{
public List<ReportModel> GenerateReport()
{
return new List<ReportModel>(){ new ReportModel { Name="Report1" } };
}
}