【发布时间】:2022-02-14 19:21:19
【问题描述】:
我在 C# 中有一个带有虚方法的类,例如:
public class Car
{
public virtual CarModel Run()
{
return new CarModel();
}
}
第二类继承自Car类:
public class CarFiat : Car
{
public async override Task<CarModel> Run()
{
var carModel = base.Run();
await MeasureSpeed();
return carModel;
}
private async Task<string> MeasureSpeed()
{
return await Task.FromResult("50");
}
}
现在我得到错误:Return type must be CarModel to match overridden member Car.Run()
当我从 Run 从 CarFiat 类中删除 await, async 和 Task 时,它可以工作,但我不能在其中调用异步方法:
//public async override Task<CarModel> Run()
public override CarModel Run()
{
var carModel = base.Run();
//await MeasureSpeed();
return carModel;
}
【问题讨论】:
-
不可能做到正确。你能改变基类吗?你可以在那里返回
Task.FromResult(new CarModel());。 -
看起来
CarFiat.Run不需要与您发布的代码异步。 -
为什么你的
MeasureSpeed方法是异步的,因为它只有真的行为同步? -
我只发布了示例,我的逻辑要复杂得多。我的真实示例覆盖方法向 no-sql 数据库发出异步请求并且必须异步,基本虚拟方法没有
-
标签: c# inheritance async-await overriding