我有两个实现 ISomeBehavior 的类。现在我希望他们共享功能。通常我会将 ISomeBehavior 替换为抽象类,例如 SomeBehaviorBase。问题是其中一个子类已经派生自另一个类,而另一个类不是我们拥有的软件。 (这是 C#,所以多重继承不是一个选项。)从第 3 方类派生的子类没有实现。它只是从第 3 方类派生,并实现 ISomeBehavior,因此第 3 方类可以与实现 ISomeBehavior 的其他子类一样对待。
目前,我所做的是在 ISomeBehavior 上实现一个扩展方法。现在消费代码可以调用该方法。这种方法的问题是我想强制调用代码使用这种扩展方法。我无法从接口(interface)中删除 SomeMethod(),因为扩展方法最终必须调用它。
关于如何让两个类优雅地共享相同行为的任何想法,当它们中的一个已经派生自另一个第三方类时?注意:策略设计模式在这里听起来很有意义,但当子类之间的行为不同时,就会使用该模式。这里的行为没有变化;它只需要共享。
最佳答案
有什么理由不能使用组合而不是委托(delegate)来实现当前派生自第 3 方类的类?只需将所有接口(interface)方法委托(delegate)给第三方类的实例即可。这样,如果您想添加功能,您可以使用一个公共(public)基类。
在对象标识相关的某些情况下,这将不起作用,但在许多情况下,这是一个完全合理的设计。
关于c# - 当一个子类已经从不同的基类派生时,子类如何共享行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5042605/