Freigeben über


Einführung in Delegaten und Ereignisse in C#

Delegaten bieten einen Mechanismus mit später Bindung in .NET. Late Binding bedeutet, dass Sie einen Algorithmus erstellen, in dem der Aufrufer auch mindestens eine Methode bereitstellt, die einen Teil des Algorithmus implementiert.

Ziehen Sie beispielsweise in Betracht, eine Liste von Sternen in einer Astronomieanwendung zu sortieren. Sie können diese Sterne nach ihrer Entfernung von der Erde oder der Größe des Sterns oder ihrer wahrgenommenen Helligkeit sortieren.

In all diesen Fällen bewirkt die Sort()-Methode im Wesentlichen dasselbe: Sie ordnet die Elemente in der Liste aufgrund eines Vergleichs an. Der Code, der zwei Sterne vergleicht, unterscheidet sich für jede Sortierreihenfolge.

Diese Arten von Lösungen wurden seit einem halben Jahrhundert in Software eingesetzt. Das Delegatenkonzept von C# bietet erstklassige Sprachunterstützung und Typsicherheit rund um das Konzept.

Wie Sie später in dieser Reihe sehen, ist der C#-Code, den Sie für Algorithmen schreiben, sicher. Der Compiler stellt sicher, dass die Typen für Argumente und Rückgabetypen übereinstimmen.

Funktionszeiger unterstützen ähnliche Szenarien, in denen Sie mehr Kontrolle über die Aufrufkonvention benötigen. Der code, der einem Delegaten zugeordnet ist, wird mithilfe einer virtuellen Methode aufgerufen, die einem Delegattyp hinzugefügt wurde. Mithilfe von Funktionszeigern können Sie unterschiedliche Konventionen angeben.

Sprachliche Entwurfsziele für Delegaten

Die Sprachentwickler haben mehrere Ziele für die Funktion aufgezählt, die schließlich Delegaten geworden sind.

Das Team wollte ein gemeinsames Sprachkonstrukt, das für alle Spätbindungsalgorithmen verwendet werden kann. Stellvertretungen ermöglichen Es Entwicklern, ein Konzept zu erlernen und dasselbe Konzept in vielen verschiedenen Softwareproblemen zu verwenden.

Außerdem sollten sowohl einzelne als auch Multicast-Methodenaufrufe unterstützt werden. (Multicastdelegaten sind Delegaten, die mehrere Methodenaufrufe verketten. Beispiele sehen Sie später in dieser Serie.)

Delegaten sollten dieselbe Typsicherheit unterstützen, die Entwickler von allen C#-Konstrukten erwarten.

Das Team hat schließlich erkannt, dass ein Ereignismuster ein bestimmtes Muster ist, für das Delegaten – bzw. beliebige Algorithmen mit später Bindung – sehr nützlich sind. Daher sollte sichergestellt werden, dass der Code für den Delegaten die Basis für das .NET-Ereignismuster bereitstellen konnte.

Das Ergebnis aller Arbeiten war die Delegaten- und Ereignisunterstützung in C# und .NET.

Die restlichen Artikel dieser Reihe werden Sprachmerkmale, Bibliotheksunterstützung und allgemeine Redewendungen behandeln, die bei der Arbeit mit Delegates und Ereignissen verwendet werden. Sie erfahren folgendes:

  • Das delegate Schlüsselwort und der generierte Code.
  • Die Features in der System.Delegate Klasse und die Verwendung dieser Features.
  • Erstellen typsicherer Delegaten
  • Wie man Methoden erstellt, die über Delegaten aufgerufen werden können.
  • So arbeiten Sie mit Stellvertretungen und Ereignissen mithilfe von Lambda-Ausdrücken.
  • Wie Stellvertretungen zu einem der Bausteine für LINQ werden.
  • Delegaten als Grundlage für das .NET-Ereignismuster und ihre Unterschiede

Fangen wir an.

Nächster