[英]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#具有單一的繼承性。 您正在實現多個接口。
絕對沒有理由不能在A
和B
類中實現接口,然后B
從A
派生而C
從B派生。接口的方法實現甚至可以是抽象的,這迫使子類執行實現。 如果您遵循這種方法,那么您仍然可以通過強制轉換或使用as
關鍵字將C
傳遞為IA
或IB
。
您還可以使用接口IB
“繼承” 1 (實現) IA
,這意味着實現IB
任何東西也必須實現IA
。
1當IB
派生自IA
它不像在類級別那樣繼承,它實際上仍然是實現。 因此IB
實現 IA
,它不會繼承它。
假設IA.Calculate()
是不一樣的IB.Calculate()
你因此不能只是做IB
繼承IA
,可以實現在兩個接口C
通過委派上的私人情況下執行A
和B
:
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.