Menu
Coddy logo textTech

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.

challenge icon

Sfida

Facile

Costruiamo 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 classe Book nello spazio dei nomi Library che rappresenti un libro con i suoi dettagli essenziali. La classe dovrà avere:
    • Tre proprietà di sola lettura: Title (string), Author (string) e Year (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})
    Nota che il titolo nell'output deve essere racchiuso tra virgolette doppie!
  • Program.cs: nel file principale, crea un oggetto Book usando i valori di input e stampalo direttamente. Grazie all'override di ToString(), passando l'oggetto libro a Console.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()
    }
}
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