Sub – příkaz (Visual Basic)
Deklaruje název, parametry a kód definující Sub proceduru.
Syntax
[ <attributelist> ] [ Partial ] [ accessmodifier ] [ proceduremodifiers ] [ Shared ] [ Shadows ] [ Async ]
Sub name [ (Of typeparamlist) ] [ (parameterlist) ] [ Implements implementslist | Handles eventlist ]
[ statements ]
[ Exit Sub ]
[ statements ]
End Sub
Součásti
attributelistNepovinný parametr. Viz Seznam atributů.
PartialNepovinný parametr. Označuje definici částečné metody. Viz Část metody.
accessmodifierNepovinný parametr. Může to být jedna z následujících možností:
proceduremodifiersNepovinný parametr. Může to být jedna z následujících možností:
MustOverride OverridesNotOverridable Overrides
SharedNepovinný parametr. Viz Sdílené .
ShadowsNepovinný parametr. Viz Stíny.
AsyncNepovinný parametr. Viz asynchronní .
namePovinná hodnota. Název procedury. Viz Deklarované názvy elementů. Pokud chcete vytvořit proceduru konstruktoru pro třídu, nastavte název
Subprocedury na klíčovéNewslovo . Další informace najdete v tématu Životnost objektu: Vytvářenía zničení objektů .typeparamlistNepovinný parametr. Seznam parametrů typu pro obecnou proceduru Viz Seznam typů.
parameterlistNepovinný parametr. Seznam názvů místních proměnných představujících parametry tohoto postupu. Viz Seznam parametrů.
ImplementsNepovinný parametr. Označuje, že tento postup implementuje jeden nebo více procedur, z nichž každá je definována v rozhraní implementované třídou nebo strukturou
Subtéto procedury. Viz Implements – příkaz.implementslistVyžaduje se,
Implementspokud je zadaný. SeznamSubimplementované procedury.implementedprocedure [ , implementedprocedure ... ]Každá z nich má následující syntaxi a
implementedprocedurečásti:interface.definednameČást Popis interfacePovinná hodnota. Název rozhraní implementované tímto postupem obsahující třídu nebo strukturu. definednamePovinná hodnota. Název, podle kterého je procedura definována v interface.HandlesNepovinný parametr. Označuje, že tento postup může zpracovávat jednu nebo více konkrétních událostí. Viz Popisovače.
eventlistVyžaduje se,
Handlespokud je zadaný. Seznam událostí, které tento postup zpracovává.eventspecifier [ , eventspecifier ... ]Každá z nich má následující syntaxi a
eventspecifierčásti:eventvariable.eventČást Popis eventvariablePovinná hodnota. Objektová proměnná deklarovaná s datovým typem třídy nebo struktury, která vyvolává událost. eventPovinná hodnota. Název události, která tento postup zpracovává. statementsNepovinný parametr. Blok příkazů, které se spustí v rámci tohoto postupu.
End SubUkončí definici tohoto postupu.
Poznámky
Veškerý spustitelný kód musí být uvnitř procedury. Pokud nechcete vracet hodnotu do volajícího kódu, použijte Sub proceduru. Pokud Function chcete vrátit hodnotu, použijte proceduru.
Definování dílčí procedury
Proceduru můžete Sub 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ů, procedurou nebo blokem. Další informace najdete v tématu Kontexty deklarace a Výchozí úrovně přístupu.
Sub Procedury ve výchozím nastavení mají veřejný přístup. Jejich úrovně přístupu můžete upravit pomocí modifikátorů přístupu.
Pokud procedura používá klíčové slovo , musí obsahovat obsahující třídu nebo strukturu příkaz, který bezprostředně Implements Implements následuje za svým Class příkazem nebo Structure . Příkaz Implements musí obsahovat každé rozhraní, které je zadáno v implementslist . Název, podle kterého rozhraní definuje (v souboru ), se ale nemusí shodovat s názvem tohoto postupu Sub definedname (v souboru name ).
Vrácení z dílčí procedury
Když se Sub procedura vrátí do volajícího kódu, provádění pokračuje s příkazem za příkazem , který ho volal.
Následující příklad ukazuje návrat z Sub procedury.
Sub mySub(ByVal q As String)
Return
End Sub
Příkazy Exit Sub Return a způsobí okamžitý ukončení Sub procedury. Libovolný počet příkazů Exit Sub a se může objevit kdekoli v postupu a můžete Return kombinovat příkazy Exit Sub a Return .
Volání dílčí procedury
Proceduru zavoláte pomocí názvu procedury v příkazu a potom za tímto názvem v seznamu Sub argumentů v závorkách. Závorky můžete vynechat pouze v případě, že nezadáte žádné argumenty. Pokud ale vždy zahrníte závorky, bude váš kód čitelný.
Procedura Sub a Function procedura mohou mít parametry a provádět řadu příkazů. Procedura Function však vrátí hodnotu a Sub procedura ne. Proto nemůžete ve výrazu Sub použít proceduru.
Klíčové slovo můžete Call použít při volání procedury, ale toto klíčové slovo se nedoporučuje Sub pro většinu použití. Další informace najdete v tématu Call – příkaz.
Visual Basic někdy změní uspořádání aritmetických výrazů, aby se zvýšila interní efektivita. Proto 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í procedury Sub
Pomocí asynchronní funkce můžete vyvolat asynchronní funkce bez použití explicitního zpětného volání nebo ruční rozdělení kódu napříč více funkcemi nebo lambda výrazy.
Pokud označíte proceduru modifikátorem Async , můžete použít operátor await v proceduře. Když ovládací prvek dosáhne Await výrazu v Async proceduře, ovládací prvek se vrátí volajícímu a průběh procedury je pozastaven, dokud se nedokončí očekávaný úkol. Po dokončení úlohy může provádění pokračovat postupem.
Poznámka
AsyncProcedura se vrátí volajícímu, když buď dojde k prvnímu očekávanému objektu, který ještě nebyl dokončen Async , nebo je dosaženo konce procedury, podle toho, co nastane dříve.
Příkaz funkce můžete také označit Async modifikátorem. AsyncFunkce může mít návratový typ Task<TResult> nebo Task . Příklad dále v tomto tématu ukazuje Async funkci, která má návratový typ Task<TResult> .
Async``Subprocedury jsou primárně používány pro obslužné rutiny událostí, kde nelze vrátit hodnotu. Async Sub Procedura nemůže být očekávána a volající Async Sub procedury nemůže zachytit výjimky, které Sub procedura vyvolá.
AsyncProcedura nemůže deklarovat žádné parametry ByRef .
další informace o Async postupech naleznete v tématu asynchronní programování s Async a Await, řízení Flow v asynchronních programecha asynchronní návratové typy.
Příklad 1
Následující příklad používá Sub příkaz 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, DelayAsync Async Function který má návratový typ Task<TResult> . DelayAsync obsahuje Return příkaz, který vrací celé číslo. Proto deklarace funkce DelayAsync musí mít návratový typ Task(Of Integer) . Vzhledem k tomu, že návratový typ je Task(Of Integer) , vyhodnocení Await výrazu v DoSomethingAsync vytvoří celé číslo, jak ukazuje následující příkaz: Dim result As Integer = Await delayTask .
startButton_ClickProcedura je příkladem Async Sub procedury. Vzhledem k tomu DoSomethingAsync Async , že je funkce, úloha pro volání DoSomethingAsync musí být očekávána, jak ukazuje následující příkaz: Await DoSomethingAsync() . startButton_Click Sub Procedura musí být definována s Async modifikátorem, 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