在C#中的父类列表中覆盖

时间:2014-05-01 23:55:54

标签: c# xna-4.0

在我的XNA游戏中,我有一个从精灵列表(SpriteList)运行的foreach循环。此列表是其子类的混合。

在我的更新方法中,我正在使用:

foreach (Sprites s in SpriteList)
{
    s.Update();
}

这是调用Sprites类的update方法(它是抽象的),但我希望它使用它所构成的子类的update方法。

我尝试将Sprites类的更新方法设为abstract和virtual,并且在调用方法时都创建了错误

修改

我的精灵课是:

public abstract class Sprites
{
    public Texture2D SpriteTexture;
    public Rectangle SpriteRectangle;
    public SpriteTypes SpriteType;
    public Color SpriteColour;
    public bool SpriteAlive = false;

    public Sprites(Texture2D TextureIn, Rectangle RectangleIn)
    {
        SpriteTexture = TextureIn;
        SpriteRectangle = RectangleIn;
        SpriteType = SpriteTypes.Sprite;
        SpriteColour = Color.White;
    }

    public void Update()
    {
        // This is what's being called, rather than the update methods of the child classes
    }

2 个答案:

答案 0 :(得分:4)

您需要在virtual类中创建方法Sprites(如果该类中没有实现,则为abstract使用{{ 1}}在每个子类中声明方法时的关键字。

答案 1 :(得分:0)

这就是你需要的:

public abstract class Sprites
{
    public Texture2D SpriteTexture;
    public Rectangle SpriteRectangle;
    public SpriteTypes SpriteType;
    public Color SpriteColour;
    public bool SpriteAlive = false;

    public Sprites(Texture2D TextureIn, Rectangle RectangleIn)
    {
        SpriteTexture = TextureIn;
        SpriteRectangle = RectangleIn;
        SpriteType = SpriteTypes.Sprite;
        SpriteColour = Color.White;
    }

    // note the `abstract` keyword here,
    // which means "this method is to be implemented in child classes" 
    public abstract void Update();    
}

public class ChildSprites : Sprites
{
     public override void Update()//note `override` keyword
     {
         // ...
     }
}