Einführung in DelegatenIntroduction to Delegates

VorherigesPrevious

Delegaten bieten einen Mechanismus mit später Bindung in .NET.Delegates provide a late binding mechanism in .NET. Späte Bindung bedeutet, dass Sie einen Algorithmus erstellen, in dem der Aufrufer auch mindestens eine Methode bereitstellt, die einen Teil des Algorithmus implementiert.Late Binding means that you create an algorithm where the caller also supplies at least one method that implements part of the algorithm.

Sie können z.B. eine Liste von Sternen in einer Astronomie-Anwendung sortieren.For example, consider sorting a list of stars in an astronomy application. Sie können diese Sterne nach ihrer Entfernung von der Erde, nach der Größe des Sterns oder ihrer wahrgenommenen Helligkeit sortieren.You may choose to sort those stars by their distance from the earth, or the magnitude of the star, or their perceived brightness.

In all diesen Fällen macht die Sort()-Methode im Prinzip das Gleiche: Sie ordnet die Elemente in der Liste basierend auf einen Vergleich.In all those cases, the Sort() method does essentially the same thing: arranges the items in the list based on some comparison. Der Code, der zwei Sterne vergleicht, ist bei jeder Sortierreihenfolge unterschiedlich.The code that compares two stars is different for each of the sort orderings.

Diese Arten von Lösungen wurden in der Softwareentwicklung für ein halbes Jahrhundert verwendet.These kinds of solutions have been used in software for half a century. Das Delegatenkonzept von C# bietet erstklassige Sprachunterstützung und Typsicherheit rund um das Konzept.The C# language delegate concept provides first class language support, and type safety around the concept.

Wie Sie später in dieser Serie sehen werden, ist der C#-Code, den Sie für Algorithmen wie diesen schreiben, typsicher und nutzt die Sprache und den Compiler, um sicherzustellen, dass die Typen mit Argumenten und Rückgabetypen übereinstimmen.As you'll see later in this series, the C# code you write for algorithms like this is type safe, and leverages the language and the compiler to ensure that the types match for arguments and return types.

Sprachliche Entwurfsziele für DelegatenLanguage Design Goals for Delegates

Die Sprachentwickler haben mehrere Ziele für die Funktion aufgezählt, die schließlich Delegaten geworden sind.The language designers enumerated several goals for the feature that eventually became delegates.

Das Team wollte ein allgemeines Sprachkonstrukt entwerfen, das für alle Algorithmen mit später Bindung verwendet werden kann.The team wanted a common language construct that could be used for any late binding algorithms. Dadurch können Softwareentwickler ein Konzept erlernen und dasselbe Konzept bei vielen verschiedenen Softwareproblemen anwenden.That enables developers to learn one concept, and use that same concept across many different software problems.

Außerdem sollten sowohl einzelne als auch Multicast-Methodenaufrufe unterstützt werden.Second, the team wanted to support both single and multi-cast method calls. Multicastdelegaten sind Delegaten, in denen mehrere Methoden miteinander verbunden wurden.(Multicast delegates are delegates where multiple methods have been chained together. Beispiele dafür finden Sie später in dieser Serie.You'll see examples later in this series.

Delegaten sollten dieselbe Typsicherheit unterstützen, die Entwickler von allen C#-Konstrukten erwarten.The team wanted delegates to support the same type safety that developers expect from all C# constructs.

Die Sprachentwickler erkannten schließlich, dass ein Ereignismuster ein bestimmtes Muster ist, in dem Delegaten (oder jeder beliebige Algorithmus mit später Bindung) sehr nützlich sind.Finally, the team recognized that an event pattern is one specific pattern where delegates, or any late binding algorithm) is very useful. Daher sollte sichergestellt werden, dass der Code für den Delegaten die Basis für das .NET-Ereignismuster bereitstellen konnte.The team wanted to ensure that the code for delegates could provide the basis for the .NET event pattern.

Das Ergebnis dieser Arbeit war die Delegat- und Ereignisunterstützung in C# und .NET.The result of all that work was the delegate and event support in C# and .NET. Die übrigen Artikel in diesem Abschnitt behandeln die Sprachfunktionen, die Bibliotheksunterstützung und die allgemeinen Ausdrücke, die bei der Arbeit mit Delegaten verwendet werden.The remaining articles in this section will cover the language features, the library support, and the common idioms that are used when you work with delegates.

Sie werden das delegate-Schlüsselwort kennenlernen und erfahren, welchen Code es generiert.You'll learn about the delegate keyword and what code it generates. Außerdem werden Sie die Funktionen der System.Delegate-Klasse kennenlernen und erfahren, wie diese Funktionen verwendet werden.You'll learn about the features in the System.Delegate class, and how those features are used. Darüber hinaus erfahren Sie, wie Sie typsichere Delegaten erstellen und wie Sie Methoden erstellen, die durch Delegaten aufgerufen werden können.You'll learn how to create type safe delegates, and how to create methods that can be invoked through delegates. Sie erfahren, wie Sie mithilfe von Lambdaausdrücken mit Delegaten und Ereignissen arbeiten undYou'll also learn how to work with delegates and events by using Lambda expressions. an welcher Stelle Delegaten einer der Bausteine für LINQ werden.You'll see where delegates become one of the building blocks for LINQ. Darüber hinaus erfahren Sie, warum Delegaten die Grundlage für das .NET-Ereignismuster sind und wie sie sich unterscheiden.You'll learn how delegates are the basis for the .NET event pattern, and how they are different.

Alles in allem wird erläutert, warum Delegaten ein wesentlicher Bestandteil in der .NET-Programmierung sind und wie sie mit den Framework-APIs arbeiten.Overall, you'll see how delegates are an integral part of programming in .NET and working with the framework APIs.

Fangen wir also an.Let's get started.

WeiterNext