PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : c# delegates - was ist das


Gast
2007-09-24, 19:30:12
Hi,
ich verstehe Delegates nicht 100%. Meine ich zumindest. Verstehe ich es richtig?:

Delegates sind in erster Linie mit einer Methode nichts anderes als ein Verweis auf die Methode. Also ich registriere eine Methode an dem überallbekannten Delegate und kann dann diese Methode überall aufrufen. Egal an welcher Stelle im Text.

Und bei mind. 2 Methoden die bei Delegates registriert sind kann man sagen, daß beide Methoden quasi parallel aufgerufen werden oder aber ich wähle meine Methode vorher aus.

also kurz: Ein Rucksack voller Methoden die man immer gut gebrauchen könnte.

Richtig? Ansonsten würde ich mich über eine einfacher Erklärung freuen (je bildlicher desto besser)

Kabelsalat
2007-09-24, 19:56:43
Im Visual C# 2005 Openbook werden Delegaten erklärt:

Delegate (http://www.galileocomputing.de/openbook/visual_csharp/visual_csharp_05_001.htm#Xxx999339)
MulticastDelegate (http://www.galileocomputing.de/openbook/visual_csharp/visual_csharp_07_004.htm#Xxxobkap07004040018431f0401e5)

/edit: Noch ein Nachtrag zu MulticastDelegaten: Sie verwalten letztendlich eine Liste von Methoden, die bei Aufruf von Invoke nacheinander abgearbeitet werden. Wenn der Delegat einen Rückgabewert besitzt, wird das Ergebnis der zuletzt aufgerufenen Methode zurückgegeben. Bei MulticastDelegaten mit Rückgabewert (kommt extrem selten vor), bietet es sich daher an, die Abarbeitung der Liste mit aufzurufenden Methoden / Delegaten selber zu übernehmen. Die Methode Delegate.GetInvocationList() macht das möglich.

gr@fz@hL
2007-09-24, 22:54:44
Das Galileo Openbook erklärt es schon sehr gut, aber hier ist noch einen Tick anschaulicher:
http://www.guidetocsharp.de/home/index.html?http%3A//www.guidetocsharp.de/referenz/delegate.html

Gast
2007-09-25, 08:30:17
Dann lag ich doch mit meiner Beschreibung nicht ganz falsch oder?
Was bringt mir sonst ein Delegate, wenn nicht die Möglichkeit die Funktionen überall aufzurufen. Ich hätte bei dem Beispiel aus guite To C# auch einfach die Funktionen aufrufen können, ohne sie vorher in ein Delegate zu packen.
Mir leuchtet der Gebrauch also nicht ganz ein.

MuLuNGuS
2007-09-25, 08:34:47
du solltest dir gleich auch noch die "events" ansehen, werden die doch durch "delegates" gekapselt..

gr@fz@hL
2007-09-25, 09:40:01
Deine Beschreibung ist schon ok, allerdings ist der Delegat keine Sammlung von Methoden, soner ein Objekt, dass auf eine Methode verweist.

Am häufigsten werden dir Delegate in Form von Events unterkommen: So kann man sich leichtaus einer anderen Klasse heraus an das Event einer Klasse anhängen. Eine besondere Form davon sind übrigens die EventHandler, die dir ja alle Nase lange über den Weg laufen.

Außerdem kann man Delegate z.B. dafür verwenden, mehrere Methoden aufzurufen (wichtig bei asynchronen Vorgängen), oder du hast ein eine mathematisceh Methode, die z.B. Daten sortieren soll; du weißt aber nicht vorher, wie viele Daten du eigentlich hast.