当我尝试使用抽象类实现嵌套接口时,我在 C# 4.0 中偶然遇到了这个问题:
public class A
{
public interface InnerInterface
{
void Method();
}
}
public abstract class B : A.InnerInterface
{
public abstract void A.InnerInterface.Method();
}
public class C : B
{
public override void A.InnerInterface.Method()
{
System.Console.WriteLine("C::A.InnerInterface.Method()");
}
}
不幸的是,上面的代码无法编译,出现以下错误:
错误 CS0106:修饰符“抽象”对此项无效
错误 CS0106:修饰符“public”对此项目无效
错误 CS0106:修饰符“覆盖”对此项无效
错误 CS0106:修饰符“public”对此项目无效
但是,如果接口是非嵌套接口,如下所示:
public interface SomeInterface
{
void Method();
}
public abstract class B : SomeInterface
{
public abstract void Method();
}
public class C : B
{
public override void Method()
{
System.Console.WriteLine("C::Method()");
}
}
它编译好。
为什么在第一种情况下编译器错误?我在这里错过了什么吗?还是不允许用抽象类实现嵌套接口?