Dies mag eine Anfängerfrage sein, aber gibt es eine Standardmethode, um die Duplizierung der Wheel -Eigenschaft in die abstrakte Klasse umzuwandeln und trotzdem die explizite Umwandlung in den Part-Typ beizubehalten. Nehmen wir an, wir müssen verhindern, dass ein FastCarWheel auf eine SlowCar gesetzt wird und dass es viele Eigenschaften wie diese gibt.Grundlegende Frage zum Refactoring in eine abstrakte Klasse
abstract class Car {}
class FastCar : Car
{
public FastCarWheel Wheel { get; set; }
}
class SlowCar : Car
{
public SlowCarWheel Wheel { get; set; }
}
abstract class WheelPart {}
class FastCarWheel: WheelPart {}
class SlowCarWheel: WheelPart {}
In dieser Art von Szenario ist es üblich, nur diese Art der Vervielfältigung zu erlauben? Ich dachte daran, Generics zu verwenden, aber es scheint, als würde ich das Problem verschieben, und es wird schlimmer für jede weitere Eigenschaft, die sich so verhält.
abstract class Car <P>
where P : Part
{
protected abstract P Wheel { get; set; }
}
Dank
Das ist das Problem, obwohl. Er möchte kein Auto irgendein Rad haben. Er möchte, dass FastCars nur FastWheels und SlowCars nur SlowWheels haben. Eine Schnittstelle würde dies nicht erreichen. – Joseph
Wenn ein FastCar kein SlowCarWheel haben kann, gehört diese Logik zu FastCar und nicht zur Basisklasse. –
Ich stimme zu, aber das Problem ist, dass Ihr Code die Verwendung dieser (FastCar.Wheel = new SlowCarWheel();) fördern würde, die er ausdrücklich sagte, dass er nicht zulassen wollte. Ich stimme jedoch zu, dass diese Logik nicht in die Basisklasse gehört. – Joseph