抽象类的孙子继承

时间:2018-06-30 10:42:35

标签: c# class inheritance abstract

我正在尝试创建一个(不太笨拙的)小游戏,但遇到了问题。 我有一个如下的类树:

  • 实体
    • 字符
      • 玩家
      • 敌人
    • 静态
      • 楼梯
      • OtherEncounter

现在,我打算实现一个生成器,该生成器应基于一些简单的启发式方法生成一个地图,并通过Entity构造函数将遭遇添加到某些Tiles中。为此,我选择在Tile构造器中使用“ Entity e ”参数。

现在要获取正确的类型,我在所有类中都设置了一个虚拟方法以返回其确切类型。在 Entity.cs Character.cs 中都是抽象的。但是,正如预期的那样,继承一个抽象方法并使其再次变得抽象并没有多大好处。

因此,我的问题是,是否存在任何类型的“正确”实现,还是仅存在一些简单的解决方法?我总是可以只跳过 Entity.cs 中的方法,并在 Character.cs Static.cs 中创建两个不同的方法,但这似乎太...乡下人了。

TL; DR:如何在未声明子级的情况下继承子级的抽象方法。

1 个答案:

答案 0 :(得分:1)

假设Character是抽象的,则根本不需要在Character中实现它。参见以下示例:

public abstract class Parent
{
    public abstract string Name {get;}
}

public abstract class Child : Parent
{

}

public class Grandchild: Child
{
    public override string Name { get { return "Test"; } }
}

由于Child也很抽象,因此您无需将任何方法重新声明为abstract,因此只需将实现要求传递给Grandchild

Try it online