我有一個情況,其中兩班(從另一個推導)都實現明確的相同的接口:如何調用基類的顯式實現接口方法
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