-1
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 类中的重复代码。参考:如何在 C# 中模拟多重继承。我不想在 C 类中再次编写完整的方法。感谢您的帮助。

4

2 回答 2

1

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

绝对没有理由不能在类A和中实现接口B,然后从 BB派生AC派生。接口的方法实现甚至可以是抽象的,这迫使子类进行实现。如果您遵循这种方法,那么您仍然可以通过强制转换或使用关键字C来传递IA或简单地传递。IBas

您还可以拥有 interface IB"inherit" 1 (implement) IA,这意味着实现的任何东西也IB必须实现IA



1IBIA它派生不是像在类级别那样的继承时,它实际上仍然是实现。所以IB implements IA,它不会继承它。

于 2013-04-09T02:19:45.257 回答
1

假设这IA.Calculate()不一样IB.Calculate(),因此您不能只IB继承 from ,您可以通过委派和的私有实例执行IA来实现这两个接口:CAB

public class C : IA, IB
{
    private A _a;
    private B _b;

    public C()
    {
        this._a = new A();
        this._b = new B();
    }

    public void DoSomething()
    {
        this._a.DoSomething();
    }
    void IA.Calculate()
    {
        this._a.Calculate();
    }
    public void DoSomethingElse()
    {
        this._b.DoSomethingElse();
    }
    void IB.Calculate()
    {
        this._b.Calculate();
    }
}
于 2013-04-09T03:37:10.303 回答