如何模拟多重继承

时间:2014-11-25 11:50:36

标签: c# interface multiple-inheritance

我希望通过在C#中使用接口来模拟多重继承。但是,我并不完全明白。有人可以向我解释我的想法是错误的吗?

我有两类逆变器和序列。 Inverter有一个.doAction(),它只是在字符串中交换字符位置。 Sequence实际上是一个父级和两个子级的类层次结构。它们只是通过.doAction()方法以各种方式操作字符串。顺序中的对象都通过覆盖.doAction()方法来区分。

现在,我想创建一个名为invSeq的新类,它具有逆变器和序列的功能。

我做的是:

public class inVSeq : inverter, seq1, seq2, seq3

接口是序列层次结构下每个类的三个不同的.doAction()。

据我所知,我必须再次创建这些seq1,seq2,seq3(.doAction())方法。但是如何重用现有序列层次结构中的.doAction()方法呢?如果我只是重写接口的代码,我觉得这些类之间没有真正的联系。

我可以使用合成(在inVSeq中保存私有序列对象(3)),但这会破坏接口的使用。

2 个答案:

答案 0 :(得分:0)

  

可以使用合成(在inVSeq中保存私有序列对象(3)),但这会破坏接口的使用。

这不会破坏接口的使用,你可以将接口传递给构造函数。

从多个接口派生一个类意味着该类需要实现(即重写)所有这些接口方法的代码(或调用基类实现)。赞成合成而不是继承。

答案 1 :(得分:0)

您刚刚描述的内容称为Composite pattern,接口的组合是此模式的组成部分。

doAction()的接口将是基本组件,此接口的各种实现将是叶子,复合将组成这些实现。通过这种方式,调用doAction()的客户端不需要知道它调用的具体实现,使代码更加模块化。