Function-Anweisung (Visual Basic)
Deklariert Namen, Parameter und Code, die eine Function-Prozedur definieren.
[ <attributelist> ] [ accessmodifier ] [ proceduremodifiers ] [ Shared ] [ Shadows ] [ Async | Iterator ]
Function name [ (Of typeparamlist) ] [ (parameterlist) ] [ As returntype ] [ Implements implementslist | Handles eventlist ]
[ statements ]
[ Exit Function ]
[ statements ]
End Function
Teile
Begriff |
Definition |
attributelist |
Dies ist optional.Siehe Attributliste. |
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. |
Iterator |
Dies ist optional.Siehe Iterator. |
name |
Erforderlich.Name der Prozedur.Siehe Namen deklarierter Elemente (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). |
returntype |
Erforderlich, wenn Option Strict den Wert On aufweist.Datentyp des Werts, der von dieser Prozedur zurückgegeben wird. |
Implements |
Dies ist optional.Gibt an, dass diese Prozedur eine oder mehrere Function-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 Function-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 mit Anweisungen, die in dieser Prozedur ausgeführt werden müssen. |
EndFunction |
Beendet die Definition dieser Prozedur. |
Hinweise
Der gesamte ausführbare Code muss in einer Prozeduren enthalten sein.Jede Prozedur hingegen werden in einer Klasse, einer Struktur oder eines Moduls deklariert, das als die enthaltende Klasse, Struktur oder das Modul bezeichnet.
Um einen Wert im Aufrufcode zurückzugeben, verwenden Sie eine Function Prozedur; andernfalls verwenden Sie eine Sub Prozedur.
Definieren einer Funktion
Sie können eine Function Prozedur nur auf Modulebene definieren.Daher muss der Deklarationskontext für eine Funktion eine Klasse, Struktur, ein Modul oder eine Schnittstelle sein und darf keine Quelldatei, ein Namespace, eine Prozedur oder ein Block liegen.Weitere Informationen finden Sie unter Deklarationskontexte und Standardzugriffsebenen (Visual Basic).
Function-Prozeduren weisen standardmäßig öffentlichen Zugriff auf.Sie können ihre Zugriffsebenen mit den Zugriffsmodifizierern anpassen.
Eine Function Prozedur kann den Datentyp des Werts deklarieren diesen der Prozedur.Sie können jeden Datentyp oder den Namen einer Enumeration, der Struktur, Klasse oder Schnittstelle angeben.Wenn Sie nicht den returntype-Parameter angeben, gibt die Prozedur Object.
Wenn diese Prozedur Implements das - 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 Function definiert (in definedname) nicht, um den Namen dieser Prozedur entspricht (in name).
Hinweis |
---|
Sie können Lambda-Ausdrücke verwenden, um Funktionsausdrücke inline zu definieren.Weitere Informationen finden Sie unter Funktionsausdruck (Visual Basic) und Lambda-Ausdrücke (Visual Basic). |
Beenden einer Funktion
Wenn die Function Prozedur zum aufrufenden Code, führen Sie mit der - Anweisung fortgesetzt wird, die - Anweisung folgt, die die Prozedur aufgerufen wurde.
Der Wert einer Funktion wird zurückgegeben, indem Sie den Wert dem Funktionsnamen zuweisen oder ihn in eine Return-Anweisung einfügen.
Die Return-Anweisung weist gleichzeitig den Rückgabewert zu und beendet die Funktion, wie im folgenden Beispiel gezeigt.
Function myFunction(ByVal j As Integer) As Double
Return 3.87 * j
End Function
Im folgenden Beispiel wird der Rückgabewert dem Funktionsnamen myFunction zugewiesen und dann mit der Exit Function-Anweisung zurückgegeben.
Function myFunction(ByVal j As Integer) As Double
myFunction = 3.87 * j
Exit Function
End Function
Die Exit Function-Anweisung und die Return-Anweisung führen zur unmittelbaren Beendigung einer Function-Prozedur.In der Prozedur können beliebig viele Exit Function-Anweisungen und Return-Anweisungen an beliebiger Stelle vorkommen, und Sie können Exit Function-Anweisungen und Return-Anweisungen kombinieren.
Wenn Sie Exit Function verwenden, ohne einen Wert zuzuweisen name, gibt die Prozedur den Standardwert für den Datentyp, der in returntype angegeben wird.Wenn returntype nicht angegeben wird, gibt die Prozedur Nothing, den Standardwert für Object ist.
Aufrufen einer Funktion
Sie rufen eine Function-Prozedur in einem Ausdruck über den Prozedurnamen auf, gefolgt von der Argumentliste in Klammern.Sie können die Klammern weglassen nur, wenn Sie keine Argumente angeben.Die Lesbarkeit des Codes wird jedoch verbessert, wenn Sie die Klammern immer einfügen.
Sie rufen eine Function Prozedur dieselbe Methode, dass Sie jede Bibliotheksfunktion wie Sqrt, Cos oder ChrW aufrufen.
Sie können eine Funktion auch aufrufen, indem Sie das - Schlüsselwort Call verwenden.In diesem Fall wird der Rückgabewert ignoriert.Verwendung des Call-Schlüsselwort ist in den meisten Fällen nicht 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 sollten Sie eine Function Prozedur in einem arithmetischen Ausdruck verwenden wenn die jeweiligen der Wert von Variablen im gleichen Ausdruck.
Async-Funktionen
Die Async-Funktion ermöglicht es Ihnen, um asynchrone Features aufzurufen, ohne explizite Rückrufe zu verwenden oder den Code über mehrere Funktionen oder Lambda-Ausdrücken manuell zu teilen.
Wenn Sie eine Funktion mit dem Async-Modifizierer markieren, können Sie den Rechnen Sie-Operator in der - Funktion verwenden.Wenn Await-Steuerelement einen Ausdruck in der Async-Funktion erreicht, kehrt die Steuerung an den Aufrufer zurück, und Status in der Funktion wird angehalten, bis die erwartete Aufgabe ausführt.Wenn die Aufgabe abgeschlossen ist, kann die Ausführung in der Funktion fortsetzen.
Hinweis |
---|
gibt Async einer Prozedur an den Aufrufer, wenn eine es zuerst das erwartete Objekt entdeckt, das noch nicht abgeschlossen ist oder sie erhalten an das Ende der Async Prozedur, das zuerst auftritt. |
Eine Async-Funktion kann einen Rückgabetyp Task<TResult> oder Task haben.Ein Beispiel einer Async-Funktion, die einen Rückgabetyp Task<TResult> verfügt, wird unten bereitgestellt.
Eine Async-Funktion kann keine als ByRef-Parameter-Parameter deklarieren.
Sub-Anweisung (Visual Basic) kann Async auch mit dem - Modifizierer gekennzeichnet werden.Dies wird 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 von der Sub Prozedur ausgelöst werden.
Weitere Informationen zu Async-Funktionen, 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).
Iterator-Funktionen
Eine Iteratorfunktion führt eine benutzerdefinierte Iteration über eine Auflistung, wie einer Liste oder einem Array aus.Eine Iteratorfunktion verwendet die Yield-Anweisung, um jedes Element einzeln zurückzugeben.Wenn eine Yield-Anweisung erreicht ist, wird an die aktuelle Position im Code gespeichert.Die Ausführung von diesem Speicherort neu gestartet, beim nächsten Öffnen der Iteratorfunktion aufgerufen wird.
Sie rufen den Iterator vom Clientcode auf, indem Sie eine Für jedes... Next-Schleife-Anweisung verwenden.
Der Rückgabetyp einer Iteratorfunktion kann IEnumerable, IEnumerable<T>, IEnumerator oder IEnumerator<T> sein.
Weitere Informationen finden Sie unter Iteratoren (C# und Visual Basic).
Beispiel
Im folgenden Beispiel werden mit der Function-Anweisung Name, Parameter und Code deklariert, die den Rumpf einer Function-Prozedur bilden.Durch den ParamArray-Modifizierer kann eine Funktion eine variable Anzahl von Argumenten akzeptieren.
Public Function calcSum(ByVal ParamArray args() As Double) As Double
calcSum = 0
If args.Length <= 0 Then Exit Function
For i As Integer = 0 To UBound(args, 1)
calcSum += args(i)
Next i
End Function
Im folgenden Beispiel wird die im vorherigen Beispiel deklarierte Funktion aufgerufen.
Module Module1
Sub Main()
' In the following function call, calcSum's local variables
' are assigned the following values: args(0) = 4, args(1) = 3,
' and so on. The displayed sum is 10.
Dim returnedValue As Double = calcSum(4, 3, 2, 1)
Console.WriteLine("Sum: " & returnedValue)
' Parameter args accepts zero or more arguments. The sum
' displayed by the following statements is 0.
returnedValue = calcSum()
Console.WriteLine("Sum: " & returnedValue)
End Sub
Public Function calcSum(ByVal ParamArray args() As Double) As Double
calcSum = 0
If args.Length <= 0 Then Exit Function
For i As Integer = 0 To UBound(args, 1)
calcSum += args(i)
Next i
End Function
End Module
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 die Funktionsdeklaration von DelayAsync Anforderungen, einen Rückgabetyp Task(Of Integer) verfügen.Da der Rückgabetyp Task(Of Integer) ist, erzeugt die Auswertung des Ausdrucks Await in DoSomethingAsync eine ganze Zahl.Dies wird in dieser Anweisung veranschaulicht: 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 wird: 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
Funktionsausdruck (Visual Basic)
Konzepte
Function-Prozeduren (Visual Basic)