Override di ToString()
Fa parte della sezione Programmazione orientata agli oggetti del percorso C# di Coddy. Lezione 38 di 70.
Ogni classe in C# eredita da object, che fornisce un metodo ToString(). Per impostazione predefinita, restituisce il nome completo del tipo, non molto utile quando vuoi vedere i dati effettivi di un oggetto.
Puoi eseguire l'override di ToString() per restituire una rappresentazione testuale significativa del tuo oggetto:
public class Person
{
public string Name { get; }
public int Age { get; }
public Person(string name, int age)
{
Name = name;
Age = age;
}
public override string ToString()
{
return $"{Name} ({Age} years old)";
}
}Ora, quando stampi o concateni un oggetto Person, ottieni un output leggibile:
Person p = new Person("Alice", 30);
Console.WriteLine(p); // Alice (30 anni)Senza l'override, verrebbe stampato qualcosa come MyNamespace.Person. La parola chiave override è necessaria perché stai sostituendo il metodo ereditato da object. Questo è particolarmente utile per il debugging e la registrazione, quando hai bisogno di capire rapidamente lo stato di un oggetto.
Sfida
FacileCostruiamo una classe Book che fornisca rappresentazioni testuali significative quando viene stampata, rendendo il debug e la visualizzazione delle informazioni sui libri molto più intuitivi.
Organizzerai il codice in due file:
Book.cs: crea una classeBooknello spazio dei nomiLibraryche rappresenti un libro con i suoi dettagli essenziali. La classe dovrà avere:- Tre proprietà di sola lettura:
Title(string),Author(string) eYear(int) - Un costruttore che accetti titolo, autore e anno, in quest'ordine
- Un metodo
ToString()sottoposto a override che restituisca una stringa formattata:"{Title}" by {Author} ({Year})
- Tre proprietà di sola lettura:
Program.cs: nel file principale, crea un oggettoBookusando i valori di input e stampalo direttamente. Grazie all'override diToString(), passando l'oggetto libro aConsole.WriteLine()verranno visualizzate automaticamente le informazioni formattate invece del nome del tipo.
Riceverai tre input:
- Titolo del libro (string)
- Nome dell'autore (string)
- Anno di pubblicazione (intero)
Stampa direttamente l'oggetto libro usando Console.WriteLine().
Ad esempio, se gli input sono The Great Gatsby, F. Scott Fitzgerald e 1925, l'output dovrebbe essere:
"The Great Gatsby" by F. Scott Fitzgerald (1925)Il bello è che non devi chiamare esplicitamente ToString(): quando passi un oggetto a Console.WriteLine(), viene chiamato automaticamente il metodo ToString() dell'oggetto. Il tuo override rende questo output utile, invece di mostrare soltanto Library.Book!
Provalo tu
using System;
using Library;
class Program
{
public static void Main(string[] args)
{
// Leggi l'input
string title = Console.ReadLine();
string author = Console.ReadLine();
int year = Convert.ToInt32(Console.ReadLine());
// TODO: Crea un oggetto Book usando i valori di input
// TODO: Stampa direttamente l'oggetto Book usando Console.WriteLine()
}
}
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