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:

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.

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).

HinweisHinweis

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.

HinweisHinweis

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

Sub-Anweisung (Visual Basic)

Parameterliste (Visual Basic)

Dim-Anweisung (Visual Basic)

Call-Anweisung (Visual Basic)

Of-Klausel (Visual Basic)

Funktionsausdruck (Visual Basic)

Konzepte

Function-Prozeduren (Visual Basic)

Parameterarrays (Visual Basic)

Lambda-Ausdrücke (Visual Basic)