virtual/override/sealed und abstrakte Klassen
Lernen Sie virtuelle Methoden, Überschreiben, das Versiegeln von Überschreibungen und abstrakte Klassen kennen. Sehen Sie, wie Basisklassenreferenzen Implementierungen abgeleiteter Klassen auflösen.
virtual/override/sealed und abstrakte Klassen ist eine kostenlose C# Academy-Lektion auf CoddyKit. Dies ist Lektion 1 von 3. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des C# Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der C# Academy-Kurs umfasst insgesamt 3 Lektionen.
Grundlagen der Vererbung
Ziel: Verwenden Sie Vererbung, um Verhalten wiederzuverwenden und anzupassen.
- virtual in der Basisklasse
- override in der abgeleiteten Klasse
- sealed override, um weitere Änderungen zu verhindern
- abstract class definiert einen Vertrag und gemeinsamen Code
virtual und override
virtual ermöglicht das Überschreiben. Aufrufe über eine Basisklassenreferenz verwenden die überschreibende Implementierung der abgeleiteten Klasse (dynamischer Dispatch).
using System;
// Base method is virtual so derived classes can customize it
public class Shape
{
public virtual double Area()
{
return 0.0; // default
}
}
public class Rectangle : Shape
{
public int Width { get; private set; }
public int Height { get; private set; }
public Rectangle(int w, int h)
{
Width = w; Height = h;
}
public override double Area()
{
return Width * Height;
}
}
public class Program
{
public static void Main(string[] args)
{
Shape s = new Shape();
Shape r = new Rectangle(3, 4); // base reference
Console.WriteLine("Shape area = " + s.Area());
Console.WriteLine("Rectangle area = " + r.Area()); // calls Rectangle.Area()
}
}
sealed override
Verwenden Sie sealed override, um eine Methode auf einer bestimmten Ebene der Hierarchie zu sperren.
using System;
public class BaseLogger
{
public virtual string Prefix()
{
return "[LOG]";
}
}
public class ConsoleLogger : BaseLogger
{
public sealed override string Prefix()
{
return "[CONSOLE]";
}
}
// Further derived class cannot override Prefix again:
// public class FancyLogger : ConsoleLogger
// {
// public override string Prefix() { return "[FANCY]"; } // compile error
// }
public class Program
{
public static void Main(string[] args)
{
ConsoleLogger log = new ConsoleLogger();
Console.WriteLine(log.Prefix() + " Ready");
}
}
Abstrakte Klassen
Abstrakte Klassen definieren erforderliche Member (abstract) und können außerdem gemeinsamen Code bereitstellen.
using System;
// Abstract class: cannot be instantiated; must implement abstract members
public abstract class Animal
{
public abstract string Speak(); // no body here
public string Info()
{
return "Animal says: " + Speak(); // shared code uses the abstract member
}
}
public class Dog : Animal
{
public override string Speak()
{
return "Woof";
}
}
public class Program
{
public static void Main(string[] args)
{
// Animal a = new Animal(); // compile error: abstract
Animal d = new Dog();
Console.WriteLine(d.Info()); // calls Dog.Speak()
}
}
virtual oder abstract
Wählen Sie:
- virtual: stellt einen Standardimplementierungskörper bereit, den abgeleitete Typen überschreiben können.
- abstract: kein Implementierungskörper; abgeleitete Typen müssen die Implementierung bereitstellen.
- sealed override: verhindert weitere Überschreibungen, sobald das Verhalten festgelegt ist.
Polymorphe Aufrufe
Polymorphie bedeutet: Eine Methode akzeptiert den Basistyp und ruft bei abgeleiteten Instanzen überschriebene Member auf.
using System;
public class Notifier
{
public virtual string Channel() { return "Base"; }
}
public class EmailNotifier : Notifier
{
public override string Channel() { return "Email"; }
}
public class SmsNotifier : Notifier
{
public override string Channel() { return "SMS"; }
}
public class Program
{
// Works with any Notifier (polymorphism)
static void Send(Notifier n, string msg)
{
Console.WriteLine("[" + n.Channel() + "] " + msg);
}
public static void Main(string[] args)
{
Send(new EmailNotifier(), "Hello");
Send(new SmsNotifier(), "Hi");
}
}
Regel für virtual, override und sealed
Zusammenfassung
Zusammenfassung: Kennzeichnen Sie Methoden der Basisklasse mit virtual, überschreiben Sie sie in abgeleiteten Typen und verwenden Sie sealed override, um Verhalten zu sperren. Verwenden Sie abstrakte Klassen, um Implementierungen zu verlangen und dabei gemeinsamen Code bereitzustellen.
Häufig gestellte Fragen
Ist die Lektion „virtual/override/sealed und abstrakte Klassen“ kostenlos?
Ja — der vollständige Text von „virtual/override/sealed und abstrakte Klassen“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des C# Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der C# Academy-Kurs umfasst insgesamt 3 Lektionen.
Was lerne ich in „virtual/override/sealed und abstrakte Klassen“?
Lernen Sie virtuelle Methoden, Überschreiben, das Versiegeln von Überschreibungen und abstrakte Klassen kennen. Sehen Sie, wie Basisklassenreferenzen Implementierungen abgeleiteter Klassen auflösen. Du übst C# Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um C# Academy zu starten?
Keine Vorkenntnisse erforderlich. C# Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 1 von 3.
Wie lange dauert die Lektion „virtual/override/sealed und abstrakte Klassen“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser C# Academy-Lektion Code schreiben und ausführen?
Ja. Jede C# Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- virtual/override/sealed und abstrakte Klassen
- Interfaces (Einführung) und Implementierung mehrerer Interfaces
- Polymorphismus und dynamischer Dispatch