Delegaten (C#-Programmierhandbuch)

Aktualisiert: November 2007

Ein Delegat ist ein Typ, der eine Methodensignatur definiert. Er kann jeder Methode zugeordnet werden, die über eine kompatible Signatur verfügt. Sie können die Methode über den Delegaten 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.

Hinweis:

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. Zum Beispiel könnte einem Sortieralgorithmus ein Verweis auf die Methode übergeben werden, die zwei Objekte vergleicht. Durch die Trennung des Vergleichscodes kann der Algorithmus auf eine allgemeinere Weise 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 hierzu finden Sie unter Covariance and ContravarianceKovarianz und Kontravarianz in Delegaten (C#-Programmierhandbuch).

  • 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 Lambda-Ausdrücken finden Sie unter Anonyme Funktionen (C#-Programmierhandbuch).

In diesem Abschnitt

C#-Programmiersprachenspezifikation

Weitere Informationen finden Sie in den folgenden Abschnitten von C#-Programmiersprachenspezifikation:

  • 1.11 Delegaten

  • 4.2.6 Delegattypen

  • 7.5.5.3 Delegataufrufe

  • 15 Delegaten

Siehe auch

Konzepte

C#-Programmierhandbuch

Referenz

Ereignisse (C#-Programmierhandbuch)

Delegate