Udostępnij za pośrednictwem


Sub — Instrukcja (Visual Basic)

Deklaruje nazwę, parametry i kod, który Sub procedury.

[ <attributelist> ] [ Partial ] [ accessmodifier ] [ proceduremodifiers ] [ Shared ] [ Shadows ] [ Async ]
Sub name [ (Of typeparamlist) ] [ (parameterlist) ] [ Implements implementslist | Handles eventlist ]
    [ statements ]
    [ Exit Sub ]
    [ statements ]
End Sub

Części

Termin

Definicja

attributelist

Opcjonalne.Zobacz listy atrybutów.

Partial

Opcjonalne.Wskazuje definicję metody częściowe.Zobacz Metody częściowe (Visual Basic).

accessmodifier

Opcjonalne.Może być jedną z następujących czynności:

Zobacz Poziomy dostępu w Visual Basic.

proceduremodifiers

Opcjonalne.Może być jedną z następujących czynności:

Shared

Opcjonalne.Zobacz wspólne.

Shadows

Opcjonalne.Zobacz cienie.

Async

Opcjonalne.Zobacz asynchroniczne.

name

Wymagane.Nazwa procedury.Zobacz Zadeklarowane nazwy elementów (Visual Basic).Aby utworzyć procedurę konstruktora dla klasy, należy ustawić nazwę Sub procedurę, aby New słowa kluczowego.Aby uzyskać więcej informacji, zobacz Okres istnienia obiektów: w jaki sposób obiekty są tworzone i niszczone (Visual Basic).

typeparamlist

Opcjonalne.Lista parametrów typu rodzajowego procedury.Zobacz z listy Typ.

parameterlist

Opcjonalne.Lista nazwy zmiennych lokalnych reprezentujących parametry tej procedury.Zobacz Lista parametrów (Visual Basic).

Implements

Opcjonalne.Wskazuje, że procedura ta implementuje jednego lub więcej Sub procedury, każdy z nich zdefiniowane w interfejsie implementowane przez klasy lub struktury zawierające tę procedurę.Zobacz Implements — Instrukcja.

implementslist

Wymagany, jeżeli Implements jest dostarczany.Lista Sub procedury są wdrażane.

implementedprocedure [ , implementedprocedure ... ]

Każdy implementedprocedure ma następującą składnię i części:

interface.definedname

Część

Opis

interface

Wymagane.Nazwa interfejsu zaimplementowanego przez tę procedurę zawierający klasy lub struktury.

definedname

Wymagane.Nazwa, w którym procedura została określona w interface.

Handles

Opcjonalne.Wskazuje, że procedura ta może obsługiwać jeden lub więcej określonych zdarzeń.Zobacz Handles — Klauzula (Visual Basic).

eventlist

Wymagany, jeżeli Handles jest dostarczany.Lista zdarzeń, który obsługuje tę procedurę.

eventspecifier [ , eventspecifier ... ]

Każdy eventspecifier ma następującą składnię i części:

eventvariable.event

Część

Opis

eventvariable

Wymagane.Zmienna obiektu zadeklarowane z typem danych klasy lub struktury, która wywołuje zdarzenie.

event

Wymagane.Nazwy zdarzeń, który obsługuje tę procedurę.

statements

Opcjonalne.Blok instrukcji, aby uruchomić w ramach tej procedury.

EndSub

Kończy definicję tej procedury.

Uwagi

Cały kod wykonywalny musi być wewnątrz procedury.Użycie Sub procedury, gdy nie chcesz zwrócić wartość do kodu wywołującego.Użycie Function procedury, gdy ma zostać zwrócona wartość.

Definiowanie procedurę typu Sub

Można zdefiniować Sub procedura tylko na poziomie modułu.W kontekście deklaracji procedurę typu sub dlatego należy klasy, struktury, moduł lub interfejs i nie może być plikiem źródłowym, obszaru nazw, procedury lub bloku.Aby uzyskać więcej informacji, zobacz Kontekst deklaracji i domyślne poziomy dostępu (Visual Basic).

SubDomyślnie procedur dostępu publicznego.Można dostosować ich poziomy dostępu za pomocą modyfikatorów dostępu.

Jeśli procedura używa Implements musi mieć słowa kluczowego, zawierający klasy lub struktury Implements instrukcji następującej bezpośrednio jej Class lub Structure instrukcji.Implements Instrukcja musi zawierać każdego interfejsu, która jest określona w implementslist.Niemniej jednak nazwa, przez który definiuje interfejs Sub (w definedname) nie musi być zgodna z nazwą tej procedury (w name).

Wracając z procedurę typu Sub

Gdy Sub procedura zwraca do kodu wywołującego, kontynuuje wykonywanie przy użyciu instrukcji po instrukcji, która ją wywołała.

