Menu
Coddy logo textTech

Sintassi di base dell'ereditarietà (:)

Fa parte della sezione Programmazione orientata agli oggetti del percorso C# di Coddy. Lezione 19 di 70.

L’ereditarietà consente a una classe di acquisire le proprietà e i metodi di un’altra classe. Invece di riscrivere lo stesso codice, crei una classe base (genitore) con funzionalità condivise, poi crei classi derivate (figlie) che ereditano da essa.

In C#, si usa il simbolo dei due punti : per indicare l'ereditarietà:

public class Animal
{
    public string Name { get; set; }
    
    public void Eat()
    {
        Console.WriteLine($"{Name} is eating.");
    }
}

public class Dog : Animal
{
    public void Bark()
    {
        Console.WriteLine($"{Name} says Woof!");
    }
}

La classe Dog eredita tutto da Animal. Ha accesso alla proprietà Name e al metodo Eat() senza doverli dichiarare di nuovo, e in più aggiunge il proprio metodo Bark():

Dog myDog = new Dog();
myDog.Name = "Buddy";
myDog.Eat();   // Output: Buddy is eating.
myDog.Bark();  // Output: Buddy says Woof!

C# supporta solo l'ereditarietà singola, il che significa che una classe può ereditare da una sola classe base. Tuttavia, puoi creare catene di ereditarietà in cui una classe derivata diventa la classe base di un'altra classe. Questo crea una gerarchia che modella le relazioni del mondo reale e mantiene il tuo codice organizzato e riutilizzabile.

challenge icon

Sfida

Facile

Creiamo una gerarchia di veicoli che dimostri come l'ereditarietà consenta alle classi derivate di condividere le funzionalità di una classe base, aggiungendo al contempo comportamenti unici.

Creerai tre file per organizzare il codice:

  • Vehicle.cs: Definisci una classe Vehicle nello spazio dei nomi Transport. Questa sarà la classe base condivisa da tutti i veicoli. Dovrebbe avere una proprietà Brand (string) e una proprietà Year (int), oltre a un metodo StartEngine() che stampa "{Brand} engine started."
  • Car.cs: Definisci una classe Car nello spazio dei nomi Transport che eredita da Vehicle. L'auto aggiunge una propria proprietà NumberOfDoors (int) e un metodo Honk() che stampa "{Brand} goes Beep Beep!"
  • Program.cs: Nel file principale, crea un'istanza di Car usando i valori di input. Imposta le sue proprietà (incluse quelle ereditate), quindi dimostra che l'auto può usare sia i propri metodi sia quelli ereditati da Vehicle.

Riceverai tre input:

  • Nome della marca
  • Anno
  • Numero di porte

Stampa le informazioni sull'auto e dimostrane le funzionalità in questo formato:

Car: {Brand} ({Year})
Doors: {NumberOfDoors}
{StartEngine output}
{Honk output}

Ad esempio, se gli input sono Toyota, 2022 e 4, l'output dovrebbe essere:

Car: Toyota (2022)
Doors: 4
Toyota engine started.
Toyota goes Beep Beep!

Nota come la tua Car possa accedere alla proprietà Brand e al metodo StartEngine(), anche se sono definiti in Vehicle. Questo è il potere dell'ereditarietà: la classe derivata ottiene automaticamente tutto dalla sua classe base!

Provalo tu

using System;
using Transport;

class Program
{
    public static void Main(string[] args)
    {
        // Leggi l'input
        string brand = Console.ReadLine();
        int year = Convert.ToInt32(Console.ReadLine());
        int doors = Convert.ToInt32(Console.ReadLine());
        
        // TODO: Crea un'istanza di Car
        
        // TODO: Imposta le proprietà dell'auto (Brand, Year, NumberOfDoors)
        
        // TODO: Stampa le informazioni dell'auto nel formato richiesto:
        // Auto: {Brand} ({Year})
        // Porte: {NumberOfDoors}
        // Poi chiama StartEngine() e Honk()
    }
}
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Programmazione orientata agli oggetti

Esercitati da solo: Compilatore C# online