下面是我尝试做的一个例子:
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
添加一个Bee
和Hornet
都调用的内部方法(不过,如果它只适用于飞行昆虫,这似乎有点奇怪( - 向
Bee
添加一个Hornet
调用的静态方法(Bee.Fly
也必须调用它( - 在两者都调用的其他位置添加一个静态方法("实用程序"或"助手"方法?(
注意;聪明的";自动调用其他类的实现的方法,因为它们实现了相同的接口。从表面上看,实现共享行为的中间类型似乎是最好的选择。