当我尝试使用抽象类实现嵌套接口时,我偶然在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:修饰符'abstract'对此项无效
错误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()");
}
}
编译好。
为什么第一种情况下编译错误?我在这里错过了什么吗?或者是否不允许使用抽象类实现嵌套接口?
答案 0 :(得分:3)
问题不在于嵌套 - 它是通过显式接口实现的。如果您将“工作”示例更改为使用:
public abstract void SomeInterface.Method()
你会看到同样的问题。您应该能够轻松地使用嵌套接口的隐式接口实现:
public abstract class B : A.InnerInterface
{
public abstract void Method();
}
public class C : B
{
public override void Method()
{
System.Console.WriteLine("C::A.InnerInterface.Method()");
}
}
...如果你希望使用显式接口实现,它应该以与嵌套接口相同的方式作为非嵌套接口工作。但是你没有在显式接口实现上编写public
,它们也不能是抽象的(IIRC)。