Search
Close this search box.
Ein Computerbildschirm zeigt einen C#-Code mit verschiedenen Klassen und Methoden.

C# Polymorphie - Grundlagen und Anwendungsmöglichkeiten

In der objektorientierten Programmierung (OOP) spielt die Polymorphie eine wichtige Rolle, um die Flexibilität und Wiederverwendbarkeit von Code zu erhöhen. Auch in C# gibt es zahlreiche Anwendungsmöglichkeiten für Polymorphie. In diesem Artikel werden wir uns genauer mit dem Thema C# Polymorphie befassen, die Grundlagen erklären und einige Anwendungsmöglichkeiten aufzeigen.

Grundlagen der C# Polymorphie: Polymorphie bedeutet, dass ein Objekt eines Typs wie ein Objekt eines anderen Typs behandelt werden kann. In C# kann Polymorphie durch zwei Mechanismen erreicht werden: Vererbung und Schnittstellen (Interfaces).

Vererbungspolymorphie: Die Vererbungspolymorphie tritt auf, wenn eine abgeleitete Klasse eine Methode oder Eigenschaft der Basis-Klasse überschreibt. Dies wird auch als „Methode überschreiben“ bezeichnet. Wenn ein Objekt einer abgeleiteten Klasse erstellt wird, kann es als Objekt der Basis-Klasse behandelt werden. Wenn eine Methode aufgerufen wird, sucht das Programm zuerst in der abgeleiteten Klasse nach der Methode. Wenn sie nicht vorhanden ist, wird die Methode in der Basis-Klasse gesucht.

Hier ist ein Beispiel-Code zur Vererbungspolymorphie:

				
					public class Shape
{
    public virtual void Draw()
    {
        Console.WriteLine("Zeichnet eine Form.");
    }
}

public class Rectangle : Shape
{
    public override void Draw()
    {
        Console.WriteLine("Zeichnet ein Rechteck.");
    }
}

public class Circle : Shape
{
    public override void Draw()
    {
        Console.WriteLine("Zeichnet einen Kreis.");
    }
}

public class Program
{
    static void Main(string[] args)
    {
        Shape shape1 = new Rectangle();
        Shape shape2 = new Circle();

        shape1.Draw(); // Ausgabe: "Zeichnet ein Rechteck."
        shape2.Draw(); // Ausgabe: "Zeichnet einen Kreis."
    }
}

				
			

In diesem Beispiel haben wir eine Basis-Klasse namens „Shape“, die eine virtuelle Methode „Draw“ enthält. Diese Methode gibt eine Zeichenoperation aus, die von den abgeleiteten Klassen „Rectangle“ und „Circle“ überschrieben wird. Wenn wir ein Objekt der abgeleiteten Klasse erstellen und es als Objekt der Basis-Klasse behandeln, kann die Methode „Draw“ je nach der tatsächlichen Art des Objekts unterschiedliche Ergebnisse ausgeben. Wenn wir also die Methode „Draw“ aufrufen, wird sie zuerst in der abgeleiteten Klasse gesucht und falls diese nicht vorhanden ist, wird die Methode in der Basis-Klasse gesucht. In diesem Beispiel wird die Methode „Draw“ in den abgeleiteten Klassen überschrieben und gibt verschiedene Ausgaben aus, wenn sie aufgerufen wird.

Schnittstellenpolymorphie: Die Schnittstellenpolymorphie tritt auf, wenn eine Klasse eine Schnittstelle implementiert. Eine Schnittstelle ist eine Sammlung von Methoden, die implementiert werden müssen, wenn eine Klasse diese Schnittstelle implementiert. Eine Klasse, die eine Schnittstelle implementiert, kann als Objekt dieser Schnittstelle behandelt werden. Dadurch wird die Flexibilität erhöht, da Objekte unterschiedlicher Klassen als Objekte derselben Schnittstelle behandelt werden können.

Hier ist ein Beispielcode für die Schnittstellenpolymorphie in C#:

				
					interface IAnimal {
    void Eat();
    void Sleep();
}

class Dog : IAnimal {
    public void Eat() {
        Console.WriteLine("The dog is eating.");
    }

    public void Sleep() {
        Console.WriteLine("The dog is sleeping.");
    }
}

class Cat : IAnimal {
    public void Eat() {
        Console.WriteLine("The cat is eating.");
    }

    public void Sleep() {
        Console.WriteLine("The cat is sleeping.");
    }
}

class Program {
    static void Main(string[] args) {
        IAnimal animal1 = new Dog();
        IAnimal animal2 = new Cat();

        animal1.Eat(); // Output: The dog is eating.
        animal2.Sleep(); // Output: The cat is sleeping.
    }
}

				
			

In diesem Beispiel wird die Schnittstelle IAnimal definiert, die zwei Methoden Eat und Sleep enthält. Die Klassen Dog und Cat implementieren beide diese Schnittstelle, indem sie die Methoden Eat und Sleep überschreiben.

Im Main-Programm werden dann zwei Objekte erstellt, die als Objekte der Schnittstelle IAnimal behandelt werden. Das heißt, dass sie beide die Methoden Eat und Sleep implementieren müssen. Durch die Verwendung von Schnittstellenpolymorphie können die Objekte unterschiedlicher Klassen (in diesem Fall Dog und Cat) als Objekte derselben Schnittstelle (IAnimal) behandelt werden, was die Flexibilität erhöht.

