【问题标题】:Abstract class grandchildren inheritance抽象类孙子继承
【发布时间】:2018-06-30 10:42:34
【问题描述】:

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

  • 实体
    • 字符
      • 播放器
      • 敌人
    • 静态
      • 楼梯
      • 其他遭遇

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

现在为了获得正确的类型,我在所有类中设置了一个虚方法来返回它们的确切类型。这在 Entity.csCharacter.cs 中都是抽象的。但是正如预期的那样,继承一个抽象方法并使其再次抽象并没有多大用处。

因此,我的问题是,是否有任何“正确”的实施方式,或者是否有一些简单的解决方法?我总是可以跳过 Entity.cs 中的方法并在 Character.csStatic.cs 中创建两个不同的方法,但这似乎太……乡巴佬了。

TL;DR:如何在孙子中继承抽象方法,而不在子孙中声明。

【问题讨论】:

    标签: c# class inheritance abstract


    【解决方案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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多