我正在尝试设置类似于以下的继承层次结构:
abstract class Vehicle
{
public string Name;
public List<Axle> Axles;
}
class Motorcycle : Vehicle
{
}
class Car : Vehicle
{
}
abstract class Axle
{
public int Length;
public void Turn(int numTurns) { ... }
}
class MotorcycleAxle : Axle
{
public bool WheelAttached;
}
class CarAxle : Axle
{
public bool LeftWheelAttached;
public bool RightWheelAttached;
}
我只想将 MotorcycleAxle 对象存储在 Motorcycle 对象的 Axles 数组中,并将 CarAxle 对象存储在 Car 对象的 Axles 数组中。问题是没有办法覆盖子类中的数组来强制其中一个。理想情况下,类似以下内容对 Motorcycle 类有效:
class Motorcycle : Vehicle
{
public override List<MotorcycleAxle> Axles;
}
但是覆盖时类型必须匹配。我怎样才能支持这种架构?我是否只需要在访问 Axles 成员的任何地方进行大量运行时类型检查和转换?我不喜欢添加运行时类型检查,因为您开始失去强类型和多态性的好处。在这种情况下必须至少进行一些运行时检查,因为 WheelAttached 和 Left/RightWheelAttached 属性取决于类型,但我想最小化它们。