Inleiding tot gemachtigden en gebeurtenissen in C#

Gemachtigden 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.

Functiepointers ondersteunen vergelijkbare scenario's, 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 functie die uiteindelijk gedelegeerden werden.

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 is het team dat een gebeurtenispatroon heeft herkend, één specifiek patroon waarbij gedelegeerden, of een laat bindingsalgoritmen, nuttig 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 gedelegeerde en gebeurtenisondersteuning in C# en .NET.

De overige artikelen in deze reeks hebben betrekking op taalfuncties, bibliotheekondersteuning en algemene idioten die worden gebruikt wanneer u met gemachtigden en gebeurtenissen 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.
  • Typen veilige gemachtigden maken.
  • 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 aan de slag gaan.

Volgende