Delegaten (C#-Programmierhandbuch)Delegates (C# Programming Guide)

Ein Delegat ist ein Typ, der Verweise auf Methoden mit einer bestimmten Parameterliste und dem Rückgabetyp darstellt.A delegate is a type that represents references to methods with a particular parameter list and return type. Wenn Sie einen Delegaten instanziieren, können Sie jeder Methode seine Instanz mit einer kompatiblen Signatur und dem Rückgabetyp zuordnen.When you instantiate a delegate, you can associate its instance with any method with a compatible signature and return type. Sie können die Methode über die Delegatinstanz aufrufen.You can invoke (or call) the method through the delegate instance.

Delegaten werden verwendet, um Methoden als Argumente an anderen Methoden zu übergeben.Delegates are used to pass methods as arguments to other methods. Ereignishandler sind nichts weiter als Methoden, die durch Delegaten aufgerufen werden.Event handlers are nothing more than methods that are invoked through delegates. Wenn Sie eine benutzerdefinierte Methode erstellen, kann eine Klasse wie das Windows-Steuerelement diese Methode aufrufen, sobald ein bestimmtes Ereignis eintritt.You create a custom method, and a class such as a windows control can call your method when a certain event occurs. Das folgende Beispiel veranschaulicht die Deklaration eines Delegaten:The following example shows a delegate declaration:

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.Any method from any accessible class or struct that matches the delegate type can be assigned to the delegate. Bei der Methode kann es sich um eine statische Methode oder um eine Instanzenmethode handeln.The method can be either static or an instance method. Dies ermöglicht das programmgesteuerte Ändern von Methodenaufrufen sowie die Integration von neuem Code in bereits vorhandene Klassen.This makes it possible to programmatically change method calls, and also plug new code into existing classes.

Hinweis

In Verbindung mit dem Überladen von Methoden schließt die Signatur einer Methode den Rückgabewert nicht ein.In the context of method overloading, the signature of a method does not include the return value. Bei Delegaten ist der Rückgabewert jedoch in die Signatur eingeschlossen.But in the context of delegates, the signature does include the return value. Mit anderen Worten muss eine Methode denselben Rückgabetyp haben wie der Delegat.In other words, a method must have the same return type as the delegate.

Diese Fähigkeit, als Parameter auf eine Methode zu verweisen, macht Delegaten ideal für das Definieren von Rückrufmethoden.This ability to refer to a method as a parameter makes delegates ideal for defining callback methods. Beispielsweise kann ein Verweis auf eine Methode, die zwei Objekte vergleicht, als Argument an einen Sortieralgorithmus übergeben werden.For example, a reference to a method that compares two objects could be passed as an argument to a sort algorithm. Da sich der Vergleichscode in einer separaten Prozedur befindet, kann der Sortieralgorithmus allgemeiner geschrieben werden.Because the comparison code is in a separate procedure, the sort algorithm can be written in a more general way.

Übersicht über DelegatenDelegates Overview

Delegaten verfügen über folgende Eigenschaften:Delegates have the following properties:

  • Delegaten ähneln C++-Funktionszeigern, sind aber typsicher.Delegates are like C++ function pointers but are type safe.

  • Delegaten ermöglichen es, Methoden als Parameter zu übergeben.Delegates allow methods to be passed as parameters.

  • Delegaten können zum Definieren von Rückrufmethoden verwendet werden.Delegates can be used to define callback methods.

  • Delegaten können miteinander verkettet werden. So können beispielsweise mehrere Methoden für ein einziges Ereignis aufgerufen werden.Delegates can be chained together; for example, multiple methods can be called on a single event.

  • Methoden müssen nicht exakt mit dem Typ des Delegaten übereinstimmen.Methods do not have to match the delegate type exactly. Weitere Informationen finden Sie unter Verwenden von Varianz in Delegaten.For more information, see Using Variance in Delegates.

  • 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.C# version 2.0 introduced the concept of Anonymous Methods, which allow code blocks to be passed as parameters in place of a separately defined method. In C# 3.0 wurden Lambdaausdrücke als eine präzisere Methode zum Schreiben von Inlinecodeblöcken eingeführt.C# 3.0 introduced lambda expressions as a more concise way of writing inline code blocks. Sowohl anonyme Methoden als auch Lambda-Ausdrücke werden (in bestimmten Kontexten) in Delegattypen kompiliert.Both anonymous methods and lambda expressions (in certain contexts) are compiled to delegate types. Zusammen werden diese Funktionen jetzt als anonyme Funktionen bezeichnet.Together, these features are now known as anonymous functions. Weitere Informationen zu Lambdaausdrücken finden Sie unter Lambda Expressions (Lambdaausdrücke).For more information about lambda expressions, see Anonymous Functions.

In diesem AbschnittIn This Section

C#-ProgrammiersprachenspezifikationC# Language Specification

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

Delegaten, Ereignisse und Lambda-Ausdrücke im C# 3.0 Cookbook, Third Edition: More than 250 solutions for C# 3.0 programmersDelegates, Events, and Lambda Expressions in C# 3.0 Cookbook, Third Edition: More than 250 solutions for C# 3.0 programmers

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

Siehe auchSee Also

Delegate
C#-ProgrammierhandbuchC# Programming Guide
EreignisseEvents