我无法在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
你不是从你的基类继承的:
public class Ext : Base {
// constructor
public override void Draw()
{
}
}
Run Code Online (Sandbox Code Playgroud)
您的方法的签名不同。但要重写方法,签名必须相同。
在您的情况下,基类版本没有参数,派生版本有一个参数。
所以你想做的事情没有多大意义。目的是,如果有人对具有静态类型Base但Ext运行时类型的变量调用基函数,则调用将运行该Ext版本。对于不同的参数数量,这显然是不可能的。
也许您根本不想覆盖?
| 归档时间: |
|
| 查看次数: |
123526 次 |
| 最近记录: |