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

时间:2014-11-10 21:57:30

标签: c# inheritance

我的项目结构如下:

public abstract class Job
{
    Public abstract JobResult Run()
}

public class Job1 : Job
{
    public override Job1Result Run()
    {
    }
}

public abstract class JobResult
{
}

Public class Job1Result : JobResult
{
}

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

然而,当我这样做时,我得到编译器错误:

  

Job1.Run()':返回类型必须是JobResult才能匹配被覆盖的成员   Job.Run()

在覆盖抽象方法时,是否真的无法返回返回类型的继承对象?

3 个答案:

答案 0 :(得分:4)

这是继承的整个概念。返回父类被认为是此功能。但是,在Job1Result

中返回Job1时,没有什么可以阻止你
public JobResult Run()
{
  return new Job1Result();
}

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

答案 1 :(得分:3)

您可以Job generic

public abstract class Job<TResult> where TResult : JobResult
{
    public abstract TResult Run();
}

public class Job1 : Job<Job1Result>
{
    public override Job1Result Run()
    {
         //
    }
}

答案 2 :(得分:0)

举个例子,希望对你有帮助。

public interface IEvent
{
    Type GetEventType();
}


public abstract class AEvent<A>: IEvent where A: struct
{
    public Type GetEventType()
    {
        return typeof (A); // return sub struct type
    }
}