Menu
Coddy logo textTech

La parola chiave 'base'

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

Quando una classe derivata eredita da una classe base, spesso è necessario accedere direttamente ai membri della classe genitore. La parola chiave base fornisce questo collegamento, permettendoti di chiamare il costruttore della classe base o di accedere ai suoi metodi e alle sue proprietà.

L'uso più comune di base è chiamare il costruttore della classe genitore. Quando crei un oggetto derivato, puoi passare i valori alla classe base:

public class Animal
{
    public string Name { get; set; }
    
    public Animal(string name)
    {
        Name = name;
    }
}

public class Dog : Animal
{
    public string Breed { get; set; }
    
    public Dog(string name, string breed) : base(name)
    {
        Breed = breed;
    }
}

La sintassi : base(name) chiama il costruttore di Animal prima che venga eseguito il corpo del costruttore di Dog. Questo garantisce che la classe base venga inizializzata correttamente per prima.

Puoi anche usare base per chiamare i metodi della classe genitore dall'interno della classe derivata:

public class Animal
{
    public void Speak()
    {
        Console.WriteLine("Animal sound");
    }
}

public class Dog : Animal
{
    public void Speak()
    {
        base.Speak();  // Chiama Speak di Animal
        Console.WriteLine("Woof!");
    }
}

Qui, base.Speak() richiama esplicitamente la versione del metodo della classe padre. Questo è utile quando vuoi estendere il comportamento della classe padre invece di sostituirlo completamente.

challenge icon

Sfida

Facile

Costruiamo un sistema di inventario dei prodotti che mostri come le classi derivate usano la parola chiave base per inizializzare correttamente la classe genitore ed estendere il comportamento ereditato.

Creerai tre file per organizzare il codice:

  • Product.cs: Definisci una classe Product nello spazio dei nomi Inventory. Questa classe base rappresenta qualsiasi prodotto con una proprietà Name (stringa) e una proprietà Price (decimal). Includi un costruttore che accetti entrambi i valori e un metodo GetInfo() che restituisca "{Name}: ${Price}".
  • ElectronicProduct.cs: Definisci una classe ElectronicProduct nello spazio dei nomi Inventory che eredita da Product. Questa classe aggiunge una proprietà WarrantyMonths (int). Il costruttore dovrebbe accettare il nome, il prezzo e i mesi di garanzia: usa base per passare il nome e il prezzo al costruttore della classe genitore. Crea un metodo GetInfo() che prima chiami il metodo GetInfo() della classe genitore usando base, poi aggiunga " (Warranty: {WarrantyMonths} months)" per estendere l'output.
  • Program.cs: Nel file principale, crea un ElectronicProduct usando i valori di input e visualizzane tutte le informazioni chiamando GetInfo().

Riceverai tre input:

  • Nome del prodotto
  • Prezzo
  • Mesi di garanzia

Stampa il risultato della chiamata a GetInfo() sul tuo prodotto elettronico.

Ad esempio, se gli input sono Laptop, 999.99 e 24, l'output dovrebbe essere:

Laptop: $999.99 (Warranty: 24 months)

Nota come la classe derivata si basi sull'output della classe base invece di duplicarne la logica. La parola chiave base ti permette di riutilizzare ed estendere il comportamento della classe genitore senza difficoltà!

Provalo tu

using System;
using Inventory;

class Program
{
    public static void Main(string[] args)
    {
        // Leggi i dati di input
        string name = Console.ReadLine();
        decimal price = Convert.ToDecimal(Console.ReadLine());
        int warrantyMonths = Convert.ToInt32(Console.ReadLine());

        // TODO: Crea un ElectronicProduct con i valori di input
        
        // TODO: Stampa il risultato della chiamata a GetInfo() sul tuo prodotto elettronico
        
    }
}
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