In C#, ho una gerarchia di classi con un paio di classi di base astratte nella parte superiore e un discreto numero di classi derivate. Alcune di queste classi concrete hanno alcune proprietà e metodi comuni che vengono implementati in modo identico. Mi sembra uno spreco e quindi una soluzione potrebbe essere quella di implementare questo comportamento comune in un'altra classe base astratta.Implementare un comportamento comune in alternativa alle classi di base astratte?
abstract class Control;
abstract class SquareControl: Control
{
public int SquarishProperty;
public void SquarishMethod();
};
class Window: SquareControl;
class Button: SquareControl;
Tuttavia, quello che se diverse altre classi nella gerarchia condiviso qualche altro comportamento, ma anche condividere qualcosa in comune con uno dei controlli di un'altra classe di base? Forse ci sono molte aree di comunanza. Sarebbe impraticabile modellarlo con un'implementazione astratta della classe base, no?
abstract class FlashableControl: Control
{
public int FlashyProperty;
public void FlashMethod();
};
class StatusBar: FlashableControl; // but it's also a bit square too, hmm...
Quindi, come si fa a condividere tali implementazioni tra le classi senza utilizzare le classi di base?
Immagino di voler delegare l'implementazione di un'interfaccia a un'altra classe e che tale classe implementa tali proprietà e metodi per conto delle classi desiderate, in modo che all'utente, StatusBar e Window sembrino supportare un'interfaccia standard ma sotto le coperte è qualcos'altro che lo implementa.
Sono in grado di visualizzare le classi di aggregazione che implementano questo comportamento, ma è appropriato e ci sono delle insidie? Quali sono le alternative?
Grazie
FlashMethod, SquarishProperty ecc. Hanno delle implementazioni concrete nella classe base o sono astratte? – SWeko
Qui sono astratti per illustrare ciò che non voglio fare, nell'attuale implementazione ho molte classi derivate alcune delle quali condividono implementazioni identiche, non solo un'interfaccia, ma il codice reale (proprietà e metodi) è identico. – DaBozUK