Christian S. hat folgendes geschrieben: |
Denn Events sind ja ansich nur eine Menge von Delegates, die nach und nach aufgerufen werden. |
Events sind einfach nur Delegate-Properties
. Sie bestehen lediglich aus einer add- und einer remove-Methode, ggf. (= 95% der Fälle
) noch aus einem autogenerierten Delegate-Feld, Delegates selbst bieten also schon das Multicast-Feature:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| delegate void DoDelegate();
static void Main(string[] args) { DoDelegate d = DoSomething; d += DoAnotherThing; d(); } |
Ein schönes weiteres Beispiel für Callback-Methoden ist List<T>.Sort(Comparison<T> comparison). Als Argument wird ein Delegate übergeben, der innerhalb der Funktion aufgerufen wird, um die Reihenfolge zweier Elemente zu bestimmen.
PS: Ein Delegate/Event-Aufruf lässt sich grundsätzlich immer durch einen Interface-Aufruf ersetzen (s. z.B. List<T>.Sort(IComparer<T> comparer)), was aber häufig um Einiges umständlicher ist. Genau dann ist es sinnvoll, Delegates/Events zu benutzen.