想象一下,我们有一个界面IFoo
:
interface IFoo {
void DoSomething();
}
现在我们有一个在其构造函数中调用此方法的实现类:
class MyBase : IFoo {
MyBase() { this.DoSomething(); }
void DoSomething() { /* ... */ }
}
最后,我们有一个继承MyBase
的类,但是shell提供了接口IFoo
的另一个实现。但是在调试时我意识到构造函数只访问我理解的MyBase
上的实现。我可以使用((IFoo) this).DoSomething();
class MyDerived : MyBase, IFoo {
void DoSomething() { /* ... */ }
}
但是如何在使用之前强制该方法必须强制转换为该接口呢?我知道我可以在两个类中明确地实现接口,但谁强迫我这样做?所以我们最终得出的结论是:如何强制继承我的类的人也明确地实现我的界面呢?
编辑:另一种方法是在DoSomething
中使MyBase
虚拟,并省略派生类实现IFoo
。但是我在构造函数中调用虚拟成员时得到了R#-Warning。
答案 0 :(得分:0)
这就是我要做的,将基类中的方法标记为虚拟,以便可以在子类中覆盖它。子类不需要显式实现接口,因为它继承了父进程的行为。
interface IFoo {
void DoSomething();
}
class MyBase : IFoo {
MyBase() { this.DoSomething(); }
**virtual** void DoSomething() { /* ... */ }
}
class MyDerived : MyBase {
**override** void DoSomething() { /* ... */ }
}