当子类已经从不同的基类派生时,子类如何共享行为?

我有两个实现ISomeBehavior的类。 现在我希望他们分享function。 通常我会用一个抽象类替换ISomeBehavior,比如SomeBehaviorBase。 问题是其中一个子类已经从另一个类派生,而另一个类不是我们拥有的软件。 (这是C#,因此多重inheritance不是一种选择。)从第三方类派生的子类没有实现。 它只是派生自第三方类,并实现了ISomeBehavior,因此第三方类的处理方式与实现ISomeBehavior的其他子类相同。

我目前所做的是在ISomeBehavior上实现一个扩展方法。 现在消费代码可以调用该方法。 这种方法的问题是我想强制调用代码使用这个扩展方法。 我无法从界面中删除SomeMethod(),因为扩展方法最终必须调用它。

关于如何让两个类优雅地分享相同的行为的任何想法,当其中一个已经派生自另一个,第三方,类? 注意:策略设计模式在这里听起来很有意义,但是当子类之间的行为发生变化时会使用该模式。 这里的行为没有变化; 它只需要分享。

是否有任何理由不能使用合成而不是委托来实现当前来自第三方类的类? 只需将所有接口方法委托给第三方类的实例。 这样,如果要添加function, 可以使用公共基类。

在对象标识相关的某些情况下,这不起作用,但在许多情况下,这是一个非常合理的设计。

这是一篇关于这个主题的好文章: http : //www.codeproject.com/KB/architecture/smip.aspx

GJ

public interface ISomeBehavior { int Sample(); } public class A : ISomeBehavior { int ISomeBehavior.Sample() { return 1; } } static class SomeExtension { public static int Sample(this ISomeBehavior obj) { return 2; } } 

然后使用它

  A a = new A(); var a1 = ((ISomeBehavior)a).Sample(); // a1 = 1 var a2 = a.Sample(); // a2 = 2 

这样的事情怎么样:

 class MyClass: ThirdPartyClass { } class MyFunctionality { public MyFunctionality(ThirdPartyClass target) ... } interface IMyFunctionality { public MyFunctionality MyFunctionality; } 

因此,接口将强制派生类必须实例化附加成员,并且MyFunctionality的设计将仅针对对基类的引用进行操作。 但是,如果存在您需要内部访问的受保护成员,则这可能不起作用。