0

考虑这个类图:

在此处输入图像描述

汽车的最高速度恒定为 200 公里/小时,公共汽车的最高速度为 100 公里/小时。我将其表示为子类中的 const maxSpeed 字段;

如何让 getMaxSpeed() 返回这个常量。这是一个简单的示例,仅用于说明我的问题,因此将 getMaxSpeed() 复制到每个子类对我没有帮助。

有什么办法吗?

我已经考虑过避免使用 const 和使用虚拟属性的解决方案,但是该类的每个实例都会保存一个 maxSpeed 字段,这很浪费空间。

4

1 回答 1

2

虚拟化的全部意义在于您在编译时不知道要调用什么方法,因此 a constcan 是不可能的virtual。典型的解决方案是先abstract public double MaxSpeed { get; }在基类中,然后override public double MaxSpeed { get { return 200; } }Car派生类中。

此解决方案允许复杂的 JIT 编译器确定 a 的特定实例Vehicle始终为 aCar并能够内联get_MaxSpeed方法调用(如您所愿),同时仍允许每辆车拥有自己的最大速度。

于 2012-04-21T19:58:42.157 回答