Menu
Coddy logo textTech

ToString() überschreiben

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.

challenge icon

Aufgabe

Einfach

Lassen Sie uns eine Book-Klasse erstellen, die beim Drucken aussagekräftige String-Repräsentationen liefert, was das Debugging und die Anzeige von Buchinformationen wesentlich intuitiver macht.

Sie werden Ihren Code auf zwei Dateien verteilen:

  • Book.cs: Erstellen Sie eine Book-Klasse im Namespace Library, die ein Buch mit seinen wesentlichen Details darstellt. Ihr Buch sollte Folgendes haben:
    • Drei schreibgeschützte Eigenschaften: Title (string), Author (string) und Year (int)
    • Einen Konstruktor, der Titel, Autor und Jahr in dieser Reihenfolge akzeptiert
    • Eine überschriebene ToString()-Methode, die einen formatierten String zurückgibt: "{Title}" by {Author} ({Year})
    Beachten Sie, dass der Titel in der Ausgabe in doppelte Anführungszeichen gesetzt werden sollte!
  • Program.cs: Erstellen Sie in Ihrer Hauptdatei ein Book-Objekt unter Verwendung von Eingabewerten und geben Sie es direkt aus. Dank Ihrer ToString()-Überschreibung wird die Übergabe des Buchobjekts an Console.WriteLine() automatisch die formatierten Informationen anstelle des Typnamens anzeigen.

Sie erhalten drei Eingaben:

  • Buchtitel (string)
  • Name des Autors (string)
  • Erscheinungsjahr (integer)

Geben Sie das Buchobjekt direkt mit Console.WriteLine() aus.

Wenn die Eingaben beispielsweise The Great Gatsby, F. Scott Fitzgerald und 1925 sind, sollte die Ausgabe wie folgt aussehen:

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

Der Clou dabei ist, dass Sie ToString() nicht explizit aufrufen – wenn Sie ein Objekt an Console.WriteLine() übergeben, wird automatisch die ToString()-Methode des Objekts aufgerufen. Ihre Überschreibung macht diese Ausgabe nützlich, anstatt nur Library.Book anzuzeigen!

Spickzettel

Jede Klasse in C# erbt von object, welches eine ToString()-Methode bereitstellt. Standardmäßig gibt diese den vollqualifizierten Typnamen zurück.

Überschreiben Sie ToString(), um eine aussagekräftige String-Repräsentation 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 ein Objekt ausgeben, wird ToString() automatisch aufgerufen:

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

Das Schlüsselwort override ist erforderlich, wenn eine geerbte Methode von object ersetzt wird.

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
    }
}
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Objektorientierte Programmierung