En C#, tengo una jerarquía de clases con un par de clases base abstractas cerca de la parte superior y un buen número de clases derivadas. Algunas de estas clases concretas tienen algunas propiedades y métodos comunes que se implementan de manera idéntica. Me parece un desperdicio y entonces una solución podría ser implementar este comportamiento común en otra clase base abstracta.¿Implementar un comportamiento común en alternativa a las clases base abstractas?
abstract class Control;
abstract class SquareControl: Control
{
public int SquarishProperty;
public void SquarishMethod();
};
class Window: SquareControl;
class Button: SquareControl;
Sin embargo, lo que si varias otras clases en la jerarquía compartieron algún otro comportamiento sino que también comparten algo en común con uno de los controles de otra clase base? Tal vez hay muchas áreas de comunalidad. Sería poco práctico modelar esto con una implementación abstracta de la clase base, ¿no?
abstract class FlashableControl: Control
{
public int FlashyProperty;
public void FlashMethod();
};
class StatusBar: FlashableControl; // but it's also a bit square too, hmm...
Entonces, ¿cómo haces para compartir tales implementaciones entre clases sin usar clases base?
Imagino que quiero delegar la implementación de una interfaz en otra clase y hacer que esa clase implemente esas propiedades y métodos en nombre de las clases deseadas, de modo que para el usuario, la barra de estado parezca admitir una interfaz estándar , pero bajo las sábanas es otra cosa que lo implementa.
Puedo visualizar clases agregadas que implementan este comportamiento, pero ¿es esto apropiado y hay algún inconveniente? ¿Cuáles son las alternativas?
Gracias
FlashMethod, SquarishProperty etc., ¿tienen implemetaciones concretas en la clase base o son abstractas? – SWeko
Aquí son abstractos para ilustrar lo que no quiero hacer, en la implementación real tengo muchas clases derivadas, algunas de las cuales comparten implementaciones idénticas, no solo de interfaz, pero el código real (propiedades y métodos) es idéntico. – DaBozUK