Il polimorfismo in C# è uno dei concetti fondamentali della programmazione orientata agli oggetti. Significa che un’azione può essere eseguita in modi diversi a seconda dell’oggetto su cui viene chiamata. In parole semplici, permette di trattare oggetti di classi diverse attraverso la stessa interfaccia o classe base. Grazie al polimorfismo, possiamo scrivere codice più flessibile e manutenibile.
Esempio di polimorfismo in C#
Vediamo ora un esempio per chiarire meglio il concetto. Supponiamo di avere una classe base chiamata Animale e due classi derivate: Cane e Gatto. Entrambi ereditano da Animale
, ma implementano il loro metodo FaiVerso in maniera differente.
public class Animale
{
public virtual void FaiVerso()
{
Console.WriteLine("L'animale fa un verso.");
}
}
public class Cane : Animale
{
public override void FaiVerso()
{
Console.WriteLine("Il cane abbaia.");
}
}
public class Gatto : Animale
{
public override void FaiVerso()
{
Console.WriteLine("Il gatto miagola.");
}
}
public class Programma
{
public static void Main()
{
Animale mioAnimale = new Cane();
mioAnimale.FaiVerso(); // Uscita: Il cane abbaia
mioAnimale = new Gatto();
mioAnimale.FaiVerso(); // Uscita: Il gatto miagola
}
}
Override dei metodi: Come funziona in C#
Nel codice precedente, abbiamo usato la parola chiave override per modificare il comportamento del metodo FaiVerso. Questo è un altro concetto importante legato al polimorfismo. Il metodo originale è definito nella classe base Animale
con l’uso di virtual
, il che significa che le classi derivate possono sovrascriverlo.
Nel nostro esempio, sia Cane
che Gatto
sovrascrivono il metodo, fornendo la propria implementazione specifica. Grazie al polimorfismo, possiamo chiamare lo stesso metodo su oggetti diversi e ottenere risultati diversi a seconda dell’oggetto reale su cui viene chiamato.
Quando e come utilizzare il polimorfismo in C#
Il polimorfismo è molto utile quando abbiamo una struttura di classi che condivide una logica comune ma ha comportamenti specifici nelle classi derivate. Ad esempio, possiamo creare una lista di oggetti Animale
e inserire sia oggetti di tipo Cane
che di tipo Gatto
, utilizzando il metodo FaiVerso su tutti gli oggetti senza doverli distinguere manualmente.
List<Animale> animali = new List<Animale>()
{
new Cane(),
new Gatto()
};
foreach (Animale animale in animali)
{
animale.FaiVerso(); // Chiama FaiVerso per ogni oggetto, mostrando il polimorfismo
}
Conclusione
Il polimorfismo in C# è un concetto potente che ti permette di scrivere codice più pulito e organizzato. Grazie a questo principio, puoi evitare di scrivere lunghi blocchi di istruzioni condizionali e rendere il tuo codice più flessibile e facile da mantenere. Se stai imparando C#, dedicare del tempo a comprendere il polimorfismo ti aiuterà a padroneggiare meglio la programmazione orientata agli oggetti.