我重写了基类库中的方法。但是,在我重写的实现中,我使用的是全新的基于异步方法的HttpClient。因此,我必须将我的方法标记为async,这意味着我需要将该方法的返回参数从字符串更改为Task。然而,编译器提供了一个错误:“返回类型必须是‘串’可以匹配重写的成员......”将重写的成员更改为异步
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()的返回类型任务<字符串>,但我不能控制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;
}
}
是否有任何其他方式做到这一点?
不幸的是,没有好的解决方案(这违反了LSP)。你可以创建一个异步包装? – SLaks 2013-03-10 01:42:15