Entwickler-Ecke
C# - Die Sprache - Wozu delegates?
CASS - Di 10.10.06 23:52
Titel: Wozu delegates?
Hallo Community,
wie wohl schon an der Art der Frage zu erkennen ist, bin ich nicht gerade der Profiprogrammierer...
Ich wollte mal fragen wozu Delegates eigentlich gut sind??? Wann sollte man sie nehmen bzw. wann muss man sie nehmen?
Danke für eure Hilfe!
Cass
Christian S. - Di 10.10.06 23:55
Hallo!
Einer der großen Einsatzbereiche von Delegates sind wohl die Events. Denn Events sind ja ansich nur eine Menge von Delegates, die nach und nach aufgerufen werden.
Auch nützlich sind Delegates z.B. bei Callback-Funktionen, wenn eine Methode also (als Beispiel) eine lange Berechnung durchführt und in jedem Schritt eine Methode zur Statusmeldung aufruft. Mit einem Delegate übergibt man diese Statusmethode als Parameter und ist flexibel.
Sorry, für die kürze der Antwort, aber ist schon spät ;-)
Grüße
Christian
Kha - Mi 11.10.06 16:59
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.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!