当我尝试使用抽象类实现嵌套接口(interface)时,我在 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()");
}
}
不幸的是,上面的代码无法编译,并出现以下错误:
error CS0106: The modifier 'abstract' is not valid for this item
error CS0106: The modifier 'public' is not valid for this item
error CS0106: The modifier 'override' is not valid for this item
error CS0106: The modifier 'public' is not valid for this item
但是,如果接口(interface)是非嵌套接口(interface),如下所示:
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()");
}
}
编译成功。
为什么第一种情况会出现编译错误?我在这里错过了什么吗?或者说不允许用抽象类实现嵌套接口(interface)?
最佳答案
问题不在于嵌套,而在于显式接口(interface)实现。如果您将“工作”示例更改为使用:
public abstract void SomeInterface.Method()
你会看到同样的问题。您应该能够轻松地使用带有嵌套接口(interface)的隐式接口(interface)实现:
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()");
}
}
...如果您想要使用显式接口(interface)实现,则嵌套接口(interface)的工作方式应该与非嵌套接口(interface)的工作方式相同。但是您不能在显式接口(interface)实现上编写 public
,而且它们也不能是抽象的 (IIRC)。
关于c# - 嵌套接口(interface)和抽象实现类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12345158/