Puede ser una pregunta para principiantes, pero ¿existe una forma estándar de refactorizar la duplicación de la propiedad Wheel en la clase abstracta y aún mantener la conversión explícita en el tipo Part? Supongamos que tenemos que evitar que un FastCarWheel sea puesto en un SlowCar, y que hay muchas propiedades como esta.Pregunta básica sobre la refactorización en una clase abstracta
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 {}
En este tipo de escenario, ¿es común permitir este tipo de duplicación? Estaba pensando en hacer uso de genéricos, pero parece que estoy moviendo el tema, y empeora por cada propiedad adicional que se comporta de esta manera.
abstract class Car <P>
where P : Part
{
protected abstract P Wheel { get; set; }
}
Gracias
Ese es el problema, sin embargo. NO QUIERE que ningún auto tenga ningún tipo de rueda. Quiere que FastCars solo tenga FastWheels y SlowCars para que solo tenga SlowWheels. Una interfaz no lograría esto. – Joseph
Si un FastCar no puede tener un SlowCarWheel, esa lógica pertenece a FastCar, y no a la clase base. –
Estoy de acuerdo, pero el problema es que su código promovería el uso de esto (fastCar.Wheel = new SlowCarWheel();) que explícitamente dijo que no quería permitir. Sin embargo, estoy de acuerdo en que esta lógica no pertenece a la clase base. – Joseph