我有这两个接口:
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
类型限制不足以确保类型安全?
答案 0 :(得分:3)
由于:
IResult GetResult(string someId);
与:
不同T GetResult(string id)
你告诉编译器约束T是实现IResult
的任何类 - 而不是IResult
。这两件事情是不一样的。