ToString()-Überschreibung
Teil des Abschnitts Objektorientierte Programmierung der C#-Journey von Coddy. Lektion 38 von 70.
Jede Klasse in C# erbt von object, welche eine ToString()-Methode bereitstellt. Standardmäßig gibt sie den vollqualifizierten Typnamen zurück – nicht besonders nützlich, wenn man die tatsächlichen Daten eines Objekts sehen möchte.
Sie können ToString() überschreiben, um eine aussagekräftige String-Repräsentation Ihres Objekts zurückzugeben:
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)";
}
}Wenn Sie nun ein Person-Objekt ausgeben oder verketten, erhalten Sie eine lesbare Ausgabe:
Person p = new Person("Alice", 30);
Console.WriteLine(p); // Alice (30 Jahre alt)Ohne das Überschreiben würde dies etwas wie MyNamespace.Person ausgeben. Das Schlüsselwort override ist erforderlich, da Sie die geerbte Methode von object ersetzen. Dies ist besonders wertvoll für das Debugging und Logging, wenn Sie einen schnellen Einblick in den Zustand eines Objekts benötigen.
Aufgabe
EinfachErstellen wir eine Book-Klasse, die beim Ausgeben aussagekräftige Zeichenfolgendarstellungen liefert und dadurch das Debuggen sowie die Anzeige von Buchinformationen viel intuitiver macht.
Du organisierst deinen Code auf zwei Dateien:
Book.cs: Erstelle eineBook-Klasse imLibrary-Namespace, die ein Buch mit seinen wesentlichen Details darstellt. Dein Buch sollte Folgendes haben:- Drei schreibgeschützte Eigenschaften:
Title(string),Author(string) undYear(int) - Einen Konstruktor, der Titel, Autor und Jahr in dieser Reihenfolge entgegennimmt
- Eine überschriebene
ToString()-Methode, die einen formatierten String zurückgibt:"{Title}" by {Author} ({Year})
- Drei schreibgeschützte Eigenschaften:
Program.cs: Erstelle in deiner Hauptdatei einBook-Objekt anhand der Eingabewerte und gib es direkt aus. Dank deinerToString()-Überschreibung wird durch die Übergabe des Buchobjekts anConsole.WriteLine()automatisch die formatierte Information anstelle des Typnamens angezeigt.
Du erhältst drei Eingaben:
- Buchtitel (string)
- Name des Autors (string)
- Veröffentlichungsjahr (integer)
Gib das Buchobjekt direkt mit Console.WriteLine() aus.
Wenn die Eingaben beispielsweise The Great Gatsby, F. Scott Fitzgerald und 1925 lauten, sollte die Ausgabe folgendermaßen aussehen:
"The Great Gatsby" by F. Scott Fitzgerald (1925)Das Magische daran ist, dass du ToString() nicht explizit aufrufst – wenn du ein Objekt an Console.WriteLine() übergibst, ruft es automatisch die ToString()-Methode des Objekts auf. Deine Überschreibung macht diese Ausgabe nützlich, anstatt einfach nur Library.Book anzuzeigen!
Probier es selbst
using System;
using Library;
class Program
{
public static void Main(string[] args)
{
// Eingabe lesen
string title = Console.ReadLine();
string author = Console.ReadLine();
int year = Convert.ToInt32(Console.ReadLine());
// TODO: Erstelle ein Book-Objekt unter Verwendung der Eingabewerte
// TODO: Gib das Book-Objekt direkt mit Console.WriteLine() aus
}
}
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Objektorientierte Programmierung
1Grundlagen der OOP
Externe DateienNamespaces & DirektivenEinführung in Klassen & ObjekteDas 'this'-SchlüsselwortMethoden und ParameterFelder vs. EigenschaftenKonstruktorenObjektinitialisiererWiederholung – Einfacher Taschenrechner4Vererbung
Grundlegende Vererbungs-(:)-SyntaxDas „base“-Schlüsselwort„virtual“- und „override“-SchlüsselwörterVersiegelte KlassenDie „object“-BasisklasseWiederholung – Mitarbeiterhierarchie7Erweiterte Funktionen
Überladen von OperatorenIndexer (this[])ToString()-ÜberschreibungErweiterungsmethodenRückblick – Benutzerdefinierte Liste10Entwurfsmuster Teil 1
Einführung in EntwurfsmusterThread-sicheres SingletonFactory-MusterObserver-Muster (Events)Strategy-Muster13Abschließende Herausforderungen
E-Learning-PlattformKomponente für SpielfigurenFahrzeugvermietungsdienst2Eigenschaften & statische Member
Automatisch implementierte EigenschaftenNur lesbare/schreibbare EigenschaftenStatische Felder & MethodenStatische KlassenMember mit Ausdruckskörpern5Polymorphie & Interfaces
Compile- vs. Laufzeit-PolymorphieInterface vs. abstrakte KlasseMehrere InterfacesExplizite InterfacesUpcasting & DowncastingWiederholung – Formenrechner3Klassenarchitektur
Instanz- vs. statische DatenSchlüsselwörter 'readonly' & 'const'Backing FieldsRückblick – Bankkontenverwaltung6Kapselung
ZugriffsmodifikatorenEigenschaften zur KapselungImplementierung der DatenkapselungMuster für UnveränderlichkeitRückblick – SchülerdatenÜbe selbstständig: Online-C#-Compiler