Menu
Coddy logo textTech

Das 'base'-Schlüsselwort

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

Wenn eine abgeleitete Klasse von einer Basisklasse erbt, müssen Sie oft direkt auf die Member der Basisklasse zugreifen. Das Schlüsselwort base stellt diese Verbindung bereit und ermöglicht es Ihnen, den Konstruktor der Basisklasse aufzurufen oder auf deren Methoden und Eigenschaften zuzugreifen.

Die häufigste Verwendung von base ist der Aufruf des Konstruktors der Basisklasse. Beim Erstellen eines abgeleiteten Objekts können Sie Werte an die Basisklasse übergeben:

public class Animal
{
    public string Name { get; set; }
    
    public Animal(string name)
    {
        Name = name;
    }
}

public class Dog : Animal
{
    public string Breed { get; set; }
    
    public Dog(string name, string breed) : base(name)
    {
        Breed = breed;
    }
}

Die : base(name)-Syntax ruft den Animal-Konstruktor auf, bevor der Rumpf des Dog-Konstruktors ausgeführt wird. Dies stellt sicher, dass die Basisklasse zuerst ordnungsgemäß initialisiert wird.

Sie können base auch verwenden, um Methoden der Elternklasse aus der abgeleiteten Klasse heraus aufzurufen:

public class Animal
{
    public void Speak()
    {
        Console.WriteLine("Animal sound");
    }
}

public class Dog : Animal
{
    public void Speak()
    {
        base.Speak();  // Ruft die Speak-Methode von Animal auf
        Console.WriteLine("Woof!");
    }
}

Hier ruft base.Speak() explizit die Version der Methode der Basisklasse auf. Dies ist nützlich, wenn Sie das Verhalten der Basisklasse erweitern möchten, anstatt es vollständig zu ersetzen.

challenge icon

Aufgabe

Einfach

Lassen Sie uns ein Produktinventarsystem erstellen, das zeigt, wie abgeleitete Klassen das Schlüsselwort base verwenden, um ihre Basisklasse ordnungsgemäß zu initialisieren und geerbtes Verhalten zu erweitern.

Sie werden drei Dateien erstellen, um Ihren Code zu organisieren:

  • Product.cs: Definieren Sie eine Klasse Product im Namespace Inventory. Diese Basisklasse repräsentiert jedes Produkt mit einer Eigenschaft Name (string) und einer Eigenschaft Price (decimal). Fügen Sie einen Konstruktor hinzu, der beide Werte akzeptiert, sowie eine Methode GetInfo(), die "{Name}: ${Price}" zurückgibt.
  • ElectronicProduct.cs: Definieren Sie eine Klasse ElectronicProduct im Namespace Inventory, die von Product erbt. Diese Klasse fügt eine Eigenschaft WarrantyMonths (int) hinzu. Der Konstruktor sollte Name, Preis und Garantiemonate akzeptieren - verwenden Sie base, um den Namen und den Preis an den Konstruktor der Basisklasse zu übergeben. Erstellen Sie eine Methode GetInfo(), die zuerst die Methode GetInfo() der Basisklasse mittels base aufruft und dann " (Warranty: {WarrantyMonths} months)" anhängt, um die Ausgabe zu erweitern.
  • Program.cs: Erstellen Sie in Ihrer Hauptdatei ein ElectronicProduct unter Verwendung von Eingabewerten und zeigen Sie dessen vollständige Informationen durch Aufruf von GetInfo() an.

Sie erhalten drei Eingaben:

  • Produktname
  • Preis
  • Garantiemonate

Geben Sie das Ergebnis des Aufrufs von GetInfo() für Ihr elektronisches Produkt aus.

Wenn die Eingaben beispielsweise Laptop, 999.99 und 24 sind, sollte die Ausgabe wie folgt lauten:

Laptop: $999.99 (Warranty: 24 months)

Beachten Sie, wie die abgeleitete Klasse auf der Ausgabe der Basisklasse aufbaut, anstatt die Logik zu duplizieren. Das Schlüsselwort base ermöglicht es Ihnen, das Verhalten der Elternklasse nahtlos wiederzuverwenden und zu erweitern!

Spickzettel

Das Schlüsselwort base ermöglicht einer abgeleiteten Klasse den Zugriff auf Member ihrer Basisklasse.

Verwenden Sie base, um den Konstruktor der Basisklasse aufzurufen:

public class Animal
{
    public string Name { get; set; }
    
    public Animal(string name)
    {
        Name = name;
    }
}

public class Dog : Animal
{
    public string Breed { get; set; }
    
    public Dog(string name, string breed) : base(name)
    {
        Breed = breed;
    }
}

Die Syntax : base(name) ruft den Konstruktor der Basisklasse auf, bevor der Rumpf des Konstruktors der abgeleiteten Klasse ausgeführt wird, was eine ordnungsgemäße Initialisierung gewährleistet.

Verwenden Sie base, um Methoden der Basisklasse aus der abgeleiteten Klasse aufzurufen:

public class Animal
{
    public void Speak()
    {
        Console.WriteLine("Animal sound");
    }
}

public class Dog : Animal
{
    public void Speak()
    {
        base.Speak();  // Ruft Speak von Animal auf
        Console.WriteLine("Woof!");
    }
}

Dies ermöglicht es Ihnen, das Verhalten der Basisklasse zu erweitern, anstatt es vollständig zu ersetzen.

Probier es selbst

using System;
using Inventory;

class Program
{
    public static void Main(string[] args)
    {
        // Eingaben einlesen
        string name = Console.ReadLine();
        decimal price = Convert.ToDecimal(Console.ReadLine());
        int warrantyMonths = Convert.ToInt32(Console.ReadLine());

        // TODO: Erstelle ein ElectronicProduct mit den Eingabewerten
        
        // TODO: Gib das Ergebnis des Aufrufs von GetInfo() für dein ElectronicProduct 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