返回抽象返回类型的子类?

Jen*_*112 1 c# inheritance

我的项目的结构如下:

// Abstract class
public abstract class Job
{
    public abstract JobResult Run();
}
public abstract class JobResult { }

// Concrete implementer
public class Job1 : Job
{
    public override Job1Result Run() { }
}
public class Job1Result : JobResult { }
Run Code Online (Sandbox Code Playgroud)

每个具体作业都继承自 Job 并实现 Run 方法,该方法返回 JobResult 的具体类。

但是,当我这样做时,我收到编译器错误:

Job1.Run()':返回类型必须是 JobResult 以匹配重写的成员 Job.Run()

重写抽象方法时真的不能返回返回类型的继承对象吗?

Eri*_*ric 5

这就是继承的整个概念。返回父类被认为是这里的一个特性。但是没有什么可以阻止您Job1Result返回Job1

public JobResult Run()
{
  return new Job1Result();
}
Run Code Online (Sandbox Code Playgroud)

然后 Job1.Run() 的调用者必须知道正确的返回类型并将其转换为访问Job1Result特定于该类的方法