【发布时间】:2011-06-08 22:46:58
【问题描述】:
以下代码示例:
interface I<out T>
where T : class, I<T>
{
T GetT();
}
interface J : I<J>
{
}
abstract class B<T> : I<T>
where T : B<T>
{
T I<T>.GetT()
{
return null;
}
}
class C : B<C>, J
{
}
编译失败(在带有 SP1 的 VS2010 下)并出现以下错误:
Error 4 'C' does not implement interface member 'I<J>.GetT()'
但是,C 确实实现了(通过其基 B
这是编译器错误吗?如果不是,为什么我不允许这样做?
【问题讨论】:
-
我怀疑这可能是由于显式接口实现。您是否尝试过将
B<T>.GetT()公开? -
是的,我有。错误仍然存在,并添加了 B 的实现具有无效返回类型以匹配的注释(我们没有返回类型协方差)。
标签: c#-4.0 covariance