Menu
Coddy logo textTech

Nadpisywanie ToString()

Część sekcji Programowanie obiektowe ścieżki C# w Coddy. Lekcja 38 z 70.

Każda klasa w C# dziedziczy po object, który udostępnia metodę ToString(). Domyślnie zwraca ona w pełni kwalifikowaną nazwę typu — niezbyt przydatną, gdy chcesz zobaczyć rzeczywiste dane obiektu.

Możesz przesłonić ToString(), aby zwracała znaczącą reprezentację tekstową Twojego obiektu:

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)";
    }
}

Teraz, gdy wyświetlisz obiekt Person lub połączysz go z innym tekstem, otrzymasz czytelny wynik:

Person p = new Person("Alice", 30);
Console.WriteLine(p);  // Alice (30 lat)

Bez przesłonięcia wydrukowałoby to coś w rodzaju MyNamespace.Person. Słowo kluczowe override jest wymagane, ponieważ zastępujesz odziedziczoną metodę z object. Jest to szczególnie przydatne podczas debugowania i rejestrowania, gdy potrzebujesz szybko sprawdzić stan obiektu.

challenge icon

Wyzwanie

Łatwy

Stwórzmy klasę Book, która podczas wyświetlania dostarcza czytelne reprezentacje tekstowe, dzięki czemu debugowanie i wyświetlanie informacji o książkach staje się znacznie bardziej intuicyjne.

Rozmieścisz swój kod w dwóch plikach:

  • Book.cs: Utwórz klasę Book w przestrzeni nazw Library, która reprezentuje książkę wraz z jej podstawowymi informacjami. Twoja książka powinna mieć:
    • Trzy właściwości tylko do odczytu: Title (string), Author (string) i Year (int)
    • Konstruktor, który przyjmuje kolejno tytuł, autora i rok
    • Przesłoniętą metodę ToString(), która zwraca sformatowany ciąg znaków: "{Title}" by {Author} ({Year})
    Zwróć uwagę, że tytuł w wyniku powinien być ujęty w cudzysłowy!
  • Program.cs: W głównym pliku utwórz obiekt Book na podstawie wprowadzonych wartości i wyświetl go bezpośrednio. Dzięki przesłoniętej metodzie ToString() przekazanie obiektu książki do Console.WriteLine() automatycznie wyświetli sformatowane informacje zamiast nazwy typu.

Otrzymasz trzy dane wejściowe:

  • Tytuł książki (string)
  • Imię i nazwisko autora (string)
  • Rok publikacji (liczba całkowita)

Wyświetl obiekt książki bezpośrednio za pomocą Console.WriteLine().

Na przykład, jeśli dane wejściowe to The Great Gatsby, F. Scott Fitzgerald i 1925, wynikiem powinno być:

"The Great Gatsby" by F. Scott Fitzgerald (1925)

Magia polega na tym, że nie wywołujesz jawnie ToString() — gdy przekazujesz obiekt do Console.WriteLine(), metoda automatycznie wywołuje metodę ToString() tego obiektu. Dzięki przesłonięciu ta metoda zwraca użyteczny wynik zamiast wyświetlać jedynie Library.Book!

Spróbuj swoich sił

using System;
using Library;

class Program
{
    public static void Main(string[] args)
    {
        // Odczytaj dane wejściowe
        string title = Console.ReadLine();
        string author = Console.ReadLine();
        int year = Convert.ToInt32(Console.ReadLine());

        // TODO: Utwórz obiekt Book, używając wartości wejściowych

        // TODO: Wypisz obiekt Book bezpośrednio za pomocą Console.WriteLine()
    }
}
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Programowanie obiektowe

Poćwicz samodzielnie: Kompilator C# online