Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Ein Delegat ist ein Typ, der Verweise auf Methoden mit einer bestimmten Parameterliste und rückgabetyp darstellt. Wenn Sie einen Delegaten instanziieren, können Sie die Stellvertretungsinstanz einer beliebigen Methode zuordnen, die über eine kompatible Signatur und einen Rückgabetyp verfügt. Sie können die Methode über die Delegatinstanz aufrufen.
Delegaten werden verwendet, um Methoden als Argumente an anderen Methoden zu übergeben. Ereignisbehandler sind im Wesentlichen Methoden, die Sie über Delegierte aufrufen. Wenn Sie eine benutzerdefinierte Methode erstellen, kann eine Klasse wie ein Windows-Steuerelement Ihre Methode aufrufen, wenn ein bestimmtes Ereignis auftritt.
Das folgende Beispiel zeigt eine Delegatdeklaration:
public delegate int PerformCalculation(int x, int y);
Sie können dem Delegaten eine beliebige Methode aus einer beliebigen zugänglichen Klasse oder Struktur zuweisen, die dem Delegatentyp entspricht. Die Methode kann statisch oder eine Instanzmethode sein. Mit der Flexibilität können Sie Methodenaufrufe programmgesteuert ändern oder neuen Code in vorhandene Klassen anschließen.
Hinweis
Im Kontext der Methodenüberladung enthält die Signatur einer Methode nicht den Rückgabewert. Im Kontext von Delegaten enthält die Signatur jedoch den Rückgabewert. Mit anderen Worten, eine Methode muss einen kompatiblen Rückgabetyp aufweisen, wie der vom Delegaten deklarierte Rückgabetyp.
Die Möglichkeit, auf eine Methode als Parameter zu verweisen, macht Delegaten ideal für die Definition von Rückrufmethoden. Sie können eine Methode schreiben, die zwei Objekte in Ihrer Anwendung vergleicht. Die Methode kann dann in einem Delegaten für einen Sortieralgorithmus verwendet werden. Da der Vergleichscode von der Bibliothek getrennt ist, kann die Sortiermethode allgemeiner sein.
Funktionszeiger unterstützen ähnliche Szenarien, in denen Sie mehr Kontrolle über die Aufrufkonvention benötigen. Der einem Delegaten zugeordnete Code wird mithilfe einer virtuellen Methode aufgerufen, die einem Delegattyp hinzugefügt wurde. Wenn Sie mit Funktionszeigern arbeiten, können Sie unterschiedliche Konventionen angeben.
Merkmale von Delegierten untersuchen
Stellvertretungen weisen die folgenden Merkmale auf:
- Delegaten ermöglichen die Übergabe von Methoden als Parameter.
- Stellvertretungen können zum Definieren von Rückrufmethoden verwendet werden.
- Delegaten können miteinander verkettet werden, z. B. das Aufrufen mehrerer Methoden für ein einzelnes Ereignis.
- Methoden müssen nicht exakt mit dem Delegattyp übereinstimmen. Weitere Informationen finden Sie unter Verwenden von Varianz in Delegaten.
- Lambda-Ausdrücke sind eine präzisere Methode zum Schreiben von Inlinecodeblöcken. Lambda-Ausdrücke (in bestimmten Kontexten) werden zu Delegatentypen kompiliert. Weitere Informationen zu Lambda-Ausdrücken finden Sie unter Lambda-Ausdrücke.
Lesen verwandter Artikel
Weitere Informationen zu Stellvertretungen finden Sie in den folgenden Artikeln:
- Verwenden von Stellvertretungen
- Delegaten mit benannten und anonymen Methoden
- Varianz in Delegierten verwenden
- So kombninieren Sie Delegierte (Multicast-Delegierte)
- Deklarieren, Instanziieren und Verwenden einer Stellvertretung
Zugreifen auf die C#-Sprachspezifikation
Die Sprachspezifikation ist die endgültige Quelle für C#-Syntax und -Verwendung. Weitere Informationen finden Sie unter Delegaten in der C#-Sprachspezifikation.