C# 设计问题:在使用常量时试图避免代码重复
考虑这个类图: 汽车的最大速度为200公里/小时,公共汽车的最大速度为100公里/小时。我将其表示为子类中的const maxSpeed字段 如何使getMaxSpeed()返回此常量。这是一个简单的示例,仅用于说明我的问题,因此将getMaxSpeed()复制到每个子类对我没有帮助 有什么办法吗C# 设计问题:在使用常量时试图避免代码重复,c#,inheritance,constants,C#,Inheritance,Constants,考虑这个类图: 汽车的最大速度为200公里/小时,公共汽车的最大速度为100公里/小时。我将其表示为子类中的const maxSpeed字段 如何使getMaxSpeed()返回此常量。这是一个简单的示例,仅用于说明我的问题,因此将getMaxSpeed()复制到每个子类对我没有帮助 有什么办法吗 我已经考虑过避免常量和使用虚拟属性的解决方案,但是该类的每个实例都会包含一个maxSpeed字段,这是对空间的浪费。使某些内容虚拟化的关键是,您不知道在编译时调用什么方法,因此,const不可能是虚
我已经考虑过避免常量和使用虚拟属性的解决方案,但是该类的每个实例都会包含一个maxSpeed字段,这是对空间的浪费。使某些内容虚拟化的关键是,您不知道在编译时调用什么方法,因此,
const
不可能是虚拟的。典型的解决方案是在基类中使用abstract public double-MaxSpeed{get;}
,然后在Car
派生类中使用重写public double-MaxSpeed{get{return 200;}
此解决方案允许复杂的JIT编译器确定
Vehicle
的特定实例始终是Car
,并能够内联get_MaxSpeed
方法调用(如您所希望的),同时仍然允许每辆车都有自己的最高速度。虚拟财产不需要字段。只要把它设置为virtualintmaxspeed{get{return200;}}
就可以了。这闻起来像是一个解决方案,尽管还有一个函数调用。我想让const让编译器为我植入这些数字如果你想要一个const
,它就不能是虚拟的。编译器无法从派生类内联常量。