So arbeiten Sie mit Erweiterungsmethoden in C #

Die Programmiersprache C # unterstützt Erweiterungsmethoden ab C # 3.0. Eine Erweiterungsmethode wird verwendet, um die Funktionalität vorhandener Typen durch Hinzufügen von Methoden zu erweitern, ohne dass neue abgeleitete Typen erstellt werden müssen. Sie müssen keine Unterklassen vorhandener Klassen erstellen oder Ihre vorhandenen Klassen neu kompilieren oder ändern, um mit Erweiterungsmethoden zu arbeiten. Erweiterungsmethoden verbessern die Lesbarkeit Ihres Codes und ermöglichen Ihnen gleichzeitig, die Funktionalität vorhandener Typen zu erweitern.

Zu den gängigen Erweiterungsmethoden in .Net gehören die LINQ-Standardabfrageoperatoren, die den System.Collections.IEnumerable and System.Collections.Generic.IEnumerableTypen zusätzliche Abfragefunktionen hinzufügen . Beachten Sie, dass Sie Erweiterungsmethoden nutzen können, um eine Klasse oder eine Schnittstelle zu erweitern, ihre Methoden jedoch nicht überschreiben können. In der MSDN heißt es: "Erweiterungsmethoden ermöglichen es Ihnen, Methoden zu vorhandenen Typen hinzuzufügen, ohne einen neuen abgeleiteten Typ zu erstellen, den ursprünglichen Typ neu zu kompilieren oder auf andere Weise zu ändern. Erweiterungsmethoden sind eine spezielle Art statischer Methoden, werden jedoch so aufgerufen, als ob sie." waren Instanzmethoden für den erweiterten Typ. "

Im Wesentlichen ist eine Erweiterungsmethode ein spezieller Typ einer statischen Methode und ermöglicht es Ihnen, einem vorhandenen Typ Funktionen hinzuzufügen, auch wenn Sie keinen Zugriff auf den Quellcode des Typs haben. Eine Erweiterungsmethode ist genau wie eine andere statische Methode, hat jedoch die Referenz „this“ als ersten Parameter. Sie können jedem Typ beliebig viele Erweiterungsmethoden hinzufügen. Am wichtigsten ist, dass Sie auch einem Wertetyp Erweiterungsmethoden hinzufügen können.

Beachten Sie beim Arbeiten mit Erweiterungsmethoden die folgenden Punkte:

  • Eine Erweiterungsmethode muss eine statische Methode sein
  • Eine Erweiterungsmethode muss sich in einer statischen Klasse befinden - die Klasse kann einen beliebigen Namen haben
  • Der Parameter in einer Erweiterungsmethode sollte immer das Schlüsselwort "this" vor dem Typ haben, für den die Methode aufgerufen werden muss

Beachten Sie, dass die Erweiterungsmethode niemals aufgerufen wird, wenn Sie eine Erweiterungsmethode für einen Typ definieren, der dieselbe Signatur wie jede andere Methode des Typs hat, den Sie erweitern.

Programmieren von Erweiterungsmethoden in C #

In diesem Abschnitt erfahren Sie, wie Sie Erweiterungsmethoden mit C # programmieren. Die folgende Codeliste zeigt, wie eine Erweiterungsmethode aussieht.

public static class StringExtensions

    {

        public static bool IsNumeric(this string str)

        {

            double output;

            return double.TryParse(str, out output);

        }

    }

Beachten Sie den ersten Parameter der Erweiterungsmethode. Wie bereits erläutert, sollte jede Erweiterungsmethode statisch sein und das Schlüsselwort "this" vor dem Parameter haben, für den die Methode aufgerufen werden soll. Wenn Sie das Schlüsselwort "this" in der Parameterliste so angeben, wie es im obigen Beispiel gezeigt wurde, informieren Sie den Compiler darüber, dass eine Erweiterungsmethode für die Zeichenfolgenklasse definiert wurde.

So können Sie die Erweiterungsmethode IsNumeric für eine Zeichenfolgeninstanz verwenden.

static void Main(string[] args)

        {

            string str = "100";

            if (str.IsNumeric())

                Console.WriteLine("The string object named str contains numeric value.");

            Console.Read();

        }

Wenn Sie das obige Programm ausführen, wird die Meldung ("Das Zeichenfolgenobjekt mit dem Namen str enthält einen numerischen Wert." Wird im Konsolenfenster angezeigt.

Sie können Erweiterungsmethoden verwenden, um neue Funktionen über Methoden in einen Typ einzufügen, ohne dass der ursprüngliche Typ geändert, abgeleitet oder neu kompiliert werden muss. Wie bereits erwähnt, können Erweiterungsmethoden auch auf Werttypen angewendet werden. Lassen Sie uns anhand eines Beispiels sehen, wie dies erreicht werden kann.

Die folgende Klasse mit dem Namen IntegerExtensions enthält eine Erweiterungsmethode mit dem Namen IsEven, die true zurückgibt, wenn die Ganzzahl, für die sie aufgerufen wird, gerade ist, andernfalls false.

public static class IntegerExtensions

    {

        public static bool IsEven(this int i)

        {

            return ((i % 2) == 0);

        }

    }

Und so können Sie die Erweiterungsmethode IsEven für eine Ganzzahl verwenden.

int n = 2;

if(n.IsEven())

 Console.WriteLine("The value of the integer is even.");