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

标签 c# subclass behavior share

我有两个实现 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/

相关文章:

python - 与父类(super class)同名的子类变量

java - 为什么这不能是静态的?

rust - 如何在 Rust 中编写共享行为而不在每个模块中重复相同的代码?

jquery - 在使用 jQuery 的自动完成功能时防止浏览器的自动建议

c# - 只要窗体处于事件状态,如何运行后台线程?

swift - 无法覆盖泛型类的子类中的初始化程序

c# - 将参数传递给代码 C# 中的变量

python - Pandas 数据帧行为: list(df) versus len(df)

c# - 类似于一组字符串的字符串

c# - 避免在一个 block 出现故障时关闭整个数据流网络