Sky*_*sky 0 c# typeof this equals-operator
我有以下代码:
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));
}
}
Run Code Online (Sandbox Code Playgroud)
Wall和Floor类都继承自Tile.在程序的另一个点上,我有一个if语句,例如:
public void dig(int x, int y)
{
if (tiles[x, y].isDigable())
{
tiles[x,y] = new Floor();
}
}
Run Code Online (Sandbox Code Playgroud)
tile是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;
}
Run Code Online (Sandbox Code Playgroud)
或者正如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;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
89 次 |
| 最近记录: |