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