Anwendungsmöglichkeiten der C# Polymorphie: C# Polymorphie kann in vielen Situationen nützlich sein, zum Beispiel:

  • Abstraktion: Durch Polymorphie können Sie Ihre Klassen abstrakter gestalten, indem Sie eine gemeinsame Schnittstelle oder Basis-Klasse definieren und dann spezifische Implementierungen in den abgeleiteten Klassen bereitstellen.

  • Flexibilität: Polymorphie erhöht die Flexibilität Ihres Codes, da Sie Objekte unterschiedlicher Klassen als Objekte derselben Schnittstelle behandeln können. Dadurch können Sie Code wiederverwenden und Änderungen einfacher durchführen.

  • Erweiterbarkeit: Polymorphie ermöglicht es Ihnen, neue Klassen hinzuzufügen, die eine gemeinsame Schnittstelle implementieren oder von einer gemeinsamen Basis-Klasse erben. Dadurch können Sie Ihre Anwendungen erweitern, ohne den bestehenden Code zu ändern.

C# Polymorphie ist ein wichtiger Mechanismus in der objektorientierten Programmierung, der die Flexibilität, Abstraktion und Wiederverwendbarkeit von Code erhöht. Es ist wichtig, die Grundlagen der Polymorphie zu verstehen und ihre Anwendungsmöglichkeiten in verschiedenen Situationen zu kennen. Durch die Verwendung von C# Polymorphie können Entwicklerinnen und Entwickler effektiver und effizienter programmieren und bessere, wartbarere und skalierbarere Code erstellen.

Durch die Möglichkeit, Objekte in verschiedenen Formen und mit unterschiedlichen Verhaltensweisen darzustellen, können komplexe Systeme mit hoher Flexibilität und Erweiterbarkeit entwickelt werden. Polymorphie ermöglicht es, Code in Abstraktionsebenen zu organisieren und dadurch eine klare und strukturierte Architektur zu schaffen.

Es ist jedoch wichtig zu beachten, dass Polymorphie nicht immer die beste Wahl für jede Situation ist. Eine schlecht durchdachte Verwendung von Polymorphie kann zu unnötigem Code führen und die Lesbarkeit und Wartbarkeit des Codes beeinträchtigen. Daher ist es wichtig, die Einsatzmöglichkeiten von Polymorphie genau zu analysieren und zu verstehen.

Insgesamt ist C# Polymorphie ein unverzichtbares Werkzeug für die Entwicklung von flexiblen, abstrakten und skalierbaren Systemen. Indem Entwicklerinnen und Entwickler das Potenzial von Polymorphie voll ausschöpfen und eine sorgfältige Planung und Umsetzung durchführen, können sie hochwertige, effiziente und wartbare Software erstellen.

Aufgabe:

Aufgabe zum Mitmachen:

Schreibe einen Code, der eine Methode namens „Addition“ enthält, die zwei Zahlen addiert und das Ergebnis ausgibt. Erstelle dann eine abgeleitete Klasse namens „Subtraktion“, die die Methode „Addition“ überschreibt und stattdessen zwei Zahlen subtrahiert und das Ergebnis ausgibt. Erstelle schließlich ein Objekt jeder Klasse und rufe die „Addition“ Methode auf.

Um die Lösung anzuzeigen, fahre mit der Maus in die Mitte des darunterliegenden Fensters.

				
					using System;

public class Rechner
{
public virtual void Addition(int num1, int num2)
{
    int sum = num1 + num2;
    Console.WriteLine("Die Summe der Zahlen {0} und {1} ist: {2}", num1, num2, sum);
}
}

public class Subtraktion : Rechner
{
public override void Addition(int num1, int num2)
{
    int diff = num1 - num2;
    Console.WriteLine("Die Differenz der Zahlen {0} und {1} ist: {2}", num1, num2, diff);
}
}

public class Programm
{
static void Main(string[] args)
{
    Rechner rechner1 = new Rechner();
    Subtraktion rechner2 = new Subtraktion();
    rechner1.Addition(10, 5); // Ausgabe: "Die Summe der Zahlen 10 und 5 ist: 15"
    rechner2.Addition(10, 5); // Ausgabe: "Die Differenz der Zahlen 10 und 5 ist: 5"
}
}
				
			

Erklärung: Die Aufgabe erfordert die Implementierung von Vererbungspolymorphie, bei der eine abgeleitete Klasse eine Methode der Basis-Klasse überschreibt. In diesem Beispiel wird eine Klasse namens „Rechner“ erstellt, die eine Methode „Addition“ enthält, die zwei Zahlen addiert und das Ergebnis ausgibt. Die abgeleitete Klasse „Subtraktion“ überschreibt die Methode „Addition“, um zwei Zahlen zu subtrahieren und das Ergebnis auszugeben.

Im Main-Programm werden dann Objekte der beiden Klassen erstellt und die Methode „Addition“ aufgerufen. Das erste Objekt ruft die Methode der Basis-Klasse auf und gibt die Summe aus, während das zweite Objekt die Methode der abgeleiteten Klasse aufruft und die Differenz ausgibt.

Zurück zum vorherigen Teil des C# Kurses
Klicken Sie auf den Pfeil, um zum vorherigen Teil des Kurses zurückzukehren
Pfeil-Button zum nächsten Teil des Kurses
Klicken Sie auf den Pfeil, um zum nächsten Teil des Kurses zu gelangen