Ereditarietà in C#
L’ereditarietà è un concetto fondamentale nella programmazione orientata agli oggetti (OOP) che consente di definire nuove classi basate su classi esistenti. La classe derivata (sottoclasse) eredita le proprietà e i metodi della classe di base (superclasse). In questa lezione, esploreremo in dettaglio come funziona l’ereditarietà in C#, come definire e utilizzare classi derivate e come sfruttare i vantaggi dell’ereditarietà nella progettazione del software.
Concetto di EreditarietÃ
L’ereditarietà permette di creare una gerarchia di classi in cui una classe più generale (superclasse) può essere estesa da una o più classi più specifiche (sottoclassi). Le sottoclassi ereditano le caratteristiche della superclasse, come campi, proprietà e metodi, consentendo la condivisione di funzionalità comuni.
Definizione di una Classe Derivata
Per definire una classe derivata, utilizziamo la sintassi class NomeSottoclasse : NomeSuperclasse
.
Esempio di Definizione di una Classe Derivata:
class Veicolo{ public string Marca { get; set; } public void Avvia() { Console.WriteLine("Veicolo avviato."); }}
class Automobile : Veicolo{ public int NumeroPorte { get; set; }}
Nell’esempio sopra, Automobile
è una classe derivata da Veicolo
.
Utilizzo delle Proprietà e Metodi
Una classe derivata eredita tutte le proprietà e i metodi pubblici o protetti della classe di base.
Esempio di Utilizzo:
Automobile auto = new Automobile();auto.Marca = "Toyota";auto.Avvia();
Override dei Metodi
È possibile sovrascrivere un metodo della superclasse nella sottoclasse utilizzando la parola chiave override
.
Esempio di Override di un Metodo:
class Automobile : Veicolo{ public int NumeroPorte { get; set; }
public override void Avvia() { Console.WriteLine("Automobile avviata."); }}
Costruttori nella Classe Derivata
Una classe derivata può chiamare il costruttore della superclasse utilizzando la sintassi base()
.
Esempio di Costruttori:
class Veicolo{ public Veicolo(string marca) { Marca = marca; }}
class Automobile : Veicolo{ public Automobile(string marca, int porte) : base(marca) { NumeroPorte = porte; }}
Vantaggi dell’EreditarietÃ
L’ereditarietà favorisce la riusabilità del codice, consentendo di definire nuove classi basate su classi esistenti. Questo approccio riduce la duplicazione del codice e semplifica la manutenzione. Inoltre, l’ereditarietà favorisce la struttura gerarchica, che rende il codice più organizzato e comprensibile.
Conclusione
L’ereditarietà è uno dei pilastri della programmazione orientata agli oggetti, consentendo la creazione di classi derivate che ereditano proprietà e metodi dalla classe di base. Questo concetto promuove la riusabilità del codice, semplifica la manutenzione e aiuta a strutturare il codice in modo gerarchico. Utilizzando l’ereditarietà in modo oculato, è possibile progettare sistemi software più flessibili ed estendibili.