Delen via


Instructie voor gemachtigden

Wordt gebruikt om een gemachtigde te declareren. Een gemachtigde is een verwijzingstype dat verwijst naar een methode van een Shared type of naar een instantiemethode van een object. Elke procedure met overeenkomende parameter en retourtypen kan worden gebruikt om een exemplaar van deze gemachtigde klasse te maken. De procedure kan vervolgens later worden aangeroepen door middel van het gemachtigde exemplaar.

Syntaxis

[ <attrlist> ] [ accessmodifier ] _  
[ Shadows ] Delegate [ Sub | Function ] name [( Of typeparamlist )] [([ parameterlist ])] [ As type ]  

generator

Term Definitie
attrlist Optioneel. Lijst met kenmerken die van toepassing zijn op deze gemachtigde. Meerdere kenmerken worden gescheiden door komma's. U moet de lijst met kenmerken tussen punthaken (<'' en '>' ) insluiten.
accessmodifier Optioneel. Hiermee geeft u op welke code toegang heeft tot de gemachtigde. Dit kan een van de volgende zijn:

- Openbaar. Elke code die toegang heeft tot het element dat de gedelegeerde declareert, heeft er toegang toe.
- Beveiligd. Alleen code binnen de klasse van de gemachtigde of een afgeleide klasse heeft er toegang toe.
- Vriend. Alleen code binnen dezelfde assembly heeft toegang tot de gemachtigde.
- Privé. Alleen code binnen het element dat de gemachtigde declareert, heeft er toegang toe.

- Alleen beveiligde vriend-code binnen de klasse van de gemachtigde, een afgeleide klasse of dezelfde assembly heeft toegang tot de gemachtigde.
- Alleen-privé-beveiligde code binnen de klasse van de gemachtigde of in een afgeleide klasse in dezelfde assembly heeft toegang tot de gemachtigde.
Shadows Optioneel. Geeft aan dat deze gemachtigde een identiek benoemd programmeerelement, of een set overbelaste elementen, opnieuw declareert en verbergt in een basisklasse. U kunt elk type gedeclareerd element schaduwen met elk ander type.

Een schaduwelement is niet beschikbaar vanuit de afgeleide klasse die het schaduwt, behalve waar het schaduwelement niet toegankelijk is. Als een Private element bijvoorbeeld een basisklasse-element schaduwt, heeft code die geen toegang heeft tot het Private element, in plaats daarvan toegang tot het basisklasse-element.
Sub Optioneel, maar Sub wel of Function moet worden weergegeven. Declareert deze procedure als een gedelegeerde Sub procedure die geen waarde retourneert.
Function Optioneel, maar Sub wel of Function moet worden weergegeven. Declareert deze procedure als een gedelegeerde Function procedure die een waarde retourneert.
name Vereist. Naam van het type gemachtigde; volgt standaard naamconventies voor variabelen.
typeparamlist Optioneel. Lijst met typeparameters voor deze gemachtigde. Parameters van meerdere typen worden gescheiden door komma's. Optioneel kan elke typeparameter worden gedeclareerd met behulp van In en Out algemene modifiers. U moet de lijst met typen tussen haakjes insluiten en deze introduceren met het Of trefwoord.
parameterlist Optioneel. Lijst met parameters die worden doorgegeven aan de procedure wanneer deze wordt aangeroepen. U moet de lijst met parameters tussen haakjes insluiten.
type Vereist als u een Function procedure opgeeft. Gegevenstype van de retourwaarde.

Opmerkingen

De Delegate instructie definieert de parameter en retourtypen van een gemachtigde klasse. Elke procedure met overeenkomende parameters en retourtypen kan worden gebruikt om een exemplaar van deze gemachtigde klasse te maken. De procedure kan vervolgens later worden aangeroepen door middel van het gemachtigde exemplaar door de methode van Invoke de gemachtigde aan te roepen.

Gemachtigden kunnen worden gedeclareerd op het niveau van de naamruimte, module, klasse of structuur, maar niet binnen een procedure.

Elke gemachtigde klasse definieert een constructor die wordt doorgegeven aan de specificatie van een objectmethode. Een argument voor een gedelegeerde constructor moet een verwijzing naar een methode of een lambda-expressie zijn.

Als u een verwijzing naar een methode wilt opgeven, gebruikt u de volgende syntaxis:

AddressOf [expression.]methodname

Het type compileertijd van de expression klasse moet de naam zijn van een klasse of een interface die een methode bevat van de opgegeven naam waarvan de handtekening overeenkomt met de handtekening van de gemachtigde klasse. Dit methodname kan een gedeelde methode of een exemplaarmethode zijn. Dit methodname is niet optioneel, zelfs niet als u een gemachtigde maakt voor de standaardmethode van de klasse.

Gebruik de volgende syntaxis om een lambda-expressie op te geven:

Function ([parm As type, parm2 As type2, ...]) expression

De handtekening van de functie moet overeenkomen met die van het type gemachtigde. Zie Lambda-expressies voor meer informatie over lambda-expressies.

Zie Gemachtigden voor meer informatie over gemachtigden.

Opmerking

In het volgende voorbeeld wordt de Delegate instructie gebruikt om een gemachtigde te declareren voor gebruik op twee getallen en het retourneren van een getal. De DelegateTest methode neemt een instantie van een gemachtigde van dit type en gebruikt deze om te werken op paren getallen.

Delegate Function MathOperator( 
    ByVal x As Double, 
    ByVal y As Double 
) As Double

Function AddNumbers( 
    ByVal x As Double, 
    ByVal y As Double 
) As Double
    Return x + y
End Function

Function SubtractNumbers( 
    ByVal x As Double, 
    ByVal y As Double
) As Double
    Return x - y
End Function

Sub DelegateTest( 
    ByVal x As Double, 
    ByVal op As MathOperator, 
    ByVal y As Double 
)
    Dim ret As Double
    ret = op.Invoke(x, y) ' Call the method.
    MsgBox(ret)
End Sub

Protected Sub Test()
    DelegateTest(5, AddressOf AddNumbers, 3)
    DelegateTest(9, AddressOf SubtractNumbers, 3)
End Sub

Zie ook