Share via


Delegaten (C#-Programmierhandbuch)

Ein Delegat ist ein Typ, der eine Methodensignatur definiert. Wenn Sie einen Delegaten instanziieren, können Sie jeder Methode seine Instanz mit einer kompatiblen Signatur zuordnen. Sie können die Methode über die Delegatinstanz aufrufen.

Delegaten werden verwendet, um Methoden als Argumente an anderen Methoden zu übergeben. Ereignishandler sind nichts weiter als Methoden, die durch Delegaten aufgerufen werden. Wenn Sie eine benutzerdefinierte Methode erstellen, kann eine Klasse wie das Windows-Steuerelement diese Methode aufrufen, sobald ein bestimmtes Ereignis eintritt. Das folgende Beispiel veranschaulicht die Deklaration eines Delegaten:

    public delegate int PerformCalculation(int x, int y);

Jede Methode aus einer beliebigen zugreifbaren Klasse oder Struktur, die mit der aus dem Rückgabetyp und aus Parametern bestehenden Signatur des Delegaten übereinstimmt, kann dem Delegaten zugewiesen werden. Bei der Methode kann es sich um eine statische Methode oder um eine Instanzenmethode handeln. Dies ermöglicht das programmgesteuerte Ändern von Methodenaufrufen sowie die Integration von neuem Code in bereits vorhandene Klassen. Wenn Sie die Signatur des Delegaten kennen, können Sie Ihre eigene Methode zuweisen.

Tipp

In Verbindung mit dem Überladen von Methoden schließt die Signatur einer Methode den Rückgabewert nicht ein. Bei Delegaten ist der Rückgabewert jedoch in die Signatur eingeschlossen. Mit anderen Worten, eine Methode muss denselben Rückgabewert haben wie der Delegat.

Diese Fähigkeit, als Parameter auf eine Methode zu verweisen, macht Delegaten ideal für das Definieren von Rückrufmethoden. Beispielsweise kann ein Verweis auf eine Methode, die zwei Objekte vergleicht, als Argument an einen Sortieralgorithmus übergeben werden. Da sich der Vergleichscode in einer separaten Prozedur befindet, kann der Sortierungsalgorithmus allgemeiner geschrieben werden.

Übersicht über Delegaten

Delegaten verfügen über folgende Eigenschaften:

  • Delegaten ähneln C++-Funktionszeigern, sind aber typsicher.

  • Delegaten ermöglichen es, Methoden als Parameter zu übergeben.

  • Delegaten können zum Definieren von Rückrufmethoden verwendet werden.

  • Delegaten können miteinander verkettet werden. So können beispielsweise mehrere Methoden für ein einziges Ereignis aufgerufen werden.

  • Methoden müssen nicht exakt mit der Signatur des Delegaten übereinstimmen. Weitere Informationen finden Sie unter Verwenden von Varianz in Delegaten (C# und Visual Basic).

  • In C#, Version 2.0, wurde das Konzept der anonymen Methoden eingeführt, durch die anstelle einer separat definierten Methode Codeblöcke als Parameter übergeben werden können. In C# 3.0 wurden Lambda-Ausdrücke als eine präzisere Methode zum Schreiben von Inlinecodeblöcken eingeführt. Sowohl anonyme Methoden als auch Lambda-Ausdrücke werden (in bestimmten Kontexten) in Delegattypen kompiliert. Zusammen werden diese Features jetzt als anonyme Funktionen bezeichnet. Weitere Informationen zu Lambdaausdrücken finden Sie unter Anonyme Funktionen (C#-Programmierhandbuch).

In diesem Abschnitt

C#-Programmiersprachenspezifikation

Weitere Informationen finden Sie in der C#-Sprachspezifikation. Die Sprachspezifikation ist die verbindliche Quelle für die Syntax und Verwendung von C#.

Enthaltene Buchkapitel

Delegates, Events, and Lambda Expressions in C# 3.0 Cookbook, Third Edition: More than 250 solutions for C# 3.0 programmers

Delegates and Events in Learning C# 3.0: Master the fundamentals of C# 3.0

Siehe auch

Referenz

Ereignisse (C#-Programmierhandbuch)

Delegate

Konzepte

C#-Programmierhandbuch