Dela via


Ombudsuttryck

Används för att deklarera ett ombud. Ett ombud är en referenstyp som refererar till en Shared metod av en typ eller till en instansmetod för ett objekt. Alla procedurer med matchande parameter- och returtyper kan användas för att skapa en instans av den här ombudsklassen. Proceduren kan sedan anropas senare med hjälp av ombudsinstansen.

Syntax

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

Delar

Period Definition
attrlist Valfritt. Lista över attribut som gäller för det här ombudet. Flera attribut avgränsas med kommatecken. Du måste omsluta attributlistan i vinkelparenteser ("<" och ">").
accessmodifier Valfritt. Anger vilken kod som kan komma åt ombudet. Kan vara något av följande:

- Offentlig. All kod som kan komma åt elementet som deklarerar ombudet kan komma åt det.
- Skyddad. Endast kod i ombudets klass eller en härledd klass kan komma åt den.
- Vän. Endast kod inom samma sammansättning kan komma åt ombudet.
- Privat. Endast kod i elementet som deklarerar ombudet kan komma åt det.

- Skyddad endast vänkod i ombudets klass, en härledd klass eller samma sammansättning kan komma åt ombudet.
- Private Protected Only-kod i ombudets klass eller i en härledd klass i samma sammansättning kan komma åt ombudet.
Shadows Valfritt. Anger att det här ombudet redeclares och döljer ett identiskt namngivet programmeringselement, eller en uppsättning överlagrade element, i en basklass. Du kan skugga alla typer av deklarerade element med någon annan typ.

Ett skuggat element är inte tillgängligt från den härledda klassen som skuggar det, förutom där skuggelementet inte är tillgängligt. Om ett Private element till exempel skuggar ett basklasselement, kommer kod som inte har behörighet att komma åt elementet Private att komma åt basklasselementet i stället.
Sub Valfritt, men antingen Sub eller Function måste visas. Deklarerar den här proceduren som en ombudsprocedur Sub som inte returnerar ett värde.
Function Valfritt, men antingen Sub eller Function måste visas. Deklarerar den här proceduren som en ombudsprocedur Function som returnerar ett värde.
name Obligatoriska. Namn på ombudstyp; följer namngivningskonventionerna för standardvariabler.
typeparamlist Valfritt. Lista över typparametrar för det här ombudet. Flera typparametrar avgränsas med kommatecken. Alternativt kan varje typparameter deklareras som variant med hjälp In av och Out allmänna modifierare. Du måste omsluta typlistan inom parenteser och introducera den med nyckelordet Of .
parameterlist Valfritt. Lista över parametrar som skickas till proceduren när den anropas. Du måste omsluta parameterlistan inom parenteser.
type Krävs om du anger en Function procedur. Datatyp för returvärdet.

Kommentarer

- Delegate instruktionen definierar parametern och returtyperna för en ombudsklass. Alla procedurer med matchande parametrar och returtyper kan användas för att skapa en instans av den här ombudsklassen. Proceduren kan sedan anropas senare med hjälp av ombudsinstansen genom att anropa ombudets Invoke metod.

Ombud kan deklareras på namnrymds-, modul-, klass- eller strukturnivå, men inte inom en procedur.

Varje ombudsklass definierar en konstruktor som skickas specifikationen för en objektmetod. Ett argument till en ombudskonstruktor måste vara en referens till en metod eller ett lambda-uttryck.

Om du vill ange en referens till en metod använder du följande syntax:

AddressOf [expression.]methodname

Kompileringstidstypen expression för måste vara namnet på en klass eller ett gränssnitt som innehåller en metod för det angivna namnet vars signatur matchar signaturen för ombudsklassen. methodname Kan vara antingen en delad metod eller en instansmetod. methodname är inte valfritt, även om du skapar ett ombud för standardmetoden för klassen.

Om du vill ange ett lambda-uttryck använder du följande syntax:

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

Funktionens signatur måste matcha den för ombudstypen. Mer information om lambda-uttryck finns i Lambda-uttryck.

Mer information om ombud finns i Ombud.

Exempel

I följande exempel används -instruktionen Delegate för att deklarera ett ombud för att arbeta med två tal och returnera ett tal. Metoden DelegateTest tar en instans av en delegat av den här typen och använder den för att arbeta med par med tal.

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

Se även