设计问题:在使用Consts时尽量避免代码重复

时间:2012-04-21 19:16:50

标签: c# inheritance const

考虑这个类图:

enter image description here

汽车的常数最大速度为200公里/小时,公交车速度为100公里/小时。我将其表示为子类中的const maxSpeed字段;

如何让getMaxSpeed()返回此常量。这是一个简单的例子,只是为了说明我的问题,所以将getMaxSpeed()复制到每个子类都无济于事。

有什么办法吗?

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

1 个答案:

答案 0 :(得分:2)

制作虚拟内容的重点在于,您在编译时不知道要调用哪种方法,因此const无法virtualabstract public double MaxSpeed { get; }。对此的典型解决方案是在基类中使用override public double MaxSpeed { get { return 200; } },然后在Car派生类中使用Vehicle

此解决方案允许复杂的JIT编译器确定Car的特定实例始终为get_MaxSpeed并且能够内联{{1}}方法调用(正如您所希望的那样) ,同时仍允许每辆车都有自己的最大速度。