C#"找不到合适的方法来覆盖." - 但有一个

Jam*_*mie 27 c#

我无法在C#中覆盖父类的方法.父类的设置如下:

public class Base {
    public Base(Game1 game)
    {
        this.game = game;
    }

    public virtual void Draw()
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

......和孩子班:

public class Ext : Base {
    public Ext(Game1 game) : base(game)
    {
    }

    public override void Draw(SpriteBatch batch)
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

我知道我过去成功地覆盖了一个父方法,现在我可能忽略了一些非常简单的东西......它是什么?

编辑:这实际上是一个错字:在实际的脚本中,Ext确实来自Base.问题仍然存在.但是,谢谢您的快速解答.:)

Dav*_*vy8 29

你给出的代码(在编辑之后)编译得很好,所以其他错误不是你发布的内容.

有些事要检查,一切都是公开的吗?这包括类和方法.

有不同参数的过载?

你确定这Base是你认为的课程吗?即它是否有另一个同名的类,它实际上是引用它?

编辑:

要回答评论中的问题,您不能使用不同的参数覆盖方法,也不需要.您可以创建一个没有override关键字的新方法(使用新参数),它可以正常工作.

如果您的目的是禁止在没有参数的情况下调用基本方法,则可以将方法标记为protected而不是public.这样它只能从继承的类中调用Base


BFr*_*ree 7

你不是从你的基类继承的:

public class Ext : Base {
    // constructor

    public override void Draw()
    {
    }
}
Run Code Online (Sandbox Code Playgroud)


Cod*_*aos 5

您的方法的签名不同。但要重写方法,签名必须相同。

在您的情况下,基类版本没有参数,派生版本有一个参数。

所以你想做的事情没有多大意义。目的是,如果有人对具有静态类型BaseExt运行时类型的变量调用基函数,则调用将运行该Ext版本。对于不同的参数数量,这显然是不可能的。

也许您根本不想覆盖?