c#抽象方法继承和无意隐藏方法

本文关键字:隐藏 方法 抽象方法 继承 | 更新日期: 2023-09-27 18:08:54

我有一个关于意外隐藏抽象方法的问题。

我正在创建一个基本的实体类,作为创建我正在制作的游戏中所有其他实体的接口。

从这个实体类,我已经创建了几个派生类。比如MovingEntity, Trigger, Door等等……许多这些儿童类也有从他们派生的儿童。例如,MovingEntity有像射弹和敌人单位这样的子类。

在我的基本实体类中,我有像Update()和Render()这样抽象的方法,因为我希望每个实体都实现这些方法。

然而,一旦我到了第二层,那就是我遇到问题/问题的地方。例如,我将使用Trigger类。Trigger派生自base Entity类,但Trigger仍然有自己的子类(如TriggerRespawning和TriggerLimitedLifetime)。我不想实例化一个Trigger对象,所以我可以保持这个类是抽象的——我将只从Trigger的子类创建对象。但是我该如何处理Trigger应该从Entity实现的抽象方法呢?

我认为我可以在Trigger中使用与Entity中相同的代码。声明相同的方法,相同的名称,相同的参数,只是叫它抽象。然后,Trigger的子节点将被迫实现实际的功能。

这不起作用,但是,因为在触发器类中,我的构建错误说我隐藏了基实体类的抽象方法。

我如何传递强迫最终的子节点实现这些抽象方法而不让中间的所有父节点实现它们的想法?我需要在第一轮儿童课程中使用virtual吗?

到目前为止,我还没有找到一个好的答案,所以我决定停下来问一下。先谢谢你们了。

c#抽象方法继承和无意隐藏方法

完全不要重新声明这些方法——最终的具体类将不得不实现所有仍然未实现的抽象方法:

public abstract class Foo
{
    public abstract int M();
}
public abstract class Bar : Foo
{
    // Concrete methods can call M() in here
}
public class Baz : Bar
{
    public override int M() { return 0; }
}