Delegaten (C#-Programmierhandbuch)

Ein Delegat ist ein Typ, der Verweise auf Methoden mit einer bestimmten Parameterliste und dem Rückgabetyp darstellt. Nach Instanziierung eines Delegaten können Sie die Instanz mit einer beliebigen Methode verknüpfen, die eine kompatible Signatur und einen kompatiblen Rückgabetyp aufweist. 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 einer beliebigen verfügbaren Klasse oder Struktur, die mit dem Delegattyp übereinstimmt, kann dem Delegaten zugewiesen werden. Bei der Methode kann es sich um eine statische Methode oder um eine Instanzenmethode handeln. Diese Flexibilität ermöglicht das programmgesteuerte Ändern von Methodenaufrufen oder die Integration von neuem Code in bereits vorhandene Klassen.

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 muss eine Methode denselben Rückgabetyp haben wie der Delegat.

Diese Fähigkeit, als Parameter auf eine Methode zu verweisen, macht Delegaten ideal für das Definieren von Rückrufmethoden. Sie können eine Methode schreiben, die zwei Objekte in Ihrer Anwendung vergleicht. Diese Methode kann in einem Delegaten für einen Sortieralgorithmus verwendet werden. Da der Vergleichscode von der Bibliothek getrennt ist, kann die Sortiermethode allgemeiner sein.

Funktionszeiger wurden C# 9 für ähnliche Szenarios hinzugefügt, in denen Sie mehr Kontrolle über die Aufrufkonvention benötigen. Der einem Delegaten zugeordnete Code wird mithilfe einer virtuellen Methode aufgerufen, die einem Delegattypen hinzugefügt wird. Mithilfe von Funktionszeigern können Sie unterschiedliche Konventionen angeben.

Übersicht über Delegaten

Delegaten verfügen über folgende Eigenschaften:

  • Delegaten ähneln C++-Funktionszeigern, sind aber vollständig objektorientiert, und im Gegensatz zu C++-Zeigern auf Memberfunktionen kapseln Delegaten sowohl eine Objektinstanz als auch eine Methode.
  • 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 dem Typ des Delegaten übereinstimmen. Weitere Informationen finden Sie unter Verwenden von Varianz in Delegaten.
  • Lambdaausdrücke sind eine präzisere Methode zum Schreiben von Inlinecodeblöcken. Lambdaausdrücke werden (in bestimmten Kontexten) in Delegattypen kompiliert. Weitere Informationen zu Lambdaausdrücken finden Sie unter Lambdaausdrücke.

In diesem Abschnitt

C#-Programmiersprachenspezifikation

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

Weitere Informationen