C# 通过引用从类继承Marshall

C# 通过引用从类继承Marshall,c#,wcf,c#-4.0,marshalling,C#,Wcf,C# 4.0,Marshalling,我遇到了多重继承和MarshallByRefbj的问题 我的问题是,我需要从抽象类和MarshallByRefbj继承 抽象类(精简): 公共抽象类可绘制:IDrawable { //…几个不重要的方法。。。 公共IEnumerable Shuffle(IEnumerable) { //…在这里洗牌。。。 } } 我试图创建的类,需要通过wcf通过引用访问 脱光衣服,显然…: public class Deck : Drawable, MarshallByRefObject { //.

我遇到了多重继承和MarshallByRefbj的问题

我的问题是,我需要从抽象类和MarshallByRefbj继承

抽象类(精简):

公共抽象类可绘制:IDrawable
{
//…几个不重要的方法。。。
公共IEnumerable Shuffle(IEnumerable)
{
//…在这里洗牌。。。
}
}
我试图创建的类,需要通过wcf通过引用访问 脱光衣服,显然…:

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

尝试从MarshalByRefObject派生,并实现另一个类的接口。然后,定义该类类型的成员,并使您的接口只是对它的代理调用。这很痛苦,但很简单

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

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

为什么不让Drawable从MBRO继承?C不支持类的多重继承。但是,您可以继承多个接口。如果您的抽象类提供了实现,那么您将需要遵循Kirk Woll的建议,我认为。在这种情况下,我不能让Drawable从MBRO继承,因为我没有访问它的权限。您的要求是从两个类类型继承,这两个类类型都不是您控制的。单一继承语言无法满足您的要求。放弃你的需求,用一个可以满足的需求替换它。我认为他的需求确实发生了变化,变化是真正需要的是一个实现IDrawable的MBRO,而不是一个混合的MBRO/可绘制对象。不过,在我看来,将接口代理给实现它的内部成员是一种模式。我确实做过很多次了。您是否认为这是一种足够的模式,可以考虑使用语言扩展来自动、简洁地实现这一点?这很好,但是如果Drawable实现的方法不在接口中(事实证明是这样的),我该怎么办?如果完全由我决定,我会把它重构成一个真正的接口/抽象集,并使用这个解决方案,但这不由我决定,那么下一步怎么办?更具体地说,当消费者想要Drawable,而我所能提供的只是IDrawable时,我该怎么办?第二,Drawable的所有内容都在IDrawable中,所以这个方法会起作用,谢谢!