首先看一下這個代碼:接口繼承一致性
class Program
{
static void Main(string[] args)
{
var x =(Base) new Derived();
((IMethod)x).DoWork();
Console.ReadKey();
}
}
interface IMethod
{
void DoWork();
}
abstract class Base : IMethod
{
void IMethod.DoWork()
{
Console.WriteLine("Base.DoWork");
}
}
class Derived : Base, IMethod
{
public void DoWork()
{
//here I where I want to call base.DoWork();
Console.WriteLine("Derived.DoWork");
}
}
輸出:
Derived.DoWork
期望:
Base.DoWork
Derived.DoWork
我處理暴露,當一個接口的API在遊行的某些部分將會調用DoWork
方法。
現在在上面的例子中,類Base
是API的一部分,它在內部(在API中)已經明確地實現了該接口並在DoWork
方法中執行了一些重要的執行。
我需要重寫我的派生類中的IMethod
的實現,所以在需要時我會得到通知,問題是我無法「覆蓋」該方法並調用基方法,也無法投射基到IMethod
。
任何解決方案?
注意:反射不起作用,因爲它是一個Silverlight項目,禁止私人方法調用。
爲什麼要混合使用兩種風格的界面實現? – dkackman 2012-03-09 01:36:29
你的基類顯然不是用這種繼承來設計的;通常基類將提供一個受保護的虛擬方法,如果他們希望允許覆蓋該行爲,則實現顯式實現的邏輯。鑑於此,即使您可以找到方法來「強制」這種覆蓋行爲也是有風險的,因爲您是以原始開發人員沒有設計的方式從類中有效地派生出來的。這就是說,這仍然是一個有趣的問題。 – 2012-03-09 01:38:35
@DanBryant,讓我們把設計放在一邊(除此之外別無選擇),但不要忘記我需要像基類一樣實現接口,並且必須調用這兩種方法。看到我更新的答案。 – Shimmy 2012-03-09 03:22:32