所以這是我正在嘗試做的一個例子:
public interface IFlyable
{
void Fly();
}
internal abstract class Insect { }
internal class Bee : Insect, IFlyable
{
public void Fly()
{
//some implementation
}
}
internal class Hornet : Insect, IFlyable
{
public void Fly()
{
//here I want the same implementation as in Bee.Fly()
}
}
作為一個不希望只是復制粘貼實作的完整新手,我能想出的唯一有意義的方法是為飛行昆蟲制作另一個 asbtract 類并從那里繼承所需的一切:
internal abstract class Insect { }
internal abstract class FlyingInsect : Insect, IFlyable
{
public void Fly()
{
//implementation
}
}
internal class Bee : FlyingInsect
{
}
internal class Hornet : FlyingInsect
{
}
即使這解決了我的問題,我仍然想知道有什么更好的替代方法可以做到這一點,特別是如果有一種方法可以不創建另一個“統一”類,而是呼叫/獲取這個已經實作的方法另一個使用相同介面的類。提前致謝。
uj5u.com熱心網友回復:
這取決于您想要什么樣的耦合,但是如果所有飛行昆蟲都將使用該實作(或者只有少數不使用,并且您可以根據需要覆寫它),那么您對中間類的選擇似乎是合理的。以下是一些其他選項:
- 加入一個內部方法,
Insect這Bee和Hornet兩個呼叫(這似乎有點奇怪,如果它僅適用于飛蟲,雖然) Bee向該Hornet呼叫添加一個靜態方法(Bee.Fly也必須呼叫它)- 在一些其他位置(“實用程式”或“幫助程式”方法?)添加一個靜態方法,兩者都呼叫。
請注意,并沒有一種“聰明”的方式來自動呼叫其他類的實作,因為它們實作了相同的介面。從表面上看,實作共享行為的中間型別似乎是最佳選擇。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/399050.html
上一篇:單擊按鈕時如何使用私人區域的資料
下一篇:創建一個通用的工廠類
