C# 嵌套接口&;抽象实现类
当我试图用抽象类实现嵌套接口时,在C#4.0中意外地遇到了这个问题:C# 嵌套接口&;抽象实现类,c#,c#-4.0,interface,abstract-class,nested-class,C#,C# 4.0,Interface,Abstract Class,Nested Class,当我试图用抽象类实现嵌套接口时,在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 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()");
}
}
它编译得很好
为什么编译器会在第一种情况下出错?我是不是遗漏了什么?还是不允许用抽象类实现嵌套接口?问题不在于嵌套,而在于显式接口实现。如果您将“工作”示例更改为使用:
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)。谢谢。不知道C中有隐式/显式接口实现#