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

Erstelle ein Produktinventarsystem, das veranschaulicht, wie abgeleitete Klassen das Schlüsselwort base verwenden, um ihre übergeordnete Klasse ordnungsgemäß zu initialisieren und geerbtes Verhalten zu erweitern.

Du erstellst drei Dateien, um deinen Code zu organisieren:

  • Product.cs: Definiere eine Product-Klasse im Namespace Inventory. Diese Basisklasse repräsentiert jedes Produkt mit einer Name-Eigenschaft (string) und einer Price-Eigenschaft (decimal). Füge einen Konstruktor hinzu, der beide Werte akzeptiert, sowie eine Methode GetInfo(), die "{Name}: ${Price}" zurückgibt.
  • ElectronicProduct.cs: Definiere eine ElectronicProduct-Klasse im Namespace Inventory, die von Product erbt. Diese Klasse fügt eine WarrantyMonths-Eigenschaft (int) hinzu. Der Konstruktor soll Name, Preis und Garantiedauer in Monaten akzeptieren – verwende base, um Name und Preis an den Konstruktor der übergeordneten Klasse zu übergeben. Erstelle eine GetInfo()-Methode, die zunächst mit GetInfo() die base-Methode der übergeordneten Klasse aufruft und anschließend " (Warranty: {WarrantyMonths} months)" anhängt, um die Ausgabe zu erweitern.
  • Program.cs: Erstelle in deiner Hauptdatei ein ElectronicProduct mithilfe der Eingabewerte und zeige seine vollständigen Informationen an, indem du GetInfo() aufrufst.

Du erhältst drei Eingaben:

  • Produktname
  • Preis
  • Garantiedauer in Monaten

Gib das Ergebnis des Aufrufs von GetInfo() für dein elektronisches Produkt aus.

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

Laptop: $999.99 (Warranty: 24 months)

Beachte, wie die abgeleitete Klasse auf der Ausgabe der Basisklasse aufbaut, anstatt die Logik zu duplizieren. Mit dem Schlüsselwort base kannst du das Verhalten der übergeordneten Klasse nahtlos wiederverwenden und erweitern!

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

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