c# - 多态性问题 - 虚拟字段? (C#)

标签 c# xna polymorphism

我对类设计有疑问。

我的游戏对象有核心类。绘图时我需要从对象中检索位置。不幸的是,对象被视为它的基类型,因此位置不是从派生类中检索的,而是从它的父类中检索的。将字段定义为虚拟字段可以解决我的问题,但这是不可能的:(。我如何设计类模式来避免这个问题?

正在发生的事情的简单示例:

class BaseClass { public Vector2 position = new Vector2(){X=0,Y=0}; }
class Class:BaseClass { public new Vector2 position = new Vector2(){X=10,Y=10}; }

BaseClass c = new Class();
// c.position.X is now 0

最佳答案

您可以修改它以使用虚拟属性而不是字段。这将正确处理事情。

如果出于某种原因无法使用属性,您还可以按如下方式修改构造函数:

class BaseClass
{
    public Vector2 position = new Vector2(){X=0,Y=0};
}

class Class:BaseClass 
{ 
    public Class()
    {
        this.position = new Vector2(){X=10,Y=10};
    }
}

这并不完全相同,因为您没有使用自己的隐藏基类字段,但它会正确初始化它,以便您可以按照示例建议的那样使用它。

关于c# - 多态性问题 - 虚拟字段? (C#),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/722092/

相关文章:

c# - 冒号( :) in url causes error in asp. 网络

c# - .net - Array.Sort 和 Array.BinarySearch 的问题 - 文化和全局化

c# - 使用蓝牙和 C# 从手机发送短信

c++ - 多态性从基类调用函数

javascript - 在 Windows 10 通用应用程序中从 JavaScript 调用 C# 组件

c# - PC 上 XNA 中的信箱和缩放

testing - 在进行 XNA 开发时,有没有一种方法可以验证代码是否可以在 360 上运行?

c# - Verlet Integration 正在炸毁我的物理引擎

接受类及其接口(interface)的 Java 类型(逆变)

c++ - 在 C++ 中复制一个未知的具体类型