【发布时间】:2019-03-28 05:23:31
【问题描述】:
编辑: 我收到了一些 cmets 将其识别为重复并链接到 virtual、override 和其他此类关键字的定义,但这不是我正在寻找的完整答案。我在原始帖子中声明我尝试使用 virtual 和 override 关键字但出现编译器错误。我最初从代码中省略了这些关键字,因为它没有编译,但我现在将它们放入以将问题集中在派生类的方法签名不匹配到足以覆盖基类的方法这一事实上.简单地添加这些关键字并不能解决我的问题。在阅读了我收到的回复后,我意识到我需要帮助来编译代码并实现我正在寻找的结果。
您好,我的代码看起来很像:
// WeeklyReport.cs
public class WeeklyReport: Report {
// class definitions
}
// ReportService.cs
public class ReportService
{
public async Task<ResponseMessage> ChangeStatus<T>(string reportId, string status) where T:Report, new()
{
var report = await SelectReportById<T>(reportId);
// do stuff
return await SetStatus(change, report);
}
public virtual async Task<ResponseMessage> SetStatus<T>(StatusChange change, T report) where T : Report, new()
{
// do stuff
}
}
// WeeklyReportService.cs
public class WeeklyReportService : ReportService
{
// This method does not compile!!!
public override async Task<ResponseMessage> SetStatus(StatusChange change, WeeklyReport report)
{
// do stuff
}
}
以上代码的简短说明:
我有两个模型类,Report 和 WeeklyReport。 WeeklyReport 是 Report 的子类
我有两个服务类,ReportService 和 WeeklyReportService。 WeeklyReportService 是 ReportService 的子类,并试图覆盖其 SetStatus() 方法
问题:
当我在 WeeklyReportService 的实例上调用 ChangeStatus() 时。我希望调用 WeeklyReportService 中定义的 SetStatus(),而不是 ReportService 中定义的 SetStatus()。
我已经尝试将 virtual 和 override 关键字添加到方法签名中,但我得到 'WeeklyReportService.SetStatus(StatusChange change, WeeklyReport report)':没有找到合适的方法来覆盖。
有谁知道我如何做到这一点?
谢谢, 伊森
【问题讨论】:
-
SetStatusinReportService需要是virtual,然后你可以在overrideWeeklyReportService中@它 -
您好,感谢您的回复。请注意,简单地添加这些关键字会导致编译器错误。请参阅我在原始帖子中的编辑,了解我为什么不与这些帖子重复。
标签: c# templates generics overriding