C# - delegates & events

Moderators: jkien, Xilvo

Berichten: 83

Re: C# - delegates & events

Dit is DE reden waarom veel mensen delegates niet begrijpen en met name met UML modellen in de knoei komen.

strict genomen is ALLES een klasse een int ook in C# (boxing) maar als je zo gaat denken ga je de mist in.

Een delegate is een functiepointer.. of anders een delegatie is een vertegewoordiging .. een delegate vertegenwoordigd een functie.

Gebruikersavatar
Berichten: 829

Re: C# - delegates & events

Het feit dat delegates niet alleen functiepointers zijn maar ook nog een groot aantal methodes hebben (http://msdn.microsoft.com/en-us/library ... mbers.aspx) bewijst het tegendeel, een delegate is een klasse die een inheritance is van System.Delegate, in de klasse zelf bevindt zich een NATIVE pointer (daar dat alles toch ooit eens native moet worden). En uiteraard ook nog andere velden. Maar een delegate zelf is dus een klasse, het concept delegate is een functiepointer.
"Als je niet leeft zoals je denkt, zul je snel gaan denken zoals je leeft."

--Vladimir Lenin-- (Владимир Ильич Ульянов)

Gebruikersavatar
Berichten: 187

Re: C# - delegates & events

Ik snap er nog steeds niet veel van.

Gebruikersavatar
Berichten: 187

Re: C# - delegates & events

Dus ik kan in mijn klasse een event maken, en dan mijn form laten abboneren op dat event. En vervolgens kan ik vanuit een methode op het form dat event aanroepen?

Gebruikersavatar
Berichten: 829

Re: C# - delegates & events

Een delegate is een wijzer naar een functie, maar ook een klasse maar die discussie doet hier eigenlijk niet veel terzake. Een event zou je kunnen zien als een lijst van delegates, op het moment dat er iets aan de toestand van een object dat het belangrijk genoeg vindt om aan eventueel geïntresseerde objecten te laten weten zal hij het event oproepen, de event zal vervolgens alle delegates in zn lijst nagaan, en elke delegate oproepen, deze zullen dus vervolgens de functie die aan hun gelinkt is oproepen.

Een concreet voorbeeld, je maakt een form om bijvoorbeeld een contactpersoon toe te voegen, in dat form plaats je een Button waarop de gebruiker klikt wanneer hij gereed is, dan zou je in de implementatie van bijvoorbeeld de klasse Persoon (een object die je dus al gecriëerd hebt en waarvan je de naam, geboortedatum,... wil checken) dat natuurlijk graag weten, want het moet dan de informatie aanpassen, je kan dus een methode van de klasse persoon zeg maar de methode SetInformationWithInformationFromForm als Listener kunnen zien, je voegt deze toe aan de Click-event van de Button. Op het moment dat de gebruiker op de knop klikt zal de klasse Button het Click-Event activeren, de methode SetInformationWithInformationFromForm staat op de lijst, en zal dus opgeroepen worden, dat is ongeveer het principe.
"Als je niet leeft zoals je denkt, zul je snel gaan denken zoals je leeft."

--Vladimir Lenin-- (Владимир Ильич Ульянов)

Reageer