Diciamo che ho un'interfaccia che molte molte classi distinte implementano:Soluzione per essere in grado di mettere il codice in interfacce
public interface IHaveObjects
{
object firstObject();
}
(Nota: non riesco a farne una classe di base astratta come implementatori di IHaveObjects maggio già una classe base)
Ora voglio aggiungere un nuovo metodo all'interfaccia, in modo che un implementatore dell'interfaccia possa avere un comportamento speciale per esso. Idealmente vorrei fare qualcosa di simile:
public interface IHaveObjects
{
object firstObject();
object firstObjectOrFallback()
{
return firstObject();
}
}
poi andare a quella implementazioni dell'interfaccia e dargli l'override:
public class ObjectHaverPlus : IHaveObjects
{
public override object IHaveObjects.firstObjectOrFallback()
{
return firstObject() ?? getDefault();
}
}
Tuttavia è vietato in C# per fornire un corpo di un metodo in un interfaccia, e vorrei evitare che ogni singolo implementatore di IHaveObjects
cada in una definizione di firstObjectOrFallback()
. (Immagina se ce ne sono centinaia o migliaia)
C'è un modo per farlo senza un sacco di copia incolla?
Perché non creare una seconda interfaccia per quel caso speciale? Non è possibile avere ereditarietà multipla delle classi, ma è possibile implementare più interfacce. – Tim