0

我有以下代码:

class Tile
{
    public TCODColor color { get; protected set; }
    public int glyph { get; protected set; }

    public Boolean isDigable()
    {
        return this.Equals(typeof(Wall));
    }
    public Boolean isGround()
    {
        return this.Equals(typeof(Floor));
    }
}

Wall 和 Floor 类都继承自 Tile。在程序的另一点,我有一个 if 语句,例如:

public void dig(int x, int y)
{
    if (tiles[x, y].isDigable())
    {
        tiles[x,y] = new Floor();
    }
}

瓷砖是瓷砖类的二维数组,它们的内容被初始化为地板或墙壁。因此,如果图块是墙,则它是可挖掘的(并且应该返回 true),但无论如何它总是返回 false,因此,不会执行其他代码。由于我不熟悉 C#,我想我在语法方面做错了,有什么建议吗?

4

1 回答 1

6

Equals方法用于测试两个值是否相等(以某种方式),例如,测试两个类型的变量是否Floor引用内存中的同一实例。

要测试对象是否属于某种类型,请使用is运算符

public Boolean isDigable()
{
    return this is Wall;
}

public Boolean isGround()
{
    return this is Floor;
}

或者正如Rotem建议的那样,您可以修改您的类以创建isDigableisGround 虚拟方法,并在您的子类中覆盖它们,如下所示:

class Tile
{
    public TCODColor color { get; protected set; }
    public int glyph { get; protected set; }

    public virtual bool isDigable() 
    { 
        return false; 
    }

    public virtual bool isGround() 
    { 
        return false; 
    }
}

class Wall: Tile
{
    public override bool isDigable()
    { 
        return true; 
    }
}

class Floor : Tile
{
    public override bool isGround()
    { 
        return true; 
    }
}
于 2014-07-10T15:37:56.267 回答