我試圖建立一個類似以下內容的繼承層次:什麼是繼承需要存儲子類特定數據的數組的最佳方式?
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屬性取決於類型,所以在這種情況下至少應該有一些運行時檢查,但是我想將它們最小化。