C# Academy · Lektion

Polymorphismus und dynamischer Dispatch

Verstehen Sie Polymorphismus: Rufen Sie virtuelle Member über eine Basisklassenreferenz auf, verwenden Sie Collections mit Basistypen, vermeiden Sie das Verbergen von Methoden und führen Sie bei Bedarf sichere Casts durch.

Lektion 3 von 38 Schritte

Polymorphismus und dynamischer Dispatch ist eine kostenlose C# Academy-Lektion auf CoddyKit. Dies ist Lektion 3 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.

Überblick über Polymorphie

Ziel: Verwenden Sie einen Basistyp und lassen Sie abgeleitete Typen das Verhalten anpassen.

  • Basisklassenreferenz, abgeleitetes Objekt
  • virtual + override → dynamischer Dispatch
  • Sammlungen mit Basistyp
  • Vermeiden Sie das Verbergen von Methoden mit new

Grundlagen des dynamischen Dispatch

Beim Aufruf einer virtual-Methode wird der Laufzeittyp des Objekts verwendet, nicht der Compilezeittyp der Variablen.

using System;

public class Animal
{
  public virtual string Speak() { return "???"; }
}

public class Cat : Animal
{
  public override string Speak() { return "Meow"; }
}

public class Dog : Animal
{
  public override string Speak() { return "Woof"; }
}

public class Program
{
  public static void Main(string[] args)
  {
    Animal a1 = new Cat(); // base reference
    Animal a2 = new Dog();
    Console.WriteLine(a1.Speak()); // Meow
    Console.WriteLine(a2.Speak()); // Woof
  }
}

Polymorphie in Sammlungen

Speichern Sie verschiedene abgeleitete Typen in einer List<Base> und rufen Sie virtuelle Member einheitlich auf.

using System;
using System.Collections.Generic;

public class Shape
{
  public virtual double Area() { return 0.0; }
}

public class Rectangle : Shape
{
  private readonly int _w, _h;
  public Rectangle(int w, int h) { _w = w; _h = h; }
  public override double Area() { return _w * _h; }
}

public class Circle : Shape
{
  private readonly int _r;
  public Circle(int r) { _r = r; }
  public override double Area() { return 3.14159 * _r * _r; }
}

public class Program
{
  public static void Main(string[] args)
  {
    List<Shape> shapes = new List<Shape>();
    shapes.Add(new Rectangle(3, 4));
    shapes.Add(new Circle(2));

    foreach (Shape s in shapes)
    {
      Console.WriteLine("Area = " + s.Area()); // calls correct override
    }
  }
}

Verbergen oder Überschreiben

Vermeiden Sie das Verbergen von Methoden (new). Verwenden Sie override für echte Polymorphie. Beim Verbergen wird über eine Basisklassenreferenz die Version der Basisklasse aufgerufen.

using System;

public class Printer
{
  public virtual void Print() { Console.WriteLine("[Base]"); }
}

public class LoudPrinter : Printer
{
  public override void Print() { Console.WriteLine("[LOUD]"); }
}

public class HiddenPrinter : Printer
{
  // Hides the base method instead of overriding (BAD fit for polymorphism)
  public new void Print() { Console.WriteLine("[HIDDEN]"); }
}

public class Program
{
  public static void Main(string[] args)
  {
    Printer a = new LoudPrinter();
    Printer b = new HiddenPrinter();

    a.Print(); // [LOUD]  (override works)
    b.Print(); // [Base]  (hiding fails via base reference)
  }
}

Sichere Typumwandlung (as + Prüfung)

Bevorzugen Sie Aufrufe über die Basis- oder virtuelle Methoden. Wenn Sie Member verwenden müssen, die nur in der abgeleiteten Klasse vorhanden sind, wandeln Sie den Typ sicher um (as + Nullprüfung).

using System;

public class Vehicle
{
  public virtual string Info() { return "Vehicle"; }
}

public class Car : Vehicle
{
  public bool HasAirConditioning;
  public override string Info() { return "Car"; }
}

public class Program
{
  public static void Main(string[] args)
  {
    Vehicle v = new Car();
    Console.WriteLine(v.Info()); // polymorphic call

    // Need a Car-only member? Cast carefully using 'as'
    Car c = v as Car;
    if (c != null)
    {
      c.HasAirConditioning = true;
      Console.WriteLine("AC set: " + c.HasAirConditioning);
    }
    else
    {
      Console.WriteLine("Not a Car");
    }
  }
}

Tipps zur Polymorphie

Tipps:

  • Entwerfen Sie zuerst für Aufrufe über Basis- oder virtuelle Methoden.
  • Verwenden Sie override, nicht new, um Verhalten zu ändern.
  • Halten Sie APIs der Basisklasse klein und stabil.
  • Wandeln Sie Typen selten um. Bevorzugen Sie Polymorphie oder Schnittstellen.

Bedeutung des dynamischen Dispatch

Kurze Verständnisfrage: Was bedeutet dynamischer Dispatch in C#?

Zusammenfassung

Zusammenfassung: Polymorphie ermöglicht es, dass ein Aufruf über die Basisklasse mithilfe von virtual/override viele Verhaltensweisen abgeleiteter Klassen erreicht. Verwenden Sie Sammlungen mit Basistyp, vermeiden Sie das Verbergen mit new und wandeln Sie Typen nur bei Bedarf um.

Kostenlos starten

Lerne C# mit einem KI-Tutor — kostenlos

Schreibe und führe echten Code in deinem Browser aus, bekomme sofortige Hilfe von einem 24/7 KI-Tutor und setze dein Lernen im Web oder in der App fort.

Kurse
93
Lektionen
346

Häufig gestellte Fragen

Ist die Lektion „Polymorphismus und dynamischer Dispatch“ kostenlos?

Ja — der vollständige Text von „Polymorphismus und dynamischer Dispatch“ 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 „Polymorphismus und dynamischer Dispatch“?

Verstehen Sie Polymorphismus: Rufen Sie virtuelle Member über eine Basisklassenreferenz auf, verwenden Sie Collections mit Basistypen, vermeiden Sie das Verbergen von Methoden und führen Sie bei Beda… 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 3 von 3.

Wie lange dauert die Lektion „Polymorphismus und dynamischer Dispatch“?

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

  1. virtual/override/sealed und abstrakte Klassen
  2. Interfaces (Einführung) und Implementierung mehrerer Interfaces
  3. Polymorphismus und dynamischer Dispatch
← Zurück zu C# Academy