Sub-Anweisung (Visual Basic)

Deklariert Namen, Parameter und Code, die eine Sub-Prozedur definieren.

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

Teile

Begriff

Definition

attributelist

Dies ist optional.Siehe Attributliste.

Partial

Dies ist optional.Gibt die Definition einer partiellen Methode an.Siehe Partielle Methoden (Visual Basic).

accessmodifier

Dies ist optional.Einer der folgenden Werte ist möglich:

Siehe Zugriffsebenen in Visual Basic.

proceduremodifiers

Dies ist optional.Einer der folgenden Werte ist möglich:

Shared

Dies ist optional.Siehe Shared.

Shadows

Dies ist optional.Siehe Shadows.

Async

Dies ist optional.Siehe Async.

name

Erforderlich.Name der Prozedur.Siehe Namen deklarierter Elemente (Visual Basic).Um eine Konstruktorprozedur für eine Klasse zu erstellen, legen Sie den Namen einer Sub-Prozedur auf das New-Schlüsselwort fest.Weitere Informationen finden Sie unter Objektlebensdauer: Erstellen und Zerstören von Objekten (Visual Basic).

typeparamlist

Dies ist optional.Liste der Typparameter für eine generische Prozedur.Siehe Typliste.

parameterlist

Dies ist optional.Liste der Namen von lokalen Variablen, die die Parameter dieser Prozedur darstellen.Siehe Parameterliste (Visual Basic).

Implements

Dies ist optional.Gibt an, dass diese Prozedur eine oder mehrere Sub-Prozeduren implementiert, deren jede in einer Schnittstelle definiert ist, die von der enthaltenden Klasse oder Struktur dieser Prozedur implementiert wird.Siehe Implements-Anweisung.

implementslist

Erforderlich, wenn Implements angegeben wird.Liste der implementierten Sub-Prozeduren.

implementedprocedure [ , implementedprocedure ... ]

Jede implementedprocedure hat folgende Syntax und folgende Bestandteile:

interface.definedname

BestandteilDescription
interface Erforderlich.Der Name einer Schnittstelle, der von der enthaltenden Klasse oder Struktur dieser Prozedur implementiert wird.
definedname Erforderlich.Der Name, mit dem die Prozedur in interface definiert ist.

Handles

Dies ist optional.Gibt an, dass diese Prozedur ein oder mehrere bestimmte Ereignisse behandeln kann.Siehe Handles-Klausel (Visual Basic).

eventlist

Erforderlich, wenn Handles angegeben wird.Liste von Ereignissen, die diese Prozedur behandelt.

eventspecifier [ , eventspecifier ... ]

Jeder eventspecifier verfügt über folgende Syntax und folgende Bestandteile:

eventvariable.event

BestandteilDescription
eventvariable Erforderlich.Objektvariable, die mit dem Datentyp der Klasse oder Struktur deklariert ist, die das Ereignis auslöst.
event Erforderlich.Name des Ereignisses, das von dieser Prozedur behandelt wird.

statements

Dies ist optional.Block von Anweisungen, die in dieser Prozedur ausgeführt werden sollen.

EndSub

Beendet die Definition dieser Prozedur.

Hinweise

Der gesamte ausführbare Code muss in einer Prozeduren enthalten sein.Verwenden Sie eine Sub Prozedur, wenn Sie keinen Wert an den Aufrufcode zurückgeben möchten.Verwenden Sie eine Function Prozedur, wenn Sie einen Wert zurückgeben möchten.

Definieren einer Sub-Prozedur

Sie können eine Sub Prozedur nur auf Modulebene definieren.Der Deklarationskontext für eine Unterprozedur muss eine Klasse, Struktur, ein Modul oder eine Schnittstelle sein und kann daher keine Quelldatei, ein Namespace, eine Prozedur oder ein Block liegen.Weitere Informationen finden Sie unter Deklarationskontexte und Standardzugriffsebenen (Visual Basic).

Sub-Prozeduren weisen standardmäßig öffentlichen Zugriff auf.Sie können die Zugriffsebenen anpassen, indem Sie die Zugriffsmodifizierer verwenden.

Wenn die Prozedur das Implements-Schlüsselwort verwendet, müssen die enthaltende Klasse bzw. Struktur eine Implements-Anweisung verfügen, die sofort seiner Class oder Structure-Anweisung folgt.Die Implements-Anweisung muss jede Schnittstelle enthalten, die in implementslist angegeben wird.Allerdings muss der Name, mit dem eine Schnittstelle Sub definiert (in definedname) den Namen dieser Prozedur nicht übereinstimmen (in name).

Beenden einer Sub-Prozedur

Wenn eine Sub Prozedur an den aufrufenden Code, führen Sie mit der - Anweisung nach der - Anweisung fortgesetzt wird, die sie aufgerufen wurde.

Im folgenden Beispiel wird das Beenden einer Sub-Prozedur veranschaulicht.

Sub mySub(ByVal q As String)
    Return
End Sub 

Die Exit Sub-Anweisung und die Return-Anweisung führen zur unmittelbaren Beendigung einer Sub-Prozedur.In der Prozedur können beliebig viele Exit Sub-Anweisungen und Return-Anweisungen an beliebiger Stelle vorkommen, und Sie können Exit Sub-Anweisungen und Return-Anweisungen kombinieren.

