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: |
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.
Hinweis |
---|
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
Function-Anweisung (Visual Basic)