C# this.Equals(typeof(...));
本文关键字:this typeof Equals | 更新日期: 2023-09-27 18:12:17
我有以下一段代码:
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();
}
}
瓷砖是Tile类的二维数组,它们的内容被初始化为Floor或Wall。因此,如果tile是Wall,则它是Digable(并且应该返回true),但无论如何它总是返回false,因此不执行其他代码。由于我不熟悉c#,我想我在语法方面做错了什么,有什么建议吗?
Equals
方法用于测试两个值是否相等(在某种程度上),例如,测试Floor
类型的两个变量是否在内存中引用同一个实例。
要测试对象是否为某种类型,使用is
操作符:
public Boolean isDigable()
{
return this is Wall;
}
public Boolean isGround()
{
return this is Floor;
}
或者像Rotem建议的那样,你可以修改你的类,使isDigable
和isGround
虚拟方法,并在你的子类中覆盖它们,像这样:
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;
}
}