以下代码示例:
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
{
}
Run Code Online (Sandbox Code Playgroud)
无法编译(在VS2010 SP1下),出现以下错误:
Error 4 'C' does not implement interface member 'I<J>.GetT()'
Run Code Online (Sandbox Code Playgroud)
但是,C确实实现了(通过它的基础B <C>)I <C>,由于我被声明为协变,它也应该捕获I <J>(如C:J).
这是编译器错误吗?如果没有,为什么我不被允许这样做?