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