我正在覆盖基类库中的方法。但是,在我重写的实现中,我使用了新的 HttpClient,它全部基于异步方法。因此,我必须将我的方法标记为异步,这意味着我需要将方法的返回参数从字符串更改为任务。然而,编译器给出了一个错误:“返回类型必须是'字符串'才能匹配被覆盖的成员......”
public class BaseClass
{
public virtual string GetName()
{
...
}
}
public class MyClass : BaseClass
{
public override async Task<string> GetName()
{
HttpClient httpClient = new HttpClient();
var response = await httpClient.GetAsync("");
if (response.IsSuccessStatusCode)
{
var responseContent = response.Content;
return await responseContent.ReadAsStringAsync();
}
return null;
}
}
当然,显而易见的解决方案是将 BaseClass 中 GetName() 的返回类型更改为 Task<string>,但我无法控制 BaseClass,因为它是一个外部库;
我当前的解决方案是以同步方式使用 HttpClient 类,即按如下方式更改 MyClass:
public class MyClass : BaseClass
{
public override string GetName()
{
HttpClient httpClient = new HttpClient();
var response = httpClient.GetAsync("");
if (response.Result.IsSuccessStatusCode)
{
var responseContent = response.Result.Content;
return responseContent.ReadAsStringAsync()
.Result;
}
return null;
}
}
有没有其他方法可以做到这一点?