Delegate – příkaz
Slouží k deklaraci delegáta. Delegát je odkazový typ, který odkazuje na metodu typu nebo na metodu instance Shared objektu. K vytvoření instance této třídy delegátu lze použít jakoukoli proceduru s odpovídajícími parametry a návratové typy. Proceduru lze později vyvolat pomocí instance delegátu.
Syntax
[ <attrlist> ] [ accessmodifier ] _
[ Shadows ] Delegate [ Sub | Function ] name [( Of typeparamlist )] [([ parameterlist ])] [ As type ]
Součásti
| Pojem | Definice |
|---|---|
attrlist |
Nepovinný parametr. Seznam atributů, které se vztahují na tohoto delegáta. Více atributů je odděleno čárkami. Seznam atributů musíte uzavřít do hranatých závorek (" < " a " > "). |
accessmodifier |
Nepovinný parametr. Určuje, jaký kód má přístup k delegátovi. Může to být jedna z následujících možností: - Veřejná . Jakýkoli kód, který má přístup k elementu, který deklaruje delegáta, k ní může přistupovat. - Chráněno: Přístup k ní má pouze kód v rámci třídy delegáta nebo odvozené třídy. - Friend (Přítel) K delegátovi může přistupovat pouze kód v rámci stejného sestavení. - Privátní . Přístup k ní může získat pouze kód uvnitř elementu , který deklaruje delegáta. - Protected Friend Přístup k delegátu má pouze kód v rámci třídy delegáta, odvozené třídy nebo stejného sestavení. - Private Protected Pouze kód v rámci třídy delegáta nebo v odvozené třídě ve stejném sestavení může přistupovat k delegátu. |
Shadows |
Nepovinný parametr. Označuje, že tento delegát znovu deklaruje a skryje identicky pojmenovaný programovací prvek nebo sadu přetížených prvků v základní třídě. Jakýkoli druh deklarovaného elementu lze stínovat s libovolným jiným druhem. Stínový prvek není dostupný v rámci odvozené třídy, která jej stínuje, s výjimkou případů, kdy je prvek stínování nedostupný. Pokud například element stíní prvek základní třídy, kód, který nemá oprávnění pro přístup k prvku, místo toho přistupuje k Private Private elementu základní třídy. |
Sub |
Volitelné, ale musí Sub se zobrazit nebo Function . Deklaruje tento postup jako Sub proceduru delegáta, která nevrací hodnotu. |
Function |
Volitelné, ale musí Sub se zobrazit nebo Function . Deklaruje tento postup jako Function proceduru delegáta, která vrací hodnotu. |
name |
Povinná hodnota. Název typu delegátu dodržuje standardní zásady vytváření názvů proměnných. |
typeparamlist |
Nepovinný parametr. Seznam parametrů typu pro tohoto delegáta Více parametrů typu je odděleno čárkami. Volitelně lze každý parametr typu deklarovat jako variantu pomocí In obecných Out modifikátorů a . Seznam typů musíte uzavřít do závorek a zadat ho klíčovým Of slovem . |
parameterlist |
Nepovinný parametr. Seznam parametrů, které jsou předány proceduře při jeho volání. Seznam parametrů musíte uzavřít do závorek. |
type |
Vyžaduje se, pokud zadáte Function proceduru. Datový typ návratové hodnoty. |
Poznámky
Příkaz Delegate definuje parametr a návratové typy třídy delegátu. K vytvoření instance této třídy delegátu lze použít jakoukoli proceduru s odpovídajícími parametry a návratové typy. Proceduru lze později vyvolat pomocí instance delegátu voláním metody Invoke delegáta.
Delegáty lze deklarovat na úrovni oboru názvů, modulu, třídy nebo struktury, ale ne v rámci procedury.
Každá třída delegátu definuje konstruktor, který je předán specifikaci metody objektu. Argumentem konstruktoru delegáta musí být odkaz na metodu nebo výraz lambda.
Pokud chcete zadat odkaz na metodu, použijte následující syntaxi:
AddressOf [expression.]methodname
Typ kompilace musí být název třídy nebo rozhraní, které obsahuje metodu zadaného názvu, jejíž podpis odpovídá podpisu expression třídy delegáta. může methodname být buď sdílená metoda, nebo metoda instance. Není methodname volitelný, i když vytvoříte delegáta pro výchozí metodu třídy.
Pokud chcete zadat výraz lambda, použijte následující syntaxi:
Function ([ parm As , As , type parm2 type2 ...]) expression
Podpis funkce se musí shodovat s podpisem typu delegátu. Další informace o výrazech lambda najdete v tématu Výrazy lambda.
Další informace o delegátech najdete v tématu Delegáti.
Příklad
Následující příklad používá příkaz k deklaraci delegáta pro provoz na dvou číslech Delegate a vrácení čísla. Metoda přebírá instanci delegáta tohoto typu a používá ji k provozu s DelegateTest páry čísel.
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