关于继承和财产的问题

本文关键字:财产 问题 继承 于继承 | 更新日期: 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。