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

Viz také