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.
Sfida
FacileCreiamo 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 classeVehiclenello spazio dei nomiTransport. Questa sarà la classe base condivisa da tutti i veicoli. Dovrebbe avere una proprietàBrand(string) e una proprietàYear(int), oltre a un metodoStartEngine()che stampa"{Brand} engine started."Car.cs: Definisci una classeCarnello spazio dei nomiTransportche eredita daVehicle. L'auto aggiunge una propria proprietàNumberOfDoors(int) e un metodoHonk()che stampa"{Brand} goes Beep Beep!"Program.cs: Nel file principale, crea un'istanza diCarusando 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 daVehicle.
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()
}
}
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