我有两个接口:
public interface IResult
{
object SomeProperty {get;set;}
}
public interface IFooManager
{
IResult GetResult(string someId);
}
我想实施一个
IFooManager
public class MyFooManager<T> : IFooManager where T: class, IResult
{
public T GetResult(string id)
{
return null; //the value doesn't really matter here
}
}
但是,这会导致编译错误:
Cannot implement method from interface [..].IFooManager. Return type should be [..].IResult
现在,我知道我可以通过明确定义接口方法来解决这个问题,如下所示:
IResult IFooManager.GetResult(string id)
{
return GetResult(id);
}
但问题是:为什么编译器不能理解它呢
T GetResult()
确实返回一个实现
IResult
out T
最重要的是协方差界面,但我无法将其从脑海中抹去——为什么
T
类型限制不足以确保类型安全?