Delegate – příkaz

Slouží k deklaraci delegáta. Delegát je referenční typ, který odkazuje na Shared metodu typu nebo na metodu instance objektu. Jakoukoli proceduru s odpovídajícími parametry a návratovými typy lze použít k vytvoření instance této třídy delegáta. Procedura se pak může později vyvolat pomocí instance delegáta.

Syntaxe

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

Součástky

Pojem definice
attrlist Nepovinné. Seznam atributů, které platí pro tohoto delegáta Více atributů je odděleno čárkami. Seznam atributů musíte uzavřít do úhlových závorek ("<" a ">").
accessmodifier Nepovinné. Určuje, jaký kód má přístup k delegátu. 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át, k němu má přístup.
- Chráněno. Přístup k němu má pouze kód v rámci třídy delegáta nebo odvozené třídy.
- Přítel. K delegátu má přístup pouze kód ve stejném sestavení.
- Soukromé. Přístup k němu má pouze kód v rámci elementu, který deklaruje delegáta.

- Chráněný pouze kód v rámci třídy delegáta, odvozené třídy nebo stejného sestavení může přistupovat k delegátu.
- K delegátu má přístup pouze kód Private Protected Only v rámci třídy delegáta nebo v odvozené třídě ve stejném sestavení.
Shadows Nepovinné. Označuje, že tento delegát předefinuje a skryje identicky pojmenovaný programovací prvek nebo sadu přetížených prvků v základní třídě. Můžete stínovat jakýkoli druh deklarovaného prvku s jakýmkoli jiným druhem.

Stínovaný element není k dispozici v odvozené třídě, která ho stínuje, s výjimkou místa, kde je prvek stínování nepřístupný. Pokud Private například element stínuje element základní třídy, kód, který nemá oprávnění pro přístup k elementu Private , místo toho přistupuje k elementu základní třídy.
Sub Volitelné, ale Sub musí se zobrazit nebo Function musí. Deklaruje tento postup jako proceduru delegáta Sub , která nevrací hodnotu.
Function Volitelné, ale Sub musí se zobrazit nebo Function musí. Deklaruje tento postup jako proceduru delegáta Function , která vrací hodnotu.
name Povinný: Jméno typu delegáta; se řídí standardními zásadami vytváření názvů proměnných.
typeparamlist Nepovinné. Seznam parametrů typu pro tohoto delegáta Parametry více typů jsou oddělené čárkami. Volitelně lze každý parametr typu deklarovat variantu pomocí In a Out obecných modifikátorů. Seznam typů musíte uzavřít do závorek a zavést ho klíčovým slovemOf.
parameterlist Nepovinné. Seznamparametrůch Seznam parametrů musíte uzavřít do závorek.
type Vyžaduje se, pokud zadáte proceduru Function . Datový typ návratové hodnoty

Poznámky

Příkaz Delegate definuje parametr a návratové typy třídy delegáta. Jakoukoli proceduru s odpovídajícími parametry a návratovými typy lze použít k vytvoření instance této třídy delegáta. Proceduru lze později vyvolat pomocí instance delegáta voláním metody delegáta Invoke .

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áta definuje konstruktor, který je předán specifikaci metody objektu. Argument 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 expression kompilační doby musí být název třídy nebo rozhraní, které obsahuje metodu zadaného názvu, jehož podpis odpovídá podpisu třídy delegáta. Může methodname se jednat o sdílenou metodu nebo metodu instance. Není methodname nepovinný, 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 type, parm2 As type2, ...]) expression

Podpis funkce se musí shodovat s typem delegáta. 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 Delegate k deklaraci delegáta pro provoz na dvou číslech a vrácení čísla. Metoda DelegateTest přebírá instanci delegáta tohoto typu a používá ji k práci s dvojicemi čí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é