Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
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
| Begrepp | 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 vän Endast kod i ombudets klass, en härledd klass eller samma sammansättning kan komma åt ombudet. - Privat skyddad Endast 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 |
Obligatoriskt. 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. |
Anmärkningar
- 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 delegatklass definierar en konstruktor som får specifikationen för en objektmetod. Ett argument till en delegatkonstruktor 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
Kompileringstypen för expression måste vara namnet på en klass eller ett gränssnitt som innehåller en metod med det angivna namnet vars signatur matchar signaturen för delegatklassen.
methodname Kan vara antingen en delad metod eller en instansmetod.
methodname är inte valfri, även om du skapar en delegering för klassens standardmetod.
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 delegattypen. 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