【发布时间】:2014-11-25 11:50:35
【问题描述】:
我想练习在 C# 中使用接口来模拟多重继承。然而,我并不完全明白。谁能给我解释一下我的想法哪里错了?
我有两类逆变器和序列。 Inverter 有一个 .doAction() ,它只是交换字符串中的字符位置。序列实际上是一个父级和两个子级的类层次结构。他们只是通过 .doAction() 方法以各种方式操作字符串。通过重写 .doAction() 方法来区分顺序的对象。
现在,我想创建一个名为 invSeq 的新类,它具有逆变器和序列的功能。
我做的是这样的:
public class inVSeq : inverter, seq1, seq2, seq3
接口属于序列层次结构下每个类的三个不同的 .doAction()。
所以据我了解,我必须再次创建这些 seq1、seq2、seq3 (.doAction()) 方法。但是如何重用现有序列层次结构中的 .doAction() 方法?如果我只是重写接口的代码,我觉得类之间没有真正的联系。
我可以使用组合(在 inVSeq 中保存私有序列对象 (3)),但这会破坏接口的使用。
【问题讨论】:
-
多重继承不好,gen-spec 关系太僵化,以后当你想改变继承层次时可能会导致严重的问题,优先考虑组合而不是 gen-spec 关系。如果
inverter和sequence都有Foo()怎么办? -
添加一个 gen-spec 关系只是为了代码重用是一种反模式,可能迟早会导致钻石问题
-
应使用此代码调用哪个
doAction:inVSeq.doAction()?
标签: c# interface multiple-inheritance