如果两个类实现相同的接口,如何使用另一个类的方法



下面是我尝试做的一个例子:

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
{
}

尽管这解决了我的问题,但我仍然想知道有什么更好的替代方法可以做到这一点,特别是如果有一种方法可以不创建另一个";"统一";类,但是从使用相同接口的另一个类调用/获取这个已经实现的方法。提前谢谢。

这取决于您想要什么样的耦合,但如果所有飞行昆虫都将使用该实现(或者只有少数don;t,您可以根据需要覆盖它(,则您对中间类的选择似乎是合理的。以下是一些其他选项:

  • Insect添加一个BeeHornet都调用的内部方法(不过,如果它只适用于飞行昆虫,这似乎有点奇怪(
  • Bee添加一个Hornet调用的静态方法(Bee.Fly也必须调用它(
  • 在两者都调用的其他位置添加一个静态方法("实用程序"或"助手"方法?(

注意;聪明的";自动调用其他类的实现的方法,因为它们实现了相同的接口。从表面上看,实现共享行为的中间类型似乎是最好的选择。

最新更新