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

  • attributelist

    Nepovinný parametr. Viz Seznam atributů.

  • Partial

    Nepovinný parametr. Označuje definici částečné metody. Viz Část metody.

  • accessmodifier

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

    Viz Úrovně přístupu v Visual Basic.

  • proceduremodifiers

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

  • Shared

    Nepovinný parametr. Viz Sdílené .

  • Shadows

    Nepovinný parametr. Viz Stíny.

  • Async

    Nepovinný parametr. Viz asynchronní .

  • name

    Povinná hodnota. Název procedury. Viz Deklarované názvy elementů. Pokud chcete vytvořit proceduru konstruktoru pro třídu, nastavte název Sub procedury na klíčové New slovo . Další informace najdete v tématu Životnost objektu: Vytvářenía zničení objektů .

  • typeparamlist

    Nepovinný parametr. Seznam parametrů typu pro obecnou proceduru Viz Seznam typů.

  • parameterlist

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

  • Implements

    Nepovinný 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 Sub této procedury. Viz Implements – příkaz.

  • implementslist

    Vyžaduje se, Implements pokud je zadaný. Seznam Sub implementované procedury.

    implementedprocedure [ , implementedprocedure ... ]

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

    interface.definedname

    Část Popis
    interface Povinná hodnota. Název rozhraní implementované tímto postupem obsahující třídu nebo strukturu.
    definedname Povinná hodnota. Název, podle kterého je procedura definována v interface .
  • Handles

    Nepovinný parametr. Označuje, že tento postup může zpracovávat jednu nebo více konkrétních událostí. Viz Popisovače.

  • eventlist

    Vyžaduje se, Handles pokud 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
    eventvariable Povinná hodnota. Objektová proměnná deklarovaná s datovým typem třídy nebo struktury, která vyvolává událost.
    event Povinná hodnota. Název události, která tento postup zpracovává.
  • statements

    Nepovinný parametr. Blok příkazů, které se spustí v rámci tohoto postupu.

  • End Sub

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

Viz také