我试图建立一个类似以下内容的继承层次:什么是继承需要存储子类特定数据的数组的最佳方式?
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对象的摩托车对象的车轴阵列,并CarAxle对象在汽车对象的车轴阵列。问题是没有办法重写子类中的数组来强制一个或另一个。理想情况下,类似以下内容对于摩托车类别将是有效的:
class Motorcycle : Vehicle
{
public override List<MotorcycleAxle> Axles;
}
但在覆盖时类型必须匹配。我怎样才能支持这个架构?我只需要进行大量的运行时类型检查并投射到Axles成员访问的任何地方?我不喜欢增加运行时类型检查,因为你开始失去强类型和多态性的好处。由于WheelAttached属性和Left/RightWheelAttached属性取决于类型,所以在这种情况下至少应该有一些运行时检查,但是我想将它们最小化。