Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Deklaruje název, parametry a kód, které definují proceduru Sub .
Syntaxe
[ <attributelist> ] [ Partial ] [ accessmodifier ] [ proceduremodifiers ] [ Shared ] [ Shadows ] [ Async ]
Sub name [ (Of typeparamlist) ] [ (parameterlist) ] [ Implements implementslist | Handles eventlist ]
[ statements ]
[ Exit Sub ]
[ statements ]
End Sub
Součástky
attributelistNepovinné. Viz seznam atributů.
PartialNepovinné. Označuje definici částečné metody. Viz částečné metody.
accessmodifierNepovinné. Může to být jedna z následujících možností:
proceduremodifiersNepovinné. Může to být jedna z následujících možností:
MustOverride OverridesNotOverridable Overrides
SharedNepovinné. Viz Sdílené.
ShadowsNepovinné. Podívejte se na stíny.
AsyncNepovinné. Viz Async.
namePovinný: Název postupu. Viz Deklarované názvy elementů. Chcete-li vytvořit proceduru konstruktoru pro třídu, nastavte název
Subprocedury naNewklíčové slovo. Další informace naleznete v tématu Životnost objektu: Způsob vytváření a zničení objektů.typeparamlistNepovinné. Seznam parametrů typu pro obecný postup Viz seznam typů.
parameterlistNepovinné. Seznam názvů místních proměnných představujících parametry tohoto postupu Viz seznam parametrů.
ImplementsNepovinné. Označuje, že tento postup implementuje jeden nebo více
Subprocedur, každý z nich definovaný v rozhraní implementovaném tímto postupem obsahující třídu nebo strukturu. Viz Implements – příkaz.implementslistPožadováno, pokud
Implementsje zadáno.SubSeznam implementovaných postupůimplementedprocedure [ , implementedprocedure ... ]Každá z nich
implementedproceduremá následující syntaxi a části:interface.definednameČást Popis interfacePovinný: Název rozhraní implementovaného tímto postupem obsahující třídu nebo strukturu. definednamePovinný: Název, kterým je procedura definována v interface.HandlesNepovinné. Označuje, že tento postup může zpracovat jednu nebo více konkrétních událostí. Viz popisovače.
eventlistPožadováno, pokud
Handlesje zadáno. Seznam událostí, které tento postup zpracováváeventspecifier [ , eventspecifier ... ]Každá z nich
eventspecifiermá následující syntaxi a části:eventvariable.eventČást Popis eventvariablePovinný: Proměnná objektu deklarovaná s datovým typem třídy nebo struktury, která vyvolá událost. eventPovinný: Název události, která tento postup zpracovává. statementsNepovinné. Blok příkazů, které se mají spustit v rámci tohoto postupu
End SubUkončí definici tohoto postupu.
Poznámky
Veškerý spustitelný kód musí být uvnitř procedury.
Sub Pokud nechcete vrátit hodnotu volajícímu kódu, použijte postup.
Function Pokud chcete vrátit hodnotu, použijte postup.
Definování dílčí procedury
Proceduru Sub můžete definovat pouze na úrovni modulu. Kontext deklarace pro dílčí proceduru proto musí být třída, struktura, modul nebo rozhraní a nemůže být zdrojovým souborem, oborem názvů, postupem nebo blokem. Další informace naleznete v tématu Kontexty deklarace a výchozí úrovně přístupu.
Sub výchozí nastavení pro veřejný přístup. Úrovně přístupu můžete upravit pomocí modifikátorů přístupu.
Pokud procedura Implements používá klíčové slovo, obsahující třída nebo struktura musí mít Implements příkaz, který bezprostředně následuje za jeho Class nebo Structure příkazem. Příkaz Implements musí obsahovat každé rozhraní, které je zadáno v implementslist. Název, kterým rozhraní definuje Sub (v definedname) však nemusí odpovídat názvu tohoto postupu (v name).
Vrácení z dílčí procedury
Když se procedura Sub vrátí do volajícího kódu, provádění pokračuje příkazem za příkazem, který ho nazval.
Následující příklad ukazuje návrat z Sub procedury.
Sub mySub(ByVal q As String)
Return
End Sub
Příkazy Exit Sub a Return příkazy způsobují okamžité ukončení Sub procedury. Libovolný počet Exit Sub příkazů a Return příkazů se může objevit kdekoli v postupu a můžete kombinovat Exit Sub a Return příkazy.
Volání dílčí procedury
Proceduru Sub zavoláte pomocí názvu procedury v příkazu a potom za tímto názvem se seznamem argumentů v závorkách. Závorky můžete vynechat jenom v případě, že nezadáte žádné argumenty. Kód je ale čitelnější, pokud vždy zahrnete závorky.
Procedura Sub a procedura Function mohou mít parametry a provádět řadu příkazů. Procedura Function ale vrátí hodnotu a procedura Sub ne. Proto ve výrazu nemůžete použít proceduru Sub .
Klíčové slovo můžete použít Call při volání Sub procedury, ale toto klíčové slovo se nedoporučuje pro většinu použití. Další informace najdete v tématu Příkaz volání.
Visual Basic někdy mění uspořádání aritmetických výrazů, aby se zvýšila interní efektivita. Z tohoto důvodu pokud seznam argumentů obsahuje výrazy, které volají jiné procedury, neměli byste předpokládat, že se tyto výrazy budou volat v určitém pořadí.
Asynchronní dílčí procedury
Pomocí funkce Async můžete vyvolat asynchronní funkce bez použití explicitních zpětných volání nebo ručního rozdělení kódu mezi několik funkcí nebo výrazů lambda.
Pokud označíte proceduru modifikátorem Async , můžete v postupu použít operátor Await . Když ovládací prvek dosáhne Await výrazu Async v postupu, ovládací prvek se vrátí volajícímu a průběh v postupu se pozastaví, dokud neskončí očekávaný úkol. Po dokončení úkolu může provádění pokračovat v postupu.
Poznámka:
Procedura Async se vrátí volajícímu, pokud je nalezen buď první očekávaný objekt, který ještě není dokončený, nebo je dosaženo konce Async procedury podle toho, co nastane dříve.
Příkaz funkce můžete také označit modifikátoremAsync. Funkce Async může mít návratový Task<TResult> typ nebo Task. Příklad dále v tomto tématu ukazuje Async funkci, která má návratový Task<TResult>typ .
Async
Sub procedury se primárně používají pro obslužné rutiny událostí, kde nelze vrátit hodnotu. Proceduru AsyncSub nelze očekávat a volající AsyncSub procedury nemůže zachytit výjimky, které procedura Sub vyvolá.
Procedura Async nemůže deklarovat žádné parametry ByRef .
Další informace o procedurách naleznete v Async tématu Asynchronní programování pomocí Async a Await, Řízení toku v asynchronních programech a asynchronní návratové typy.
Příklad 1
Následující příklad používá příkaz Sub k definování názvu, parametrů a kódu, který tvoří tělo Sub procedury.
Sub ComputeArea(ByVal length As Double, ByVal width As Double)
' Declare local variable.
Dim area As Double
If length = 0 Or width = 0 Then
' If either argument = 0 then exit Sub immediately.
Exit Sub
End If
' Calculate area of rectangle.
area = length * width
' Print area to Immediate window.
Debug.WriteLine(area)
End Sub
Příklad 2
V následujícím příkladu je DelayAsyncAsync, Function který má návratový Task<TResult>typ .
DelayAsync
Return obsahuje příkaz, který vrací celé číslo. Deklarace funkce DelayAsync proto musí mít návratový Task(Of Integer)typ . Vzhledem k tomu, že návratový typ je Task(Of Integer), vyhodnocení výrazu Await v DoSomethingAsync vytvoří celé číslo, jak ukazuje následující příkaz: Dim result As Integer = Await delayTask.
Tento startButton_Click postup je příkladem Async Sub procedury. Protože DoSomethingAsync je Async funkce, úkol volání DoSomethingAsync musí být očekávána, jak ukazuje následující příkaz: Await DoSomethingAsync(). Procedura startButton_ClickSub musí být definována modifikátorem Async , protože má Await výraz.
' Imports System.Diagnostics
' Imports System.Threading.Tasks
' This Click event is marked with the Async modifier.
Private Async Sub startButton_Click(sender As Object, e As RoutedEventArgs) Handles startButton.Click
Await DoSomethingAsync()
End Sub
Private Async Function DoSomethingAsync() As Task
Dim delayTask As Task(Of Integer) = DelayAsync()
Dim result As Integer = Await delayTask
' The previous two statements may be combined into
' the following statement.
' Dim result As Integer = Await DelayAsync()
Debug.WriteLine("Result: " & result)
End Function
Private Async Function DelayAsync() As Task(Of Integer)
Await Task.Delay(100)
Return 5
End Function
' Output:
' Result: 5