簡體   English   中英

C#與接口的多重繼承

[英]C# Multiple Inheritance with Interfaces

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級再次編寫完整的方法。感謝您的幫助。

請注意,您根本沒有實現多重繼承。 C#具有單一的繼承性。 您正在實現多個接口。

絕對沒有理由不能在AB類中實現接口,然后BA派生而C從B派生。接口的方法實現甚至可以是抽象的,這迫使子類執行實現。 如果您遵循這種方法,那么您仍然可以通過強制轉換或使用as關鍵字將C傳遞為IAIB

您還可以使用接口IB “繼承” 1 (實現) IA ,這意味着實現IB任何東西也必須實現IA



1IB派生自IA它不像在類級別那樣繼承,它實際上仍然是實現。 因此IB 實現 IA ,它不會繼承它。

假設IA.Calculate()是不一樣的IB.Calculate()你因此不能只是做IB繼承IA ,可以實現在兩個接口C通過委派上的私人情況下執行AB

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();
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM