另一个“不继承抽象成员”

时间:2015-10-06 11:40:59

标签: c# inheritance override

我有一个愚蠢的C#问题。但请记住,我将从Java转到C#(虽然我希望覆盖方法相当简单)

我现在有两个类,基类 GameState ,子类 GameStateMenu

GameState类

namespace Bejeweled.State
{
    abstract class GameState
    {
        private bool visible;

        public abstract void Update();

        public abstract void Draw();

// More code is hidden down here.

我的GameStateMenu课程

namespace Bejeweled.State
{
    class GameStateMenu : GameState
    {
        public override void Update()
        {
        }

        public override void Draw()
        {
        }
    }
}

现在,我无法让 GameStateMenu 停止抱怨以下内容:

  

'Bejeweled.State.GameStateMenu'没有实现继承的抽象成员'Bejeweled.State.GameState.Update()'

我一直在谷歌搜索疯狂,而我最接近问题的资源是this one,但它仍然无济于事。

我还做错了什么我还没抓到? Visual Studio是否无缘无故抱怨?

抱歉这个愚蠢的小错误;非常感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

Abstract类的所有抽象方法都应该被覆盖,所以你应该在派生类中覆盖Draw(),如下所示

abstract class GameState
{
    private bool visible;

    public abstract void Update();

    public abstract void Draw();
}
class GameStateMenu : GameState
{
    public override void Update()
    {
    }
    public override void Draw()
    {
    }
}

如果你真的不想让Draw()方法被覆盖,你可以从GemState基类中的Draw()方法中删除抽象前缀,并提供这样的默认实现。

abstract class GameState
{
    private bool visible;

    public abstract void Update();

    public void Draw() 
    { 
    }
}
class GameStateMenu : GameState
{
    public override void Update()
    {
    }
}

答案 1 :(得分:0)

正如Lasse V. Karlsen所说,只是编译器是愚蠢的,而不是自我检查。跑步验证了这个绝对没必要的错误。

我为不必要的时间浪费道歉。