C#与接口的多重继承

时间:2013-04-09 02:12:03

标签: c# asp.net multiple-inheritance

public interface IA
{
  void DoSomething();
  void Calculate();

}

public interface IB
{
  void DoSomethingElse();
  void Calculate();
}

public class A : IA
{
  void DoSomething() { }
  void Calculate() {}
}

public class B : IB
{
  void DoSomethingElse() { }
  void Calculate() {}
}

public class C : IA, IB
{

    //How can I implement Calculate() in class B and DoSomething() in class A?
}

如何避免C类中的重复代码。参考:How to simulate multiple inheritance in C#。我不想在C级再次编写完整的方法。感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

请注意,您根本没有实现多重继承。 C#具有单一的继承性。您正在实现多个接口。

绝对没有理由不能在类AB中实现接口,然后从B导出A并导出C来自接口的方法实现甚至可以是抽象的,这迫使子类执行实现。如果您使用此方法,则只需投放或使用C关键字,您仍可以IAIB传递as

你也可以让接口IB“继承” 1 (工具)IA,这意味着任何实现IB的东西也必须实现IA }。



1 IB派生自IA时,它不是类似于类级别的继承,它实际上是仍然实现。所以IB 实现 IA,它不会继承它。

答案 1 :(得分:1)

假设IA.Calculate()IB.Calculate()不同,因此您不能仅从IB继承IA,您可以在{{1}中实现这两个接口通过委托CA的私有实例执行:

B