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

In diesem Thema wird gezeigt, wie eigene Erweiterungsmethoden für jeden Typ in der .NET Framework-Klassenbibliothek oder beliebigen anderen .NET-Typen implementiert werden. Der Clientcode kann Ihre Erweiterungsmethoden verwenden, wenn ein Verweis auf die DLL, die die Methoden enthält, und eine using-Direktive hinzugefügt werden, 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 muss für den 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 auf, als wären sie Instanzmethoden für den Typ.

    Beachten Sie, dass der erste Parameter nicht durch einen Aufruf von Code angegeben wird, 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.

Beispiel

Im folgenden Beispiel wird eine Erweiterungsmethode namens WordCount in der CustomExtensions.StringExtension-Klasse implementiert. Die Methode wird auf die <xref:System.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 System.Linq;
using System.Text;
using System;

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;
        }
    }
}
namespace Extension_Methods_Simple
{
    //Import the extension method namespace.
    using CustomExtensions;
    class Program
    {
        static void Main(string[] args)
        {
            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);
        }
    }
}

Kompilieren des Codes

Um diesen Code auszuführen, kopieren Sie ihn, und fügen Sie ihn in ein Visual C#-Konsolenanwendungsprojekt ein, das in Visual Studio erstellt wurde. Standardmäßig wird dieses Projekt mit Version 3.5 von .NET Framework verwendet und verfügt über einen Verweis auf „System.Core.dll“ und eine using-Anweisung für „System.Linq“. Wenn mindestens eine dieser Anforderungen im Projekt nicht vorhanden sind, können Sie sie manuell hinzufügen.

.NET Framework-Sicherheit

Erweiterungsmethoden enthalten keine speziellen Sicherheitslücken. Sie können nicht dazu verwendet werden, die Identität vorhandener Methoden für einen Typ anzunehmen, da alle Namenskonflikte zugunsten der Instanz oder eine statische Methode gelöst werden, die der Typ selbst definiert. Erweiterungsmethoden können in der erweiterten Klasse nicht auf private Daten zugreifen.

Siehe auch

C#-Programmierhandbuch
Erweiterungsmethoden
LINQ (Language-Integrated Query, sprachintegrierte Abfrage)
Statische Klassen und statische Klassenmember
protected
internal
public
this
namespace