关于继承和财产的问题
本文关键字:财产 问题 继承 于继承 | 更新日期: 2023-09-27 18:08:17
我有一个"基"类,它包含以下属性:
public virtual Vector3b SIZE { get { return new Vector3b(16, 16, 16); } }
public virtual Vector3b MAX
{
get { return new Vector3b(
(byte)(this.SIZE.X - 1),
(byte)(this.SIZE.Y - 1),
(byte)(this.SIZE.Z - 1));
}
}
现在,如果我在继承基类的类中重写SIZE属性,MAX是否从基类或继承类中计算SIZE(或者应该只是没有这个的SIZE) ?
编辑:忘了说,Vector3b基本上就是Vector3,但它使用字节而不是浮点数。
根据定义,虚拟属性或方法根据接收者的运行时类型来调度方法。在您的示例中,如果运行时类型是派生类,则调用派生属性。
如果this
引用的运行时类型为派生类型,则MAX
将使用派生类SIZE
。它被称为虚拟方法和属性的动态分派,基于对象的运行时类型。
class X
{
public virtual Vector3b SIZE { get { return new Vector3b(16, 16, 16); } }
public virtual Vector3b MAX
{
get { return new Vector3b(
(byte)(this.SIZE.X - 1),
(byte)(this.SIZE.Y - 1),
(byte)(this.SIZE.Z - 1));
}
}
}
class Y : X
{
public virtual Vector3b SIZE { get { return new Vector3b(26, 26, 26); } }
}
X x = new X();
var xmax = x.MAX ;// MAX uses X's SIZE
Y y = new Y();
var ymax = y.MAX ;// MAX uses Y's SIZE
如果重写了虚拟属性,继承的类将使用继承类中的所有内容。
您的派生类将使用重写的SIZE。