Sub – příkaz (Visual Basic)

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

  • attributelist

    Nepovinné. Viz seznam atributů.

  • Partial

    Nepovinné. Označuje definici částečné metody. Viz částečné metody.

  • accessmodifier

    Nepovinné. Může to být jedna z následujících možností:

    Viz úrovně Accessu v jazyce Visual Basic.

  • proceduremodifiers

    Nepovinné. Může to být jedna z následujících možností:

  • Shared

    Nepovinné. Viz Sdílené.

  • Shadows

    Nepovinné. Podívejte se na stíny.

  • Async

    Nepovinné. Viz Async.

  • name

    Povinný: Název postupu. Viz Deklarované názvy elementů. Chcete-li vytvořit proceduru konstruktoru pro třídu, nastavte název Sub procedury na New klíčové slovo. Další informace naleznete v tématu Životnost objektu: Způsob vytváření a zničení objektů.

  • typeparamlist

    Nepovinné. Seznam parametrů typu pro obecný postup Viz seznam typů.

  • parameterlist

    Nepovinné. Seznam názvů místních proměnných představujících parametry tohoto postupu Viz seznam parametrů.

  • Implements

    Nepovinné. Označuje, že tento postup implementuje jeden nebo více Sub procedur, každý z nich definovaný v rozhraní implementovaném tímto postupem obsahující třídu nebo strukturu. Viz Implements – příkaz.

  • implementslist

    Požadováno, pokud Implements je zadáno. Sub Seznam implementovaných postupů

    implementedprocedure [ , implementedprocedure ... ]

    Každá z nich implementedprocedure má následující syntaxi a části:

    interface.definedname

    Část Popis
    interface Požadováno. Název rozhraní implementovaného tímto postupem obsahující třídu nebo strukturu.
    definedname Povinný: Název, kterým je procedura definována v interface.
  • Handles

    Nepovinné. Označuje, že tento postup může zpracovat jednu nebo více konkrétních událostí. Viz popisovače.

  • eventlist

    Požadováno, pokud Handles je zadáno. Seznam událostí, které tento postup zpracovává

    eventspecifier [ , eventspecifier ... ]

    Každá z nich eventspecifier má následující syntaxi a části:

    eventvariable.event

    Část Popis
    eventvariable Požadováno. Proměnná objektu deklarovaná s datovým typem třídy nebo struktury, která vyvolá událost.
    event Povinný: Název události, která tento postup zpracovává.
  • statements

    Nepovinné. Blok příkazů, které se mají spustit v rámci tohoto postupu

  • End Sub

    Ukončí 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 .

AsyncSub procedury se primárně používají pro obslužné rutiny událostí, kde nelze vrátit hodnotu. Proceduru Async Sub nelze očekávat a volající Sub Async 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 Async Function, DelayAsync který má návratový Task<TResult>typ . DelayAsyncReturn 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_Click Sub 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

Viz také