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.
Aufgabe
EinfachErstelle 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 eineProduct-Klasse im NamespaceInventory. Diese Basisklasse repräsentiert jedes Produkt mit einerName-Eigenschaft (string) und einerPrice-Eigenschaft (decimal). Füge einen Konstruktor hinzu, der beide Werte akzeptiert, sowie eine MethodeGetInfo(), die"{Name}: ${Price}"zurückgibt.ElectronicProduct.cs: Definiere eineElectronicProduct-Klasse im NamespaceInventory, die vonProducterbt. Diese Klasse fügt eineWarrantyMonths-Eigenschaft (int) hinzu. Der Konstruktor soll Name, Preis und Garantiedauer in Monaten akzeptieren – verwendebase, um Name und Preis an den Konstruktor der übergeordneten Klasse zu übergeben. Erstelle eineGetInfo()-Methode, die zunächst mitGetInfo()diebase-Methode der übergeordneten Klasse aufruft und anschließend" (Warranty: {WarrantyMonths} months)"anhängt, um die Ausgabe zu erweitern.Program.cs: Erstelle in deiner Hauptdatei einElectronicProductmithilfe der Eingabewerte und zeige seine vollständigen Informationen an, indem duGetInfo()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
}
}
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