我想模擬使用基類的接口和實例(而不是直接從基類派生)從基類(不可訪問)派生。C#:僅使用接口和其實現實例來模擬繼承 - 是否有可能?
讓我試着更好地解釋一下:我有一個暴露的接口和一個(隱藏的)類實現。
在另一個模塊中,我創建了接口的第二個實現,並將其從第一個模塊傳遞給隱藏類的實例。
我想第二個實施做什麼:
- 它代表的接口方法的默認實現
- 它可以覆蓋任何接口方法
- 它可以從
- [中導出棘手的部分]代碼從調用虛擬方法的默認實現中調用該類的重寫方法或從它派生的類。
請記住,我不能直接從默認實現派生!
描述它的最好方法就是一個例子。
組件A:
internal class DefaultImpl: IMyInterface {
public virtual void MyMethod(){
//call a virtual method vvvv
Console.WriteLine(this.GetString());
}
public virtual string GetString(){
return "default implementation";
}
}
public Interface IMyInterface {
void MyMethod();
string GetString();
}
------
大會B:
class BaseExtraImpl: IMyInterface {
public BaseExtraImpl(IMyInterface i_implementation){
/* magic happens here */
}
public virtual void MyMethod(){ /*delegate to implementation*/ }
public virtual string GetString(){ /*delegate to implementation*/ }
}
class ExtraImpl: BaseExtraImpl{
public ExtraImpl(IMyInterface i_implementation): base(implementation) {}
public override string GetString(){
return "extra implementation";
}
}
用法:
DefaultImpl def;
// ^^^ this is initialized to an instance of DefaultImpl;
// it doesn't matter how.
ExtraImpl extra = new ExtraImpl(def);
extra.MyMethod(); //should print "extra implementation"
是否有一個很好的理由,你的基類已經交付沒有能力從它繼承? – Lazarus 2010-01-27 12:51:44
只有一個:它不在我的控制之下:( – 2010-01-27 13:18:46