Questa può essere una domanda per principianti ma esiste un metodo standard per rifattorizzare la duplicazione della proprietà Wheel nella classe astratta, mantenendo tuttavia il cast esplicito per il tipo di Parte. Supponiamo di dover impedire a FastCarWheel di essere inserito in uno SlowCar e che ci siano molte proprietà come questa.Domanda di base sul refactoring in una classe astratta
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 questo tipo di scenario è comune consentire solo questo tipo di duplicazione? Stavo pensando di fare uso di Generics ma sembra che sto spostando il problema, e peggiora per ogni proprietà aggiuntiva che si comporta in questo modo.
abstract class Car <P>
where P : Part
{
protected abstract P Wheel { get; set; }
}
Grazie
Questo è il problema, però. NON vuole che nessuna macchina abbia alcun tipo di ruota. Vuole che FastCars abbia solo FastWheels e SlowCars abbia solo SlowWheels. Un'interfaccia non lo farebbe. – Joseph
Se una FastCar non può avere una SlowCarWheel, quella logica appartiene a FastCar e non nella classe base. –
Sono d'accordo, ma il problema è che il tuo codice promuoverà l'uso di questo (fastCar.Wheel = new SlowCarWheel();) che ha esplicitamente detto che non voleva consentire. Sono d'accordo, tuttavia, che questa logica non appartiene alla classe base. – Joseph