C# Abstract Method Inheritance and Hiding Methods Unintentionally
我有个问题是关于不小心隐藏了抽象方法。
我正在创建一个基本的实体类作为接口,从中创建我正在开发的游戏中的所有其他实体。
从这个实体类,我创建了几个派生类。有动作,扳机,门等等。这些儿童班中的许多班也有从中衍生出来的孩子。例如,movingentity的子级是抛射和enemyUnit。
在我的基本实体类中,我有一些抽象的方法,比如update()和render(),因为我希望每个实体都实现这些方法。
然而,一旦我进入第二个层次,那就是我的问题所在。例如,我将使用触发器类。触发器从基本实体类派生,但触发器仍有自己的子级(如triggerRespawn和triggerLimitedLifetime)。我不想实例化一个触发器对象,所以我可以保持类的抽象性-我只从触发器的子类创建对象。但是我该如何处理触发器应该从实体实现的抽象方法呢?
我想我基本上可以在触发器中使用与在实体中相同的代码。声明相同的方法、相同的名称、相同的参数,并将其称为抽象的。然后,触发器的子级将被强制实现实际的函数。
但是,这不起作用,因为在触发器类中,我的构建错误表明我正在从基本实体类中隐藏抽象方法。
我怎样才能放弃强迫最终的孩子实现这些抽象方法的想法,而不让所有的父母在这两者之间实现它们呢?我是否需要在第一轮儿童课程中使用虚拟?
到目前为止,我还没有找到一个很好的答案,所以我决定分头问问。提前谢谢,伙计们。
只需根本不要重新声明这些方法——最终的具体类将必须实现树上仍然没有实现的所有抽象方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | 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; } } |