W poniższym przykładzie pokazano powrót z Sub procedury.

Sub mySub(ByVal q As String)
    Return
End Sub 

Exit Sub i Return instrukcje spowodować natychmiastowe wyjście z Sub procedury.Dowolną liczbę Exit Sub i Return instrukcji może występować w dowolnym miejscu procedury, i można mieszać Exit Sub i Return instrukcji.

Wywołanie procedury typu Sub

Należy wywołać Sub procedurę przy użyciu nazwy procedury w instrukcji i następnie po tę nazwę z listy jego argumentów w nawiasach.Nawiasy można pominąć, tylko wtedy, gdy nie poda żadnych argumentów.Jednakże kod jest bardziej czytelny, jeśli zawsze używać nawiasów.

A Sub procedury i Function procedury mogą mieć parametrów i wykonać serię instrukcji.Jednakże Function procedura zwraca wartość, a co Sub nie procedury.Dlatego nie można użyć Sub procedury w wyrażeniu.

Można użyć Call słowa kluczowego podczas wywoływania Sub procedura, ale to słowo kluczowe nie jest zalecane dla większości zastosowań.Aby uzyskać więcej informacji, zobacz Call — Instrukcja (Visual Basic).

Visual Basic Reorganizuje czasami wyrażenia arytmetycznego zwiększyć efektywność.Z tego powodu jeśli lista argument zawiera wyrażeń, które wywołują inne procedury, nie powinno Zakładam że te wyrażenia zostanie wywołana w określonej kolejności.

Procedury typu Sub asynchroniczne

Za pomocą funkcji komunikacji asynchronicznej, mogą wywoływać funkcje asynchronicznych, bez użycia jawnego wywołania zwrotne lub Ręczne dzielenie kodu wielu funkcji lub wyrażenia lambda.

Jeśli oznaczysz procedury z asynchroniczne modyfikator, można użyć oczekiwać operator w procedurze.Kiedy sterowania osiąga Await wyrażenie w Async procedurę, sterowanie powraca do wywołującego i postępu w ramach procedury jest zawieszone aż do zakończenia zadania oczekiwany.Po wykonaniu zadania w procedurze wznowić wykonywanie.

[!UWAGA]

Async Procedura zwraca się do rozmówcy po napotkaniu albo pierwszy Oczekiwany obiekt, który nie jest kompletny lub na końcu Async procedura zostanie osiągnięty, co nastąpi wcześniej.

Można również oznaczyć, Function — Instrukcja (Visual Basic) z Async modyfikatora.Async Funkcja może mieć typ zwracany z Task lub Task.Przykład później w tym temacie przedstawiono Async funkcja zwraca typ Task.

AsyncSubprocedury są stosowane głównie do obsługi zdarzeń, gdzie nie może być zwrócona wartość.AsyncSub Nie może być oczekiwany procedury i wywołujący AsyncSub procedura nie może przechwytywać wyjątków, Sub wyrzuca procedury.

Async Procedury nie można zadeklarować dowolną ByRef parametry.

Aby uzyskać więcej informacji o Async procedur, zobacz Programowanie asynchroniczne z Async i Await (C# i Visual Basic), Przepływ sterowania w aplikacjach asynchronicznych (C# i Visual Basic), i Asynchroniczne typy zwracane (C# i Visual Basic).

Przykład

W poniższym przykładzie użyto Sub instrukcji, aby zdefiniować nazwę, parametry i kod, który tworzy ciało 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

W poniższym przykładzie DelayAsync jest AsyncFunction który ma zwracany typ Task. DelayAsyncma Return instrukcja, która zwraca liczbę całkowitą.W związku z tym, deklaracja funkcji z DelayAsync musi mieć typ zwracany z Task(Of Integer).Ponieważ typ zwracany jest Task(Of Integer), oceny Await wyrażenie w DoSomethingAsync daje całkowitą, jak w poniższym instrukcja: Dim result As Integer = Await delayTask.

startButton_Click Procedura jest przykładem Async Sub procedury.Bo DoSomethingAsync jest Async funkcji, zadania dla wywołania DoSomethingAsync musi oczekiwana, jak pokazano w następujących instrukcji: Await DoSomethingAsync().startButton_ClickSub Procedura musi być zdefiniowana z Async modyfikator ponieważ ma on Await wyrażenie.

' 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

Zobacz też

Zadania

Porady: używanie klasy ogólnej (Visual Basic)

Procedury rozwiązywania problemów (Visual Basic)

Informacje

Implements — Instrukcja

Function — Instrukcja (Visual Basic)

Lista parametrów (Visual Basic)

Dim — Instrukcja (Visual Basic)

Call — Instrukcja (Visual Basic)

Of — Klauzula (Visual Basic)

Koncepcje

Parameter — Tablice (Visual Basic)

Metody częściowe (Visual Basic)