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.
Wyzwanie
ŁatwyStwó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ęBookw przestrzeni nazwLibrary, 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) iYear(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})
- Trzy właściwości tylko do odczytu:
Program.cs: W głównym pliku utwórz obiektBookna podstawie wprowadzonych wartości i wyświetl go bezpośrednio. Dzięki przesłoniętej metodzieToString()przekazanie obiektu książki doConsole.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()
}
}
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Programowanie obiektowe
1Podstawy programowania obiektowego
Pliki zewnętrznePrzestrzenie nazw i dyrektywyWprowadzenie do klas i obiektówSłowo kluczowe „this”Metody i parametryPola a właściwościKonstruktoryInicjalizatory obiektówPodsumowanie — prosty kalkulator4Dziedziczenie
Podstawowa składnia dziedziczenia (:)Słowo kluczowe 'base'Słowa kluczowe virtual i overrideKlasy sealedBazowa klasa 'object'Powtórzenie – hierarchia pracowników7Zaawansowane funkcje
Przeciążanie operatorówIndeksery (this[])Nadpisywanie ToString()Metody rozszerzającePodsumowanie – własna lista2Właściwości i składowe statyczne
Właściwości automatyczneWłaściwości tylko do odczytu i zapisuPola i metody statyczneKlasy statyczneSkładowe z ciałem wyrażeniowym5Polimorfizm i interfejsy
Polimorfizm czasu kompilacji a czasu wykonaniaInterfejs a klasa abstrakcyjnaWiele interfejsówJawne implementowanie interfejsówRzutowanie w górę i w dółPowtórka — kalkulator kształtów8Zaawansowane koncepcje OOP
Kompozycja zamiast dziedziczeniaTypy generyczne (klasy i metody)Delegaty i zdarzeniaAtrybuty i refleksjaIDisposable i instrukcja usingPodstawy wstrzykiwania zależności11Wzorce projektowe, część 2
Wzorzec poleceniaWzorzec adapteraWzorzec dekoratoraWzorzec metody szablonowejWzorzec stanuWzorzec kompozytu3Architektura klas
Dane instancji a dane statyczneSłowa kluczowe 'readonly' i 'const'Pola zapasowePowtórzenie — menedżer kont bankowych6Hermetyzacja
Modyfikatory dostępuWłaściwości w hermetyzacjiImplementacja ukrywania danychWzorce niezmiennościPowtórka — dane studentów9Argumenty zmiennej liczby
Słowo kluczowe „params”Parametry opcjonalneArgumenty nazwanePrzeciążanie metodPoćwicz samodzielnie: Kompilator C# online