返回抽象返回类型的子类
本文关键字:子类 返回类型 抽象 返回 | 更新日期: 2023-09-27 18:30:00
我的项目结构如下:
// 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 { }
每个具体作业都继承自job并实现Run方法,该方法返回JobResult的具体类。
然而,当我这样做时,我会得到编译器错误:
"Job1.Run()":返回类型必须是JobResult才能匹配重写的成员Job.Run()
在重写抽象方法时,是否真的不可能返回返回类型的继承对象?
这就是继承的全部概念。返回父类被认为是这里的一个特性。但是,没有什么可以阻止您在Job1
中返回Job1Result
public JobResult Run()
{
return new Job1Result();
}
然后Job1.Run()的调用方必须知道正确的返回类型,并将其强制转换为访问特定于该类的Job1Result
方法
您可以使Job
通用:
public abstract class Job<TResult> where TResult : JobResult
{
public abstract TResult Run();
}
public class Job1 : Job<Job1Result>
{
public override Job1Result Run()
{
//
}
}
这里有一个例子,希望能对您有所帮助。
public interface IEvent
{
Type GetEventType();
}
public abstract class AEvent<A>: IEvent where A: struct
{
public Type GetEventType()
{
return typeof (A); // return sub struct type
}
}