-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

IA.Calculate()が と同じではないため、から継承するIB.Calculate()ことはできないと仮定すると、とのプライベート インスタンスでの実行を委譲することで、両方のインターフェイスを に実装できます。IBIACAB

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 に答える
1

多重継承をまったく達成していないことに注意してください。C# には単一継承があります。複数のインターフェイスを実装しています。

AクラスおよびBでインターフェイスを実装できず、さらに BBから派生しAたり、B から派生したりすることができない理由はまったくありませんC。インターフェイスからのメソッドの実装は、子クラスに実装を強制する抽象化することさえできます。このアプローチに従う場合でも、キーワードをキャストまたは使用するだけでCIAまたは単に渡すことができます。IBas

IBインターフェイスを「継承」1 (実装)することもできます。IAこれは、実装するものはすべて実装するIB必要があることを意味しIAます。



1クラスレベルのようにIB継承IAではなく、実際にはまだ実装です。したがって、IB 実装 IAしますが、継承しません。

于 2013-04-09T02:19:45.257 に答える