Cela peut être une question débutante, mais existe-t-il un moyen standard de refactoriser la duplication de la propriété Wheel dans la classe abstraite tout en maintenant le cast explicite au type Part. Supposons que nous devions empêcher un FastCarWheel d'être placé sur un SlowCar, et qu'il existe de nombreuses propriétés comme celle-ci.Question de base sur le refactoring dans une classe abstraite
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 {}
Dans ce type de scénario, est-il courant de permettre simplement ce type de duplication? Je pensais utiliser des génériques, mais il me semble que je suis en train de déplacer le problème, et cela empire pour chaque propriété supplémentaire qui se comporte ainsi.
abstract class Car <P>
where P : Part
{
protected abstract P Wheel { get; set; }
}
Merci
C'est le problème, cependant. Il ne veut pas qu'une voiture ait un type de roue. Il veut FastCars pour avoir seulement FastWheels, et SlowCars pour avoir seulement SlowWheels. Une interface ne permettrait pas cela. – Joseph
Si un FastCar ne peut pas avoir de SlowCarWheel, alors cette logique appartient à FastCar, et non à la classe de base. –
Je suis d'accord, mais le problème est que votre code favoriserait l'utilisation de ceci (fastCar.Wheel = new SlowCarWheel();) qu'il a explicitement dit ne pas vouloir autoriser. Je suis d'accord, cependant, que cette logique n'appartient pas à la classe de base. – Joseph