Freigeben über


Gewusst wie: Implementieren und Aufrufen einer benutzerdefinierten Erweiterungsmethode (C#-Programmierhandbuch)

In diesem Artikel wird das Implementieren Ihrer eigenen Erweiterungsmethoden für jeden .NET-Typ behandelt. Clientcode kann Ihre Erweiterungsmethoden verwenden. Clientprojekte müssen auf die Assembly verweisen, in der sie enthalten sind. Clientprojekte müssen eine using-Direktive hinzufügen, die den Namespace angibt, in dem die Erweiterungsmethoden definiert sind.

So definieren Sie die Erweiterungsmethode und rufen Sie auf:

  1. Definieren Sie eine statische Klasse, die die Erweiterungsmethode enthalten soll. Die Klasse kann nicht in einem anderen Typ geschachtelt werden und muss für Clientcode sichtbar sein. Weitere Informationen finden Sie unter Zugriffsmodifizierer.
  2. Implementieren Sie die Erweiterungsmethode als statische Methode mit mindestens die gleichen Sichtbarkeit wie die enthaltende Klasse.
  3. Der erste Parameter der Methode gibt den Typ an, auf den die Methode angewendet wird. Ihm muss ein this-Modifizierer vorangehen.
  4. Fügen Sie im aufrufenden Code eine using-Direktive hinzu, um den Namespace anzugeben, der die Erweiterungsklassemethode enthält.
  5. Rufen Sie die Methoden als Instanzenmethoden für den Typ auf.

Hinweis

Der erste Parameter wird nicht durch einen Aufruf von Code angegeben, da er den Typ darstellt, auf den der Operator angewendet wird, und der Compiler bereits den Typ des Objekts kennt. Sie müssen nur Argumente für Parameter 2 bis n bereitstellen.

Im folgenden Beispiel wird eine Erweiterungsmethode namens WordCount in der CustomExtensions.StringExtension-Klasse implementiert. Die Methode wird auf die String-Klasse angewendet, die als erster Methodenparameter angegeben wird. Der CustomExtensions-Namespace wird in den Anwendungsnamespace importiert, und die Methode wird in der Main-Methode aufgerufen.

using CustomExtensions;

string s = "The quick brown fox jumped over the lazy dog.";
// Call the method as if it were an
// instance method on the type. Note that the first
// parameter is not specified by the calling code.
int i = s.WordCount();
System.Console.WriteLine("Word count of s is {0}", i);


namespace CustomExtensions
{
    // Extension methods must be defined in a static class.
    public static class StringExtension
    {
        // This is the extension method.
        // The first parameter takes the "this" modifier
        // and specifies the type for which the method is defined.
        public static int WordCount(this string str)
        {
            return str.Split(new char[] {' ', '.','?'}, StringSplitOptions.RemoveEmptyEntries).Length;
        }
    }
}

Die Überladungsauflösung zieht Erweiterungsmethoden Instanzen oder statische Methoden vor, die vom Typ selbst definiert werden. Erweiterungsmethoden können in der erweiterten Klasse nicht auf private Daten zugreifen.

Siehe auch