C# 设计问题:在使用常量时试图避免代码重复

C# 设计问题:在使用常量时试图避免代码重复,c#,inheritance,constants,C#,Inheritance,Constants,考虑这个类图: 汽车的最大速度为200公里/小时,公共汽车的最大速度为100公里/小时。我将其表示为子类中的const maxSpeed字段 如何使getMaxSpeed()返回此常量。这是一个简单的示例,仅用于说明我的问题,因此将getMaxSpeed()复制到每个子类对我没有帮助 有什么办法吗 我已经考虑过避免常量和使用虚拟属性的解决方案,但是该类的每个实例都会包含一个maxSpeed字段,这是对空间的浪费。使某些内容虚拟化的关键是,您不知道在编译时调用什么方法,因此,const不可能是虚

考虑这个类图:

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

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

有什么办法吗


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

使某些内容虚拟化的关键是,您不知道在编译时调用什么方法,因此,
const
不可能是虚拟的。典型的解决方案是在基类中使用
abstract public double-MaxSpeed{get;}
,然后在
Car
派生类中使用
重写public double-MaxSpeed{get{return 200;}


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

虚拟财产不需要字段。只要把它设置为
virtualintmaxspeed{get{return200;}}
就可以了。这闻起来像是一个解决方案,尽管还有一个函数调用。我想让const让编译器为我植入这些数字如果你想要一个
const
,它就不能是虚拟的。编译器无法从派生类内联常量。