Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Delegees bieden een mechanisme voor late binding in .NET. Late binding betekent dat u een algoritme maakt waarbij de aanroeper ook ten minste één methode levert waarmee een deel van het algoritme wordt geïmplementeerd.
U kunt bijvoorbeeld een lijst met sterren sorteren in een astronomietoepassing. U kunt ervoor kiezen om die sterren te sorteren op hun afstand van de aarde, of de grootte van de ster, of hun waargenomen helderheid.
In al die gevallen doet de methode Sort() in feite hetzelfde: rangschikt de items in de lijst op basis van een vergelijking. De code die twee sterren vergelijkt, verschilt voor elk van de sorteervolgordes.
Dit soort oplossingen zijn al een halve eeuw in software gebruikt. Het concept C#-taaldelegatie biedt eersteklas taalondersteuning en typeveiligheid rond het concept.
Zoals u verderop in deze reeks ziet, is de C#-code die u schrijft voor algoritmen zoals dit type veilig. De compiler zorgt ervoor dat de typen overeenkomen met argumenten en retourtypen.
Functie-aanwijzers vergelijkbare scenario's ondersteunen, waarbij u meer controle over de oproepconventie nodig hebt. De code die aan een gemachtigde is gekoppeld, wordt aangeroepen met behulp van een virtuele methode die is toegevoegd aan een gemachtigdentype. Met functiewijzers kunt u verschillende conventies opgeven.
Doelstellingen voor taalontwerp voor gemachtigden
De taalontwerpers hebben verschillende doelen opgesomd voor de eigenschap die uiteindelijk 'delegates' werd.
Het team wilde een algemene taalconstructie die kan worden gebruikt voor late bindingalgoritmen. Gedelegeerden stellen ontwikkelaars in staat om één concept te leren en hetzelfde concept te gebruiken voor veel verschillende softwareproblemen.
Ten tweede wilde het team zowel single- als multicast-methode-aanroepen ondersteunen. (Multicast-gemachtigden zijn gemachtigden die meerdere methode-aanroepen aan elkaar koppelen. Verderop in deze reeks ziet u voorbeelden.)
Het team wilde gemachtigden ondersteuning bieden voor dezelfde typeveiligheid die ontwikkelaars verwachten van alle C#-constructies.
Ten slotte erkende het team dat een gebeurtenispatroon één specifiek patroon is waarbij gedelegeerden, of een laat bindingsalgoritme, effectief zijn. Het team wilde ervoor zorgen dat de code voor gemachtigden de basis kon bieden voor het .NET-gebeurtenispatroon.
Het resultaat van al dat werk was de ondersteuning van delegates en gebeurtenissen in C# en .NET.
De overige artikelen in deze reeks hebben betrekking op taalfuncties, bibliotheekondersteuning en algemene idiomen die worden gebruikt wanneer u met gemachtigden en events werkt. U krijgt meer informatie over:
- Het
delegate
trefwoord en de code die wordt gegenereerd. - De functies in de
System.Delegate
klasse en hoe deze functies worden gebruikt. - Hoe u typeveilige gedelegeerden maakt.
- Methoden maken die kunnen worden aangeroepen via gemachtigden.
- Werken met gemachtigden en gebeurtenissen met behulp van lambda-expressies.
- Hoe gemachtigden een van de bouwstenen voor LINQ worden.
- Hoe gemachtigden de basis vormen voor het .NET-gebeurtenispatroon en hoe ze verschillen.
Laten we beginnen.