将对象同时转换为抽象类和接口

时间:2014-10-27 13:46:46

标签: c# casting

我正在尝试用C#制作游戏。 首先看一下我目前的一些代码:

我的抽象类gridobject

它包含我的gridobjects(墙,玩家,敌人等)的所有常规属性

abstract class GridObject
{
    public Rectangle Rect;

    ...
    //all kind of getters and setters for location and size: X, Y, Height, Width
    ...
}

界面移动

此界面包含移动的gridobject的属性:

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是必需的? 这样做的正确方法是什么?

2 个答案:

答案 0 :(得分:1)

在设置值之前将其转换/转换为您需要的类型。

if(obj is Moving)
{
    var objectAsMoving = obj as Moving; //or (Moving)obj;
    objectAsMoving.Y += objectAsMoving.Yspeed;
    objectAsMoving.Yspeed++;
}

答案 1 :(得分:0)

感谢DLeh,我找到了解决方案。 我正在使用一个继承自MovingGridObjectGridObject的额外抽象类Moving。 这是我将在doGravity方法中使用的类型。