强制显式接口实现
本文关键字:显式接口实现 | 更新日期: 2023-09-27 18:05:49
假设我们有一个接口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() { /* ... */ }
}
但是我怎样才能强制方法在使用它之前必须被强制转换到该接口呢?我知道我可以显式地在两个类中实现接口,但是谁强迫我这样做呢?因此,我们最终会遇到这样的问题:我如何强制继承我的类的人也显式地实现我的接口?
编辑:另一种方法是在MyBase
中使DoSomething
虚化,并在实现IFoo
时提交派生类。然而,在构造函数中调用虚成员时,我得到了r#警告。
这就是我要做的,将基类中的方法标记为虚拟的,这样它就可以在子类中被重写。子类不需要显式地实现接口,因为它继承了父类的行为。
interface IFoo {
void DoSomething();
}
class MyBase : IFoo {
MyBase() { this.DoSomething(); }
**virtual** void DoSomething() { /* ... */ }
}
class MyDerived : MyBase {
**override** void DoSomething() { /* ... */ }
}