我对C#有点陌生,但是我在编程方面有相当广泛的背景。

我正在尝试做的事情:为游戏定义不同的MapTiles。我已经定义了基本的MapTile类,如下所示:

public class MapTile
{
    public Texture2D texture;
    public Rectangle mapRectangle;

    public MapTile(Rectangle rectangle)
    {
        this.mapRectangle = rectangle;
    }
}

然后,我像这样定义一个子类GrassTile:
class GrassTile : MapTile
{
    new Texture2D texture = Main.GrassTileTexture;
    new public Rectangle mapRectangle;

    public GrassTile(Rectangle rectangle) : base(rectangle)
    {
        this.mapRectangle = rectangle;
    }
}

在我的主类中,我正在创建一个新的maptile,如下所示:
Maptile testTile;
testTile = new GrassTile(new Rectangle(0, 0, 50, 50);

但是,当我尝试渲染此testTile时,其纹理最终为null。如果我在MapTile中定义纹理,我的代码就可以正常工作,因此与我以前的实现无关。

那么,如何获得GrassTile能够修改MapTile的成员变量纹理?或者让我的主类识别GrassTile的纹理,而不是MapTile的纹理,我也弄乱了接口(interface),但是我不能声明接口(interface)成员变量。 C#继承还有其他我还没有得到的东西吗?

提前致谢

最佳答案

子类将继承父类的成员。您无需指定它们。另外,最好使用属性而不是公共(public)字段。

public class MapTile
{
    public Texture2D Texture { get; set; }
    public Rectangle MapRectangle { get; set; }

    public MapTile(Rectangle rectangle)
    {
        MapRectangle = rectangle;
    }
}

public class GrassTile : MapTile
{
    public GrassTile(Rectangle rectangle) : base(rectangle)
    {
        Texture = Main.GrassTileTexture;
    }
}

10-06 05:33