は、私は次のような継承階層を設定しようとしている:サブクラス固有のデータを格納する必要がある配列を継承する最善の方法は何ですか?
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;
}
私は希望Carオブジェクトの車軸配列内の唯一のオートバイのオブジェクトの車軸配列に格納MotorcycleAxleオブジェクト、およびCarAxleオブジェクトへ。問題は、サブクラス内の配列をオーバーライドしてどちらか一方を強制する方法がないことです。理想的には、以下のようなものは、オートバイのクラスのために有効になります:
class Motorcycle : Vehicle
{
public override List<MotorcycleAxle> Axles;
}
が、種類がオーバーライドする際一致させる必要があります。このアーキテクチャをサポートするにはどうすればよいですか? Axlesのメンバーがアクセスされている場所であれば、実行時の型チェックとキャストが必要ですか?私は、実行時の型チェックを追加するのは好きではありません。なぜなら、厳密な型定義と多型の利点を失い始めるからです。 WheelAttachedプロパティとLeft/RightWheelAttachedプロパティは型に依存するので、このシナリオでは少なくともいくつかの実行時チェックが必要ですが、最小化したいと思います。