将对象强制转换为抽象类和接口
本文关键字:抽象类 接口 转换 对象 | 更新日期: 2023-09-27 18:27:54
我正在尝试用C#制作一个游戏。到目前为止,第一次看到我的一些代码:
我的抽象类gridobject
它包含了我的网格对象(墙、玩家、敌人等)的所有一般属性
abstract class GridObject
{
public Rectangle Rect;
...
//all kind of getters and setters for location and size: X, Y, Height, Width
...
}
界面移动
此接口包含移动网格对象的属性:
interface Moving
{
int Xspeed { get; set; }
int Yspeed { get; set; }
void Move();
}
现在我想给我的游戏增加重力:
public void doGravity(GridObject obj)
{
//check if intersects && if object isn't the same as the given object.
while (AllGridObjects.FindAll(item => item.Rect.IntersectsWith(obj.Rect) && item != obj).Count > 0)
{
obj.Y += obj.Yspeed;
obj.Yspeed++;
}
}
这当然会产生编译错误。因为Yspeed不是抽象类GridObject中的必需字段。也许标题不正确,也许也是我的问题,但我如何将对象强制转换为抽象类和接口,以确保需要属性Y和属性Yspeed?正确的方法是什么?
在设置值之前将其转换为所需的类型。
if(obj is Moving)
{
var objectAsMoving = obj as Moving; //or (Moving)obj;
objectAsMoving.Y += objectAsMoving.Yspeed;
objectAsMoving.Yspeed++;
}
感谢DLeh,我找到了解决方案。我正在使用一个额外的抽象类MovingGridObject
,它继承自GridObject
和Moving
。这就是我要在doGravity
方法中使用的类型。