如果两个 class 实现相同的接口,如何使用另一个 class 的方法
How to use a method from another class if both classes implement the same interface
所以这是我正在尝试做的一个例子:
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 class 并从那里继承所需的一切:
internal abstract class Insect { }
internal abstract class FlyingInsect : Insect, IFlyable
{
public void Fly()
{
//implementation
}
}
internal class Bee : FlyingInsect
{
}
internal class Hornet : FlyingInsect
{
}
尽管这解决了我的问题,但我仍然想知道有什么更好的替代方法可以做到这一点,尤其是如果有一种方法可以不创建另一个“统一”class,但是相反 calling/taking 这个已经从另一个使用相同接口的 class 实现的方法。
提前致谢。
这取决于你想要什么样的耦合,但是如果 所有 飞虫将使用该实现(或者只有少数不使用),你选择中间 class 似乎是合理的;t,您可以根据需要覆盖它)。这里有一些其他选项:
- 向
Insect
添加一个内部方法,Bee
和 Hornet
都调用(不过,如果它仅适用于飞虫,这似乎有点奇怪)
- 向
Bee
添加一个 Hornet
调用的静态方法(Bee.Fly
也必须调用它)
- 在其他位置添加静态方法(“实用程序”或“帮助程序”方法?),两者都会调用。
请注意,没有一种“聪明”的方法可以自动调用其他 class 的实现,只是因为它们实现了相同的接口。从表面上看,实现共享行为的中间类型似乎是最佳选择。
所以这是我正在尝试做的一个例子:
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 class 并从那里继承所需的一切:
internal abstract class Insect { }
internal abstract class FlyingInsect : Insect, IFlyable
{
public void Fly()
{
//implementation
}
}
internal class Bee : FlyingInsect
{
}
internal class Hornet : FlyingInsect
{
}
尽管这解决了我的问题,但我仍然想知道有什么更好的替代方法可以做到这一点,尤其是如果有一种方法可以不创建另一个“统一”class,但是相反 calling/taking 这个已经从另一个使用相同接口的 class 实现的方法。 提前致谢。
这取决于你想要什么样的耦合,但是如果 所有 飞虫将使用该实现(或者只有少数不使用),你选择中间 class 似乎是合理的;t,您可以根据需要覆盖它)。这里有一些其他选项:
- 向
Insect
添加一个内部方法,Bee
和Hornet
都调用(不过,如果它仅适用于飞虫,这似乎有点奇怪) - 向
Bee
添加一个Hornet
调用的静态方法(Bee.Fly
也必须调用它) - 在其他位置添加静态方法(“实用程序”或“帮助程序”方法?),两者都会调用。
请注意,没有一种“聪明”的方法可以自动调用其他 class 的实现,只是因为它们实现了相同的接口。从表面上看,实现共享行为的中间类型似乎是最佳选择。