Erweiterungsmethoden

Erweiterungsmethoden (Extension Methods) in C# sind ein sehr spannendes Thema wenn es darum geht, vorhandene Klassen um eigene Methoden zu erweitern.

Als Beispiel möchte ich eine Methode verwenden, die wir schon bereitgestellt im Namespace System.Linq bekommen.
Das bedeutet fürs Nachbauen dieses Beispiels bitte zuerst die Zeile “using System.Linq;” entfernen.

In diesem Beispiel wollen wir die Klasse String um eine “Reverse()” Methode erweitern.
Man könnte jetzt natürlich die Überlegung, aufstellen einfach mal von String zu erben. Dabei würde man aber sehr schnell auf Probleme stoßen, denn die Klasse String ist als sealed deklariert, was verhindert, dass von der Klasse geerbt werden kann.

string s = "Hallo Welt";

Console.WriteLine(s);
Console.WriteLine(s.Reverse());
Console.WriteLine("Heute ist ein schöner Tag.".Reverse());

Die Ausgabe sollte dann so aussehen:

image

Hier sehen wir, dass wir die Methode Reverse() direkt auf den String anwenden, obwohl es in der Klasse String gar keine Methode Reverse() gibt.

Der erste Schritt zu unsere Erweiterungsmethode ist das Anlegen einer statischen Klasse.

public static class ExtetionMethods

Der Name der Klasse ist frei wählbar, da sie später aus dem Programm nicht aufgerufen wird.

Innerhalb der statischen Klasse deklarieren wir nun unsere Methode Reverse(), welche auch statisch deklariert sein muss.

public static string Reverse(this string value)

Wir sehen hier zwei Mal den Datentyp string.
Das erste Mal ist es einfach der Rückgabetyp der Methode. Wir wollen ja den übergebenen Text in umgekehrter Reihenfolge wieder zurückgeben.

Das zweite Mal ist schon bisschen spannender, denn da steht noch das Schlüsselwort this davor.
Das Schlüsselwort this bedeutet, dass wir an dieser Stelle eine Erweiterungsmethode für den darauffolgenden Datentyp  bauen. In diesem Beispiel habe ich String gewählt. Der Name des Parameters ist wieder frei wählbar.

Der Parameter (hier “value”) beinhaltet dann das Objekt, auf welches die Methode aufgerufen wurde.

public static class ExtetionMethods
{
    public static string Reverse(this string value)
    {
        string temp = string.Empty;

        for (int i = value.Length - 1; i >= 0; i--)
        {
            temp = temp + value[i];
        }

        return temp;
    }
}

 

Im Namespace System.Linq befinden sich eine ganze Ansammlung von Erweiterungsmethoden. Die Meisten davon beziehen sich auf das Interface IEnumerable und erweitern somit alle Klassen, welche dieses Interface implementieren (z.B. List<T>, Array, etc.).

Kommentare sind geschlossen