我对类设计有疑问。
我的游戏对象有核心类。绘图时我需要从对象中检索位置。不幸的是,对象被视为它的基类型,因此位置不是从派生类中检索的,而是从它的父类中检索的。将字段定义为虚拟字段可以解决我的问题,但这是不可能的:(。我如何设计类模式来避免这个问题?
正在发生的事情的简单示例:
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/