Aufrufen einer Sub-Prozedur

Sie rufen eine Sub Prozedur auf, indem Sie den Prozedurnamen in einer - Anweisung und dann nach diesem Namen mit der Argumentliste in Klammern verwenden.Sie können die Klammern weglassen nur, wenn Sie keine Argumente.Die Lesbarkeit des Codes wird jedoch verbessert, wenn Sie die Klammern immer einfügen.

Eine Sub Prozedur und eine Function Prozedur können Parameter haben und eine Reihe von Anweisungen ausführen.führt jedoch gibt Function einer Prozedur ein Wert und eine Sub Prozedur nicht.Daher können Sie eine Sub Prozedur in einem Ausdruck verwenden.

Sie können das Call-Schlüsselwort verwenden, wenn Sie eine Sub Prozedur aufrufen, aber dieses Schlüsselwort wird nicht für die meisten Verwendung empfohlen.Weitere Informationen finden Sie unter Call-Anweisung (Visual Basic).

Visual Basic ändert zuweilen die Anordnung arithmetischer Ausdrücke, um die interne Effizienz zu erhöhen.Aus diesem Grund wenn die Argumentliste Ausdrücke umfasst, die andere Prozeduren aufrufen, sollten Sie nicht davon ausgehen, dass diese Ausdrücke in einer bestimmten Reihenfolge aufgerufen werden.

Async-Sub-Prozeduren

Mithilfe der Async-Funktion verwenden, können Sie asynchrone Features aufrufen, ohne explizite Rückrufe zu verwenden oder den Code über mehrere Funktionen oder Lambda-Ausdrücken manuell zu teilen.

Wenn Sie eine Prozedur mit dem Async-Modifizierer markieren, können Sie den Rechnen Sie-Operator in der Prozedur verwenden.Wenn Await-Steuerelement einen Ausdruck in der Async Prozedur erreicht, kehrt die Steuerung an den Aufrufer zurück, und Status in der Prozedur wird angehalten, bis die erwartete Aufgabe ausführt.Wenn die Aufgabe abgeschlossen ist, kann die Ausführung in der Prozedur fort.

HinweisHinweis

gibt Async einer Prozedur an den Aufrufer, wenn ein, das das zuerst erwartete Objekt, das noch nicht abgeschlossen ist oder das Ende der Async Prozedur auftritt, erreicht ist, das zuerst auftritt.

Sie können Function-Anweisung (Visual Basic) mit dem Async-Modifizierer auch markieren.Eine Async-Funktion kann einen Rückgabetyp Task<TResult> oder Task haben.Ein Beispiel wird weiter unten in diesem Thema Async eine Funktion, die einen Rückgabetyp Task<TResult> verfügt.

Prozeduren AsyncSub werden hauptsächlich für Ereignishandler verwendet, in denen kein Wert zurückgegeben werden kann.Eine Prozedur AsyncSub kann nicht erwartet werden, und der Aufrufer einer Prozedur AsyncSub kann Ausnahmen auffangen, die die Sub Prozedur ausgelöst wird.

Eine Async Prozedur kann keine als ByRef-Parameter-Parameter deklarieren.

Weitere Informationen zu Async Prozeduren, finden Sie unter Asynchrone Programmierung mit Async und Await (C# und Visual Basic), Ablaufsteuerung in asynchronen Programmen (C# und Visual Basic) und Asynchrone Rückgabetypen (C# und Visual Basic).

Beispiel

Im folgenden Beispiel werden mit der Sub-Anweisung Name, Parameter und Code definiert, die den Rumpf einer Sub-Prozedur bilden.

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

Im folgenden Beispiel ist DelayAsyncAsyncFunction, das einen Rückgabetyp Task<TResult> verfügt.DelayAsync verfügt über eine Return-Anweisung, die eine ganze Zahl zurückgibt.Daher muss die Funktionsdeklaration von DelayAsync einen Rückgabetyp Task(Of Integer) haben.Da der Rückgabetyp Task(Of Integer) ist, erzeugt die Auswertung des Ausdrucks Await in DoSomethingAsync eine ganze Zahl, wie in der folgenden Anweisung dargestellt: Dim result As Integer = Await delayTask.

Die startButton_Click Prozedur ist ein Beispiel für eine Async Sub Prozedur.Da DoSomethingAsync eine Async-Funktion ist, muss die Aufgabe für den Aufruf von DoSomethingAsync erwartet werden, wie in der folgenden Anweisung dargestellt: Await DoSomethingAsync().Die Prozedur startButton_ClickSub muss mit dem Async-Modifizierer definiert werden, da sie einen Await Ausdruck verfügt.

' 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

Siehe auch

Aufgaben

Gewusst wie: Verwenden einer generischen Klasse (Visual Basic)

Problembehandlung bei Prozeduren (Visual Basic)

Referenz

Implements-Anweisung

Function-Anweisung (Visual Basic)

Parameterliste (Visual Basic)

Dim-Anweisung (Visual Basic)

Call-Anweisung (Visual Basic)

Of-Klausel (Visual Basic)

Konzepte

Parameterarrays (Visual Basic)

Partielle Methoden (Visual Basic)