那个头衔是满口的,不是吗?……
这是我正在尝试做的事情:
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(){} }