Menu
Coddy logo textTech

Die „object“-Basisklasse

Teil des Abschnitts Objektorientierte Programmierung der C#-Journey von Coddy. Lektion 23 von 70.

In C# erbt jede Klasse, die Sie erstellen, automatisch von einer speziellen Klasse namens object. Selbst wenn Sie nicht explizit eine Basisklasse angeben, hat Ihre Klasse dennoch object als ihren obersten Vorfahren. Das bedeutet, dass jeder Typ in C# über einen gemeinsamen Satz von Methoden verfügt.

Die object-Klasse stellt mehrere virtuelle Methoden bereit, die Sie in Ihren eigenen Klassen überschreiben können:

public class Person
{
    public string Name { get; set; }
    
    // Überschreibung von object
    public override string ToString()
    {
        return $"Person: {Name}";
    }
    
    public override bool Equals(object obj)
    {
        if (obj is Person other)
            return Name == other.Name;
        return false;
    }
    
    public override int GetHashCode()
    {
        return Name?.GetHashCode() ?? 0;
    }
}

Die drei am häufigsten überschriebenen Methoden sind ToString() für die String-Repräsentation, Equals() zum Vergleichen von Objekten und GetHashCode() für Hash-basierte Sammlungen. Standardmäßig gibt ToString() den Typnamen zurück, und Equals() prüft auf Referenzgleichheit.

Da alles von object erbt, können Sie jeden Typ in einer object-Variablen speichern:

object item1 = new Person { Name = "Alice" };
object item2 = 42;
object item3 = "Hello";

Console.WriteLine(item1.ToString());  // Person: Alice

Diese universelle Basisklasse ermöglicht Funktionen wie Sammlungen, die gemischte Typen enthalten, und deshalb hat jedes Objekt in C# Zugriff auf Methoden wie ToString() und GetType().

challenge icon

Aufgabe

Einfach

Erstellen wir ein Buchvergleichssystem, das zeigt, wie das Überschreiben von Methoden der Basisklasse object deinen benutzerdefinierten Typen ein sinnvolles Verhalten für die Zeichenfolgendarstellung und die Gleichheitsprüfung verleiht.

Du erstellst zwei Dateien, um deinen Code zu organisieren:

  • Book.cs: Definiere eine Book-Klasse im Library-Namespace. Dein Buch sollte die Eigenschaften Title (string) und Author (string) sowie einen Konstruktor besitzen, der beide Werte festlegt. Überschreibe die drei wichtigen von object geerbten Methoden:
    • ToString() sollte "{Title} by {Author}" zurückgeben
    • Equals(object obj) sollte true zurückgeben, wenn das andere Objekt ein Book mit demselben Title und Author ist
    • GetHashCode() sollte die Hashcodes beider Eigenschaften kombinieren
  • Program.cs: Erstelle in deiner Hauptdatei mithilfe von Eingabewerten zwei Bücher. Gib jedes Buch mit ToString() aus, prüfe anschließend, ob sie gleich sind, und gib das Ergebnis aus. Zeige schließlich, dass du ein Book in einer object-Variablen speichern und beim Aufruf von ToString() weiterhin eine sinnvolle Ausgabe erhalten kannst.

Du erhältst vier Eingaben:

  • Titel des ersten Buchs
  • Autor des ersten Buchs
  • Titel des zweiten Buchs
  • Autor des zweiten Buchs

Gib die Ausgabe in diesem Format aus:

Book 1: {ToString result}
Book 2: {ToString result}
Are they equal? {True/False}
Stored as object: {ToString result of first book stored in object variable}

Wenn die Eingaben beispielsweise 1984, George Orwell, 1984 und George Orwell lauten, sollte die Ausgabe folgendermaßen aussehen:

Book 1: 1984 by George Orwell
Book 2: 1984 by George Orwell
Are they equal? True
Stored as object: 1984 by George Orwell

Wenn die Eingaben 1984, George Orwell, Brave New World und Aldous Huxley lauten, sollte die Ausgabe folgendermaßen aussehen:

Book 1: 1984 by George Orwell
Book 2: Brave New World by Aldous Huxley
Are they equal? False
Stored as object: 1984 by George Orwell

Beachte, wie deine überschriebenen Methoden Book-Objekten ein sinnvolles Verhalten verleihen – sie werden übersichtlich als Zeichenfolgen dargestellt und können anhand ihres Inhalts statt nur anhand ihrer Speicherreferenzen verglichen werden!

Probier es selbst

using System;
using Library;

class Program
{
    public static void Main(string[] args)
    {
        // Eingabe für zwei Bücher lesen
        string title1 = Console.ReadLine();
        string author1 = Console.ReadLine();
        string title2 = Console.ReadLine();
        string author2 = Console.ReadLine();

        // TODO: Zwei Book-Objekte unter Verwendung der Eingabewerte erstellen

        // TODO: Book 1 mittels ToString() ausgeben
        // Format: "Book 1: {ToString result}"

        // TODO: Book 2 mittels ToString() ausgeben
        // Format: "Book 2: {ToString result}"

        // TODO: Prüfen, ob die Bücher gleich sind, und das Ergebnis ausgeben
        // Format: "Are they equal? {True/False}"

        // TODO: Das erste Buch in einer object-Variable speichern und ausgeben
        // Format: "Stored as object: {ToString result}"
    }
}
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

Übe selbstständig: Online-C#-Compiler