Similar question but not quite the same thingPseudo-multipla ereditarietà con metodi di estensione su interfacce in C#?
Stavo pensando che, con metodi di estensione nello stesso spazio dei nomi come interfaccia si potrebbe ottenere un effetto simile a ereditarietà multipla in quanto non è necessario avere il codice duplicato attuazione della stessa interfaccia allo stesso modo in 10 classi diverse.
Quali sono alcuni aspetti negativi di questo? Penso che i pro siano abbastanza ovvi, sono i contro che di solito tornano a morderti più tardi.
Uno degli svantaggi che vedo è che i metodi di estensione non possono essere virtuali, quindi è necessario essere sicuri di volere che vengano implementati allo stesso modo per ogni istanza.
Puoi spiegare "allora Foo non deriva da IBar e non può essere usato in modo intercambiabile con esso"? Se ho una classe pubblica Foo: IBar, non sarei in grado di passare in un Foo ovunque sia previsto un IBar? O intendevi qualcosa di diverso? Mi rendo conto che smette di funzionare come un'interfaccia. Funzionalmente immagino che agisca più come una classe base concreta senza metodi virtuali di un'interfaccia.(Che sia una buona idea o no è forse una domanda a parte, ma sembra utile mantenere DRY) – Davy8
E la maggior parte delle volte non vedo davvero troppo bisogno di ereditarietà multipla, ma c'è una porzione di codice al lavoro che sembra un pasticcio con codice ripetuto dappertutto che implementa la stessa interfaccia su letteralmente 10-20 classi diverse con lo stesso codice, e non può essere inserito in una classe base perché già derivano da un'altra classe base che ha metodi comune a un'interfaccia diversa. – Davy8
Se Foo deriva da IBar, è necessario disporre di metodi di istanza, non di metodi di estensione che implementano IBar. Ti aspetti di delegare questi metodi ai metodi di estensione? Supponevo che l'implementazione fosse fornita esclusivamente dalle estensioni. Se si sta eseguendo la delega, penso che la composizione dalle classi base che implementano la funzionalità dell'interfaccia desiderata sia più preferibile rispetto ai metodi di estensione. Forse potresti fornire la funzionalità utilizzando il modello di decoratore. – tvanfosson