强制显式接口实现

时间:2015-07-31 14:20:45

标签: c# inheritance interface

想象一下,我们有一个界面IFoo

interface IFoo {
    void DoSomething();
}

现在我们有一个在其构造函数中调用此方法的实现类:

class MyBase : IFoo {

    MyBase() { this.DoSomething(); }

    void DoSomething() { /* ... */ }
}

最后,我们有一个继承MyBase的类,但是shell提供了接口IFoo的另一个实现。但是在调试时我意识到构造函数只访问我理解的MyBase上的实现。我可以使用((IFoo) this).DoSomething();

从构造函数中明确调用interface-method来获得正确的接口实现
class MyDerived : MyBase, IFoo {
    void DoSomething() { /* ... */ }
}

但是如何在使用之前强制该方法必须强制转换为该接口呢?我知道我可以在两个类中明确地实现接口,但谁强迫我这样做?所以我们最终得出的结论是:如何强制继承我的类的人也明确地实现我的界面呢?

编辑:另一种方法是在DoSomething中使MyBase虚拟,并省略派生类实现IFoo。但是我在构造函数中调用虚拟成员时得到了R#-Warning。

1 个答案:

答案 0 :(得分:0)

这就是我要做的,将基类中的方法标记为虚拟,以便可以在子类中覆盖它。子类不需要显式实现接口,因为它继承了父进程的行为。

interface IFoo {
    void DoSomething();
}

class MyBase : IFoo {

    MyBase() { this.DoSomething(); }

    **virtual** void DoSomething() { /* ... */ }
}

class MyDerived : MyBase {
    **override** void DoSomething() { /* ... */ }
}