是否有可能在重写函数中提供从属类作为形式参数而仍然可以编译?

本文关键字:参数 编译 函数 重写 有可能 是否 | 更新日期: 2023-09-27 17:51:11

提供一种机制的最佳方式是什么?在这种机制中,基类可以有一个带有类参数的函数,而后代类可以用基类参数的后代参数覆盖该函数。困惑,让我构造我想要实现下面:

基类

public class BaseReportController
{
    private ActionResult InternalRenderReport(BaseReportModel model)
    {
        ReportExecution execution = this.GetReportExecution(model);
        execution.AddRequiredParameter("DatabaseName", aTargetDatabase);
        execution.AddRequiredParameter("DatabaseServerName", aTargetServer);
        //Send execution into ssrs wrappers to return a report payload
    }
    public virtual ReportExecution GetReportExecution(BaseReportModel model)
    {
        return null;
    }
}
<<p> 扩展类/strong>
public class ExtendedReportController:BaseReportController
{
    public override ReportExecution GetReportExecution(ExtendedFromBaseReportModel model)
    {
        ReportExecution exec = new ReportExecution();
        exec.AddOptionalParameter("SomeID1", model.SomeID1);
        exec.AddOptionalParameter("SomeID2", model.SomeID2);
        return exec;
    }
}

是否有类似匿名参数的东西,允许我将ExtendedFromBaseReportModel定义为覆盖方法中的形式参数,并且仍然可以编译?

是否有可能在重写函数中提供从属类作为形式参数而仍然可以编译?

使用基类并在方法内部将其强制转换为派生类型。

public class ExtendedReportController:BaseReportController
{
    public override ReportExecution GetReportExecution(BaseReportModel model)
    {
        var castedModel = (ExtendedFromBaseReportModel) model;
        ReportExecution exec = new ReportExecution();
        exec.AddOptionalParameter("SomeID1", castedModel.SomeID1);
        exec.AddOptionalParameter("SomeID2", castedModel.SomeID2);
        return exec;
    }
}