Sub-Anweisung (Visual Basic)

 

Veröffentlicht: Juli 2016

Die neueste Dokumentation zu Visual Studio 2017 RC finden Sie unter Visual Studio 2017 RC Documentation (Dokumentation zu Visual Studio 2017 RC).

Deklariert den Namen, Parameter und Code, definieren ein Sub Verfahren.

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

  • attributelist

    Optional. Finden Sie unter Attributliste.

  • Partial

    Optional. Zeigt die Definition einer partiellen Methode. Finden Sie unter partielle Methoden.

  • accessmodifier

    Optional. Einer der folgenden Werte ist möglich:

    Siehe Access Levels in Visual Basic.

  • proceduremodifiers

    Optional. Einer der folgenden Werte ist möglich:

  • Shared

    Optional. Finden Sie unter freigegebenen.

  • Shadows

    Optional. Finden Sie unter Schatten.

  • Async

    Optional. Finden Sie unter Async.

  • name

    Erforderlich. Der Name der Prozedur. Siehe Declared Element Names. Um eine Konstruktorprozedur für eine Klasse zu erstellen, legen Sie den Namen des ein Sub Verfahren, um die New Schlüsselwort. Weitere Informationen finden Sie unter Objektlebensdauer: wie Objekte erstellen und zerstören sind.

  • typeparamlist

    Optional. Liste mit Typparametern für eine generische Prozedur. Finden Sie unter Liste.

  • parameterlist

    Optional. Die Liste der Namen lokaler Variablen, die die Parameter dieser Prozedur darstellt. Finden Sie unter Parameterliste.

  • Implements

    Optional. Gibt an, dass diese Prozedur eine oder mehrere implementiert Sub Prozeduren, die jeweils in einer Schnittstelle, die von der enthaltenden Klasse oder Struktur dieser Prozedur implementiert definiert. Finden Sie unter Anweisung implementiert.

  • implementslist

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

    implementedprocedure [ , implementedprocedure ... ]

    Jede implementedprocedure weist folgende Syntax und Bestandteile auf:

    interface.definedname

    SegmentBeschreibung
    interfaceErforderlich. Name der Schnittstelle implementiert, die von dieser Prozedur der enthaltenden Klasse oder Struktur.
    definednameErforderlich. Name, wodurch die Prozedur in interface definiert ist.
  • Handles

    Optional. Gibt an, dass diese Prozedur eine oder mehrere bestimmte Ereignisse behandeln kann. Finden Sie unter behandelt.

  • eventlist

    Erforderlich, wenn Handles angegeben wird. Die Liste der Ereignisse, die diese Prozedur behandelt.

    eventspecifier [ , eventspecifier ... ]

    Jede eventspecifier weist folgende Syntax und Bestandteile auf:

    eventvariable.event

    SegmentBeschreibung
    eventvariableErforderlich. Objektvariable deklariert, die mit dem Datentyp der Klasse oder Struktur, die das Ereignis auslöst.
    eventErforderlich. Der Name des Ereignisses, die diese Prozedur behandelt.
  • statements

    Optional. Der Block von Anweisungen in dieser Prozedur ausführen.

  • End Sub

    Beendet die Definition dieser Prozedur.

Der gesamte ausführbare Code muss innerhalb einer Prozedur sein. Verwenden einer Sub Prozedur, wenn Sie einen Wert an den aufrufenden Code zurückgeben möchten. Verwenden einer Function Prozedur, wenn einen Wert zurückgegeben werden soll.

Sie können eine Sub Prozedur nur auf Modulebene. Der Deklarationskontext für eine Sub-Prozedur, daher muss eine Klasse, eine Struktur, ein Modul oder eine Schnittstelle und eine Quelldatei, einen Namespace, eine Prozedur oder einen Block nicht möglich. Weitere Informationen finden Sie unter Deklarationskontexte und Zugriffsebenen standardmäßig.

Sub -Prozeduren weisen standardmäßig öffentlichen Zugriff. Sie können ihre Zugriffsebenen mit den Zugriffsmodifizierern anpassen.

Wenn die Prozedur verwendet die Implements -Schlüsselwort, der enthaltenden Klasse oder Struktur benötigen eine Implements Anweisung unmittelbar nach seiner Class oder Structure Anweisung. Die Implements -Anweisung muss jede Schnittstelle, die im angegebenen enthalten implementslist. Allerdings den Namen, mit dem eine Schnittstelle definiert, die Sub (in definedname) keine mit dem Namen dieser Prozedur übereinstimmen (in name).

Wenn ein Sub -Prozedur zum aufrufenden Code zurückkehrt, die Ausführung wird fortgesetzt, mit der Anweisung nach der Anweisung, die diese aufgerufen.

Das folgende Beispiel zeigt eine Rückgabe aus einer Sub Prozedur.

Sub mySub(ByVal q As String)  
    Return  
End Sub   

Die Exit Sub und Return -Anweisung führen zur unmittelbare Beendigung einer Sub Prozedur. Eine beliebige Anzahl von Exit Sub und Return Anweisungen können an beliebiger Stelle in der Prozedur, und Sie kombinieren können Exit Sub und Return Anweisungen.

Rufen Sie eine Sub -Prozedur durch den Namen der Prozedur in einer Anweisung verwenden und dann folgen diesem Namen und die Argumentliste in Klammern. Sie können die Klammern weglassen, nur, wenn Sie Argumente angeben. Allerdings ist der Code besser lesbar, wenn Sie immer die Klammern einschließen.

Ein Sub Verfahren und eine Function Prozedur über Parameter und eine Reihe von Anweisungen ausführen. Allerdings eine Function Prozedur gibt einen Wert und eine Sub Prozedur nicht. Daher können keiner Sub Prozedur in einem Ausdruck.

Können Sie die Call Schlüsselwort beim Aufruf einer Sub Prozedur, aber dieses Schlüsselwort wird nicht empfohlen, für die meisten Verwendungen. Weitere Informationen finden Sie unter Call-Anweisung.

Visual Basic werden manchmal neu angeordnet, arithmetische Ausdrücke, um die interne Effizienz zu erhöhen. Aus diesem Grund Wenn Argumentliste Ausdrücke enthält, die andere Prozeduren aufrufen darf keine Sie davon ausgehen, dass die Ausdrücke in einer bestimmten Reihenfolge aufgerufen werden.

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

Markieren Sie eine Prozedur mit der Async Modifizierer verwenden, können Sie die "await" Operator in der Prozedur. Wenn das Steuerelement erreicht eine Await Ausdruck in der Async Prozedur die Steuerung an den Aufrufer zurückgegeben und Fortschritt in der Prozedur wird unterbrochen, bis die Aufgabe abgeschlossen ist. Wenn der Vorgang abgeschlossen ist, können in der Prozedur die Ausführung fortsetzen.

System_CAPS_ICON_note.jpg Hinweis

Ein Async Prozedur zurückgibt, an den Aufrufer, wenn entweder das erste await-Objekt, das noch nicht abgeschlossen ist, aufgetreten ist oder das Ende der Async Prozedur erreicht wird, welches Ereignis zuerst eintritt.

Sie können auch Markieren einer Function-Anweisung mit der Async Modifizierer. Eine Async Funktion kann einen Rückgabetyp haben Task < TResult> oder Aufgabe. Ein Beispiel weiter unten in diesem Thema wird eine Async -Funktion, die einen Rückgabetyp hat Task < TResult>.

Async Sub Prozeduren werden hauptsächlich für Ereignishandler, kann ein Wert zurückgegeben werden. Ein Async``Sub Prozedur kann nicht abgewartet werden, und der Aufrufer einer Async``Sub Prozedur keine Ausnahmen auffangen, die Sub Prozedur ausgelöst.

Ein Async Prozedur kann nicht deklariert werden, keine ByRef Parameter.

Weitere Informationen zu Async Verfahren finden Sie asynchrone Programmierung mit Async und Await, Ablaufsteuerung in asynchronen Programmen, und Async Return Types.

Im folgenden Beispiel wird die Sub Anweisung definieren den Namen, Parameter und Code, der den Text der form einer Sub Prozedur.

    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 DelayAsync ist ein einer Async``Function die einen Rückgabetyp hat Task < TResult>. DelayAsync enthält eine Return-Anweisung, die eine ganze Zahl zurückgibt. Aus diesem Grund der Deklaration des DelayAsync muss einen Rückgabetyp haben Task(Of Integer). Da der Rückgabetyp ist Task(Of Integer), die Auswertung der Await Ausdruck in DoSomethingAsync erzeugt eine ganze Zahl, wie in der folgenden Anweisung dargestellt: Dim result As Integer = Await delayTask.

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

    ' 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

Implements-Anweisung
Function-Anweisung
Parameterliste
Dim-Anweisung
Call-Anweisung
Der
Parameterarrays
Gewusst wie: Verwenden einer generischen Klasse
Problembehandlung bei Prozeduren
Partielle Methoden

Anzeigen: