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

时间:2011-09-19 10:21:31

标签: c# inheritance abstract

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

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

从这个Entity类中,我创建了几个派生类。有一些东西,如MovingEntity,Trigger,Door等......许多这些儿童班也有孩子从中衍生出来。例如,MovingEntity有像Projectile和EnemyUnit这样的类作为孩子。

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

然而,一旦我进入第二级,那就是我遇到问题/问题的地方。例如,我将使用Trigger类。触发器从基本实体类派生,但触发器仍然有自己的子节点(如TriggerRespawning和TriggerLimitedLifetime)。我不想实例化一个Trigger对象,所以我可以保持该类抽象 - 我只会从Trigger的子类创建对象。但是我如何处理Trigger应该从Entity实现的抽象方法呢?

我以为我基本上可以在Trigger中使用与在Entity中相同的代码。声明相同的方法,相同的名称,相同的参数,并将其称为抽象。然后,Trigger的孩子将被迫实施实际的功能。

然而,这不起作用,因为在Trigger类中,我的构建错误说我隐藏了基本Entity类中的抽象方法。

如何在不让所有父母实现这些抽象方法的情况下强制最终孩子实现这些抽象方法的想法?我是否需要在第一轮儿童课程中使用虚拟?

到目前为止,我还没有找到一个好的答案,所以我决定分手问。先谢谢你,伙计们。

1 个答案:

答案 0 :(得分:10)

根本不要重新声明这些方法 - 最终的具体类必须实现在树上一直未实现的所有抽象方法:

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