如何模拟多重继承
本文关键字:多重继承 模拟 何模拟 | 更新日期: 2023-09-27 18:31:48
我想练习使用C#中的接口模拟多重继承。但是,我不完全理解。有人可以向我解释我的想法哪里错了吗?
我有两个类逆变器和序列。Inverter有一个.doAction(),它只是交换字符串中的字符位置。序列实际上是一个父级和两个子级的类层次结构。它们只是通过 .doAction() 方法以各种方式操作字符串。这些按顺序排列的对象都是通过覆盖 .doAction() 方法来区分的。
现在,我想创建一个名为 invSeq 的新类,它同时具有逆变器和序列功能。
我所做的是这样的:
public class inVSeq : inverter, seq1, seq2, seq3
接口由序列层次结构下每个类的三个不同的 .doAction() 组成。
因此,根据我的理解,我必须再次创建这些seq1,seq2,seq3(.doAction())方法。但是如何重用现有序列层次结构中的 .doAction() 方法呢?如果我只是重写接口的代码,我觉得类之间没有真正的联系。
我可以使用组合(在 inVSeq 中保存私有序列对象 (3),但这会破坏接口的使用。
你刚才描述的叫做复合模式,接口的组合是这个模式的组成部分。
带有doAction()
的接口将是基本组件,此接口的各种实现将是叶子,复合将组成这些实现。这样,调用doAction()
的客户端不需要知道它正在调用什么具体实现,从而使代码更加模块化。
可以使用组合(在 inVSeq 中保存私有序列对象 (3),但这会破坏接口的使用。
这不会破坏接口的使用,您可以将接口传递到构造函数中。
从多个接口派生类意味着该类需要实现(即重写)所有这些接口方法的代码(或调用基类实现)。偏爱组合而不是继承。