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.
Sfida
FacileCostruiamo 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 classeProductnello spazio dei nomiInventory. 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 metodoGetInfo()che restituisca"{Name}: ${Price}".ElectronicProduct.cs: Definisci una classeElectronicProductnello spazio dei nomiInventoryche eredita daProduct. Questa classe aggiunge una proprietàWarrantyMonths(int). Il costruttore dovrebbe accettare il nome, il prezzo e i mesi di garanzia: usabaseper passare il nome e il prezzo al costruttore della classe genitore. Crea un metodoGetInfo()che prima chiami il metodoGetInfo()della classe genitore usandobase, poi aggiunga" (Warranty: {WarrantyMonths} months)"per estendere l'output.Program.cs: Nel file principale, crea unElectronicProductusando i valori di input e visualizzane tutte le informazioni chiamandoGetInfo().
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
}
}
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
1Fondamenti della programmazione orientata agli oggetti
File esterniNamespace e direttiveIntroduzione a classi e oggettiLa parola chiave "this"Metodi e parametriCampi e proprietàCostruttoriInizializzatori di oggettiRiepilogo - Calcolatrice semplice4Ereditarietà
Sintassi di base dell'ereditarietà (:)La parola chiave 'base'Parole chiave virtual e overrideClassi sealedLa classe base 'object'Riepilogo - Gerarchia dei dipendenti7Funzionalità avanzate
Sovraccarico degli operatoriIndicizzatori (this[])Override di ToString()Metodi di estensioneRiepilogo - Lista personalizzata10Pattern di progettazione Parte 1
Introduzione ai pattern di progettazioneSingleton thread-safePattern FactoryPattern Observer (eventi)Pattern Strategy2Proprietà e membri statici
Proprietà implementate automaticamenteProprietà di sola lettura e di sola scritturaCampi e metodi staticiClassi staticheMembri con corpo di espressione5Polimorfismo e interfacce
Polimorfismo a compile time e runtimeInterfaccia o classe astrattaInterfacce multipleInterfacce espliciteUpcasting e downcastingRipasso: calcolatore di forme8Concetti avanzati di programmazione a oggetti
Composizione invece dell'ereditarietàTipi generici (classi e metodi)Delegati ed eventiAttributi e reflectionIDisposable e istruzione usingNozioni di base sull'iniezione delle dipendenze11Pattern di progettazione, parte 2
Pattern del ComandoPattern dell’AdattatorePattern del DecoratorePattern Template MethodPattern dello StatoPattern Composito3Architettura delle classi
Dati di istanza vs staticiParole chiave 'readonly' e 'const'Campi di supportoRiepilogo - Gestore di conti bancari6Incapsulamento
Modificatori di accessoProprietà per l'incapsulamentoImplementazione dell'occultamento dei datiModelli di immutabilitàRiepilogo - Registri degli studentiEsercitati da solo: Compilatore C# online