2011-05-05 106 views
0

我有多重繼承和MarshallByRefObj馬歇爾參考繼承

的問題,我有一個問題是,我需要從一個抽象類,MarshallByRefObj

抽象類繼承(剝離下來):

public abstract class Drawable : IDrawable 
{ 
    //... Several unimportant methods... 
    public IEnumerable<ICard> Shuffle (IEnumerable<ICard>) 
    { 
     //...shuffle the cards here... 
    } 
} 

類我試圖做,這需要通過參考通過剝離下來WCF 訪問,顯然...:

public class Deck : Drawable, MarshallByRefObject 
{ 
    //... public stuff that implements a deck to include 
    // search/draw/discard functions... 
} 
+3

爲什麼不讓Drawable繼承自MBRO? – 2011-05-05 22:14:31

+0

C#不支持類的多重繼承。但是,您可以繼承多個接口。如果你的抽象類提供了實現,那麼你需要遵循柯克沃爾的建議,我想。 – essedbl 2011-05-05 22:16:52

+0

在這種情況下,我無法從MBRO製作Drawable繼承,因爲我無法訪問它。 – lassombra 2011-05-06 04:52:03

回答

2

嘗試派生自MarshalByRefObject,並實現其他類的接口。然後,定義該類的成員類型,並使您的接口只是對其進行代理調用。這是一種痛苦,但它很簡單。

public class Deck : MarshalByRefObject, IDrawable 
{ 
    Drawable _drawable = new Drawable(...); 

    // Implement IDrawable 
    void IDrawable.Foo() { _drawable.Foo(); } 
    void IDrawable.Bar() { _drawable.Bar(); } 
} 
+0

這很好,但是如果Drawable實現不在界面中的方法(如果是這種情況),我該怎麼辦?如果完全取決於我,我會將它重構爲一個真正的接口/抽象集合並使用此解決方案,但這不取決於我,下一步是什麼?更具體地說,當消費者需要Drawable時我該怎麼做,而我所要提供的就是IDrawable? – lassombra 2011-05-06 04:55:53

+0

第二次看,Drawable的所有內容都在IDrawable中,所以這種方法可行,謝謝! – lassombra 2011-05-07 03:04:08