我有一个情况,其中两班(从另一个推导)都实现明确的相同的接口:如何调用基类的显式实现接口方法
interface I
{
int M();
}
class A : I
{
int I.M() { return 1; }
}
class B : A, I
{
int I.M() { return 2; }
}
从派生类执行I.M()
,我想调用基类的实现,但我不知道该怎么做。我试过到目前为止,这是(B类):
int I.M() { return (base as I).M() + 2; }
// this gives a compile-time error
//error CS0175: Use of keyword 'base' is not valid in this context
int I.M() { return ((this as A) as I).M() + 2; }
// this results in an endless loop, since it calls B's implementation
有没有办法做到这一点,而无需执行其他(非界面显式)辅助方法?
更新:
我知道这是可能的一个“助手”方法,可以通过派生类中调用,如:
class A : I
{
int I.M() { return M2(); }
protected int M2 { return 1; }
}
我也可以改变它来实现界面非明确。但我只是想知道是否有可能没有任何这些解决方法。
是的,解决方法是我已经添加到更新的问题。但这不是我想知道的。 – M4N 2011-05-12 10:06:01
@ M4N:这只是为了让答案更大一些;-)真正的答案是第一句话:没有这种解决方法,这是不可能的。 – 2011-05-12 10:07:50
要添加到为什么它是不可能的:明确实现的接口方法是私有的 - 使他们无法从派生类调用。您应该更喜欢不同的方法,比如Daniel列出的方法,以避免*调用super *代码味道。 – 2011-05-12 10:18:57