C# 在父类(super class)中调用重写的方法

标签 c# c#-4.0 xna

你好。我刚拿起 C# 来学习使用 XNA 进行游戏编程,但我也有一些 Java 经验。

这是我的代码,本质上是:

public class A
{
    public Rectangle getRectangle()
    {
        return [some rectangle];
    }

    public bool collision(A other)
    {
        Rectangle rect1 = getRectangle();
        Rectangle rect2 = other.getRectangle();
        return rect1.Intersects(rect2);
    }
}

public class B : A
{
    public Rectangle getRectangle()
    {
        return [some other rectangle];
    }
}

当我尝试这样的事情时,问题出现了:

A a;
B b;
if(a.collision(b))
    ...

据我所知,B 版本的 get rectangle 实际上从未被调用过。 我尝试了建议的解决方案 here 但我得到的消息基本上是“B.getRectangle() 隐藏了继承的成员 A.getRectangle()。如果这是有意的,请使用 new 关键字。”

我提前感谢我收到的任何帮助。我认为我过去的 Java 经验妨碍了理解 C# 的不同之处。我想如果有人只知道一个很好的链接来解释 C# 和 java 之间的差异,或者 C# 在这方面的工作方式就足够了。

干杯。

最佳答案

与 Java 不同,C# 中的方法默认标记为虚拟的。您当前的代码正在做的是隐藏 getRectangle 方法:在派生类中的方法声明中有一个隐式的new 修饰符。

您需要在基类的方法声明中显式包含 virtual 修饰符:

public virtual Rectangle getRectangle() { ... }

并在派生类中覆盖它:

public override Rectangle getRectangle() { ... }

关于C# 在父类(super class)中调用重写的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5177051/

相关文章:

c# - 使用 JSON.NET 升级 JSON 文档

c# - .net core依赖注入(inject)是否支持Lazy<T>

.net - 是否可以为Zune构建电子邮件阅读器?

c# - XNA - 模拟雪

silverlight - 在 XNA 中用于简单 2D SpriteBatch 绘图的像素着色器应该使用什么顶点着色器代码?

c# - 使用 @@TRANCOUNT 有用吗?

c# - Moq - 设置 .Equals 方法返回 false

c# - 如何检查 XmlDocument 是否已更改?

asp.net - 无法正确添加服务引用

c# - 如何组织交易?