Ich versuche, eine Vererbungshierarchie ähnlich den folgenden einzurichten:Was ist die beste Methode, um ein Array zu erben, das für die Unterklasse spezifische Daten speichern muss?
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;
}
ich in einem Motorrad-Objekt Achsen-Array und CarAxle Objekte in einem Auto-Objekt Achsen-Array nur speichern MotorcycleAxle Objekte möchte. Das Problem besteht darin, dass es keine Möglichkeit gibt, das Array in der Unterklasse zu überschreiben, um das eine oder das andere zu erzwingen. Im Idealfall würde so etwas wie die folgenden für die Motorrad-Klasse gilt:
class Motorcycle : Vehicle
{
public override List<MotorcycleAxle> Axles;
}
aber die Typen müssen übereinstimmen, wenn überschreiben. Wie kann ich diese Architektur unterstützen? Muss ich einfach eine Vielzahl von Laufzeit-Typprüfungen und Castings durchführen, wo immer das Axles-Mitglied aufgerufen wird? Ich mag es nicht, Laufzeittypprüfungen hinzuzufügen, weil Sie beginnen, die Vorteile von starker Typisierung und Polymorphismus zu verlieren. In diesem Szenario müssen zumindest einige Laufzeitüberprüfungen durchgeführt werden, da die Eigenschaften WheelAttached und Left/RightWheelAttached vom Typ abhängen, ich möchte sie jedoch minimieren.