gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 14:18:01 25 4
gpt4 key购买 nike

你好。我刚拿起 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com