Gemachtigden (C#-programmeerhandleiding)
Een gemachtigde is een type dat verwijst naar methoden met een bepaalde parameterlijst en het retourtype. Wanneer u een gemachtigde instantiëren, kunt u het exemplaar koppelen aan elke methode met een compatibele handtekening en het retourtype. U kunt de methode aanroepen (of aanroepen) via het gemachtigde exemplaar.
Gemachtigden worden gebruikt om methoden als argumenten door te geven aan andere methoden. Gebeurtenis-handlers zijn niet meer dan methoden die worden aangeroepen via gemachtigden. U maakt een aangepaste methode en een klasse zoals een windows-besturingselement kan uw methode aanroepen wanneer een bepaalde gebeurtenis plaatsvindt. In het volgende voorbeeld ziet u een gedelegeerdedeclaratie:
public delegate int PerformCalculation(int x, int y);
Elke methode van elke toegankelijke klasse of struct die overeenkomt met het type gemachtigde kan worden toegewezen aan de gemachtigde. De methode kan statisch of een instantiemethode zijn. Deze flexibiliteit betekent dat u programmatisch methode-aanroepen kunt wijzigen of nieuwe code kunt toevoegen aan bestaande klassen.
Notitie
In de context van overbelasting van de methode bevat de handtekening van een methode niet de retourwaarde. Maar in de context van gemachtigden bevat de handtekening wel de retourwaarde. Met andere woorden, een methode moet hetzelfde retourtype hebben als de gemachtigde.
Deze mogelijkheid om te verwijzen naar een methode als parameter maakt gemachtigden ideaal voor het definiëren van callback-methoden. U kunt een methode schrijven waarmee twee objecten in uw toepassing worden vergeleken. Deze methode kan worden gebruikt in een gemachtigde voor een sorteeralgoritmen. Omdat de vergelijkingscode losstaat van de bibliotheek, kan de sorteermethode algemener zijn.
Functie-aanwijzers zijn toegevoegd aan C# 9 voor vergelijkbare scenario's, waarbij u meer controle nodig hebt over de aanroepende conventie. 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.
Overzicht van gemachtigden
Gemachtigden hebben de volgende eigenschappen:
- Gedelegeerden zijn vergelijkbaar met C++-functieaanwijzers, maar gemachtigden zijn volledig objectgeoriënteerd en in tegenstelling tot C++-aanwijzers naar lidfuncties worden gemachtigden ingekapseld zowel een objectexemplaren als een methode.
- Gemachtigden staan toe dat methoden worden doorgegeven als parameters.
- Gemachtigden kunnen worden gebruikt om callback-methoden te definiëren.
- Gemachtigden kunnen aan elkaar worden gekoppeld; Er kunnen bijvoorbeeld meerdere methoden worden aangeroepen voor één gebeurtenis.
- Methoden hoeven niet exact overeen te komen met het type gedelegeerde. Zie Afwijking in gemachtigden gebruiken voor meer informatie.
- Lambda-expressies zijn een beknoptere manier om inlinecodeblokken te schrijven. Lambda-expressies (in bepaalde contexten) worden gecompileerd om typen te delegeren. Zie Lambda-expressies voor meer informatie over lambda-expressies.
In deze sectie
- Gemachtigden gebruiken
- Wanneer gemachtigden gebruiken in plaats van interfaces (C#-programmeerhandleiding)
- Gemachtigden met benoemde versus anonieme methoden
- Afwijking gebruiken in gemachtigden
- Gemachtigden combineren (Multicast-gemachtigden)
- Een gemachtigde declareren, instantiëren en gebruiken
C#-taalspecificatie
Zie Gemachtigden in de C#-taalspecificatie voor meer informatie. De taalspecificatie is de definitieve bron voor de C#-syntaxis en het gebruik.
Aanbevolen boekhoofdstukken
- Delegates, Events, and Lambda Expressions in C# 3.0 Cookbook, Third Edition: Meer dan 250 oplossingen voor C# 3.0 programmeurs
- Gemachtigden en gebeurtenissen in Learning C# 3.0: Basisprincipes van C# 3.0