Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 嵌套接口&;抽象实现类_C#_C# 4.0_Interface_Abstract Class_Nested Class - Fatal编程技术网

C# 嵌套接口&;抽象实现类

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 {

当我试图用抽象类实现嵌套接口时,在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()");
    }
}
它编译得很好


为什么编译器会在第一种情况下出错?我是不是遗漏了什么?还是不允许用抽象类实现嵌套接口?

问题不在于嵌套,而在于显式接口实现。如果您将“工作”示例更改为使用:

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中有隐式/显式接口实现#