.NET C#在父接口中显式实现祖父母的接口方法

前端之家收集整理的这篇文章主要介绍了.NET C#在父接口中显式实现祖父母的接口方法前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
那个头衔是满口的,不是吗?……

这是我正在尝试做的事情:

public interface IBar {
     void Bar();
}
public interface IFoo: IBar {
    void Foo();
}
public class FooImpl: IFoo {
    void IFoo.Foo()   { /* works as expected */ }
    //void IFoo.Bar() { /* i'd like to do this,but it doesn't compile */ }

    //so I'm forced to use this instead:
    void IBar.Bar()   { /* this would compile */ }
}

我的问题是,调用Bar()是不方便的:

IFoo myFoo = new FooImpl();
//myFoo.Bar(); /* doesn't compile */
((IBar)myFoo).Bar(); /* works,but it's not necessarily obvIoUs 
                        that FooImpl is also an IBar */

那么…有没有办法在我的类中声明IFoo.Bar(){…},除了基本上将两个接口合并为一个?

如果没有,为什么?

解决方法

可以在接口中使用new关键字来显式隐藏它扩展的接口中声明的成员:
public interface IBar
{
    void Bar();
}

public interface IFoo:IBar
{
    void Foo();
    new void Bar();
}

public class Class1 : IFoo
{
    void Bar(){}

    void IFoo.Foo(){}

    void IFoo.Bar(){}

    void IBar.Bar(){}
}

猜你在找的C#相关文章