2011-05-05 65 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