Permalänk

[C#] Poäng med Delegates?

Delegates i C# är som jag förstått det ett objekt som "pekar" mot en funktion.

1) Vad är eg. poängen med delegater? Är det inte bara att använda funktionerna istället?

När man skapar grundkoden för ett DX-projekt så får man fram ett par event-handlers.

device.DeviceLost += new EventHandler(this.InvalidateDeviceObjects);
etc.

2) Varför finns ett plustecken med i operatorn eg?

Visa signatur

Bro!

Permalänk
Medlem

1) .. Samma anledning till att funktionspekare finns i C/C++ kanske?
Blir både snyggare och bättre att använda funktionspekare i C/C++, än att använda en if-sats eller switch-sats. Programmerar inte i C#, men det bör vara samma anledning där. (en av anledningarna iallafall)

I Vissa fall måste man använda funktionspekare, t.ex. när man använder exporterade funktioner ifrån en dll. Bör vara något liknande i C# också.

Visa signatur

Intel Core i7-3770K | NVIDIA Geforce GTX 980 | 16 GB DDR3 | DELL P2415Q | DELL U2711 | DELL U2410

Permalänk
Medlem

2) För att en delegate kan peka till fler än en funktion.
http://www.codeproject.com/managedcpp/csdeleg01.asp

Permalänk
Medlem

Hmm kan bara säga att alla evenhandlers är "registrerade" hos en delegate, sedan när en event går av, så anropas delegaten som anropar alla eventhandlers som är registrerade hos den...

Utan dem så skulla inte C# fungera något vidare alls.

Sedan är det klart lättare att att skjutsa iväg information rakt dit den ska, istället för att först köra igenom en switch statement. Använde delegates just för detta syfte själv, några min sedan.

Första bästa länk från google:
http://www.programmersheaven.com/articles/faisal/events.htm

Permalänk

Fördelar:

1) Delegater (dvs. funktioner) kan skickas som funktionsparametrar.

2) En delegat kan trigga flera funktioner.

Vad jag inte förstår är följande:

a) (ref. till punkt 2) Anropas alla funktioner i en multi-cast delegat? Så när en eventhandler triggas så anropas alla funktionerna inom den delegat som registrerat eventhandlern?

b) Är delegater globala? Det står längst ned i artikeln som Idolon länkade till att delegater "inte bryr sig om vilka klasser vars funktioner de pekar till" (typ). Betyder det att en delegat som är skapad i Class_1 kan anropas i Class_2 utan att "adressera" den med "Class_1.minDelegat()", dvs. bara "minDelegat()" ?

Visa signatur

Bro!