Autor Beitrag
CASS
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 160

WIN XP
D7 Enterprise
BeitragVerfasst: Di 10.10.06 23:52 
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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: 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

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Mi 11.10.06 16:59 
user profile iconChristian 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:
ausblenden 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;
  // entspricht DoDelegate d = new DoDelegate(DoSomething);

  d += DoAnotherThing;
  // wird kompiliert zu d = (DoDelegate)Delegate.Combine(d, new DoDelegate(DoAnotherThing))

  d();
  // => d.Invoke();
}


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.