考虑这个类图:
汽车的常数最大速度为200公里/小时,公交车速度为100公里/小时。我将其表示为子类中的const maxSpeed字段;
如何让getMaxSpeed()返回此常量。这是一个简单的例子,只是为了说明我的问题,所以将getMaxSpeed()复制到每个子类都无济于事。
有什么办法吗?
我已经考虑过避免使用虚拟属性和使用虚拟属性的解决方案,但是这个类的每个实例都会包含一个maxSpeed字段,这会浪费空间。
答案 0 :(得分:2)
制作虚拟内容的重点在于,您在编译时不知道要调用哪种方法,因此const
无法virtual
。abstract public double MaxSpeed { get; }
。对此的典型解决方案是在基类中使用override public double MaxSpeed { get { return 200; } }
,然后在Car
派生类中使用Vehicle
。
此解决方案允许复杂的JIT编译器确定Car
的特定实例始终为get_MaxSpeed
并且能够内联{{1}}方法调用(正如您所希望的那样) ,同时仍允许每辆车都有自己的最大速度。