我有一个关于意外隐藏抽象方法的问题。
我正在创建一个基本 Entity 类作为接口(interface),在我正在开发的游戏中创建所有其他实体。
从这个实体类中,我创建了几个派生类。有诸如 MovingEntity、Trigger、Door 等......这些子类中的许多也有从它们派生的子类。例如,MovingEntity 将 Projectile 和 EnemyUnit 等类作为子类。
在我的基本实体类中,我有像 Update() 和 Render() 这样的抽象方法,因为我希望每个实体都实现这些方法。
然而,一旦我进入第二级,这就是我遇到问题的地方。例如,我将使用 Trigger 类。 Trigger 派生自基 Entity 类,但 Trigger 仍然有自己的子类(如 TriggerRespawning 和 TriggerLimitedLifetime)。我不想实例化 Trigger 对象,所以我可以保持该类抽象 - 我只会从 Trigger 的子类创建对象。但是我应该如何处理 Trigger 应该从 Entity 实现的抽象方法呢?
我想我基本上可以在 Trigger 中使用与在 Entity 中相同的代码。声明相同的方法,相同的名称,相同的参数,并称之为抽象。然后,Trigger 的子代将被迫实现实际功能。
但是,这不起作用,因为在 Trigger 类中,我的构建错误表明我正在从基 Entity 类中隐藏抽象方法。
我怎样才能传递强制最终 child 实现这些抽象方法的想法,而不让所有中间的 parent 都实现它们?我需要在第一轮 child 类(class)中使用虚拟吗?
到目前为止,我还没有找到一个好的答案,所以我决定打破并询问。提前谢谢各位。
最佳答案
只是根本不要重新声明方法 - 最终的具体类将必须实现所有仍未实现的抽象方法:
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; }
}
关于C# 抽象方法继承和无意隐藏方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7469409/