Function-Anweisung (Visual Basic)

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

[ <attributelist> ] [ accessmodifier ] [ proceduremodifiers ] [ Shared ] [ Shadows ] 
Function name [ (Of typeparamlist) ] [ (parameterlist) ] [ As returntype ] [ Implements implementslist | Handles eventlist ]
    [ statements ]
    [ Exit Function ]
    [ statements ]
End Function

Bestandteile

Ausdruck

Definition

attributelist

Optional. Siehe Attributliste.

accessmodifier

Optional. Einer der folgenden Werte ist möglich:

Weitere Informationen finden Sie unter Zugriffsebenen in Visual Basic.

proceduremodifiers

Optional. Einer der folgenden Werte ist möglich:

Shared

Optional. Siehe Shared.

Shadows

Optional. Siehe Shadows.

name

Erforderlich. Name der Prozedur. Weitere Informationen finden Sie unter Namen deklarierter Elemente (Visual Basic).

typeparamlist

Optional. Liste der Typparameter für eine generische Prozedur. Siehe Typliste.

parameterlist

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

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

BestandteilBeschreibung
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

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

BestandteilBeschreibung
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

Optional. Block mit Anweisungen, die in dieser Prozedur ausgeführt werden müssen.

End Function

Beendet die Definition dieser Prozedur.

Hinweise

Der gesamte ausführbare Code muss in einer Prozeduren enthalten sein. Jede Prozedur wiederum wird in einer Klasse, einer Struktur oder einem Modul deklariert, die bzw. das als enthaltende/s Klasse, Struktur bzw. Modul bezeichnet wird.

Verwenden Sie eine Function-Prozedur, wenn Sie einen Wert an den aufrufenden Code zurückgeben müssen. Verwenden Sie eine Sub-Prozedur, wenn Sie keinen Wert zurückgeben müssen.

Function-Prozeduren können nur auf Modulebene definiert werden. Dies bedeutet, dass der Deklarationskontext für eine Funktion eine Klasse, eine Struktur, ein Modul oder eine Schnittstelle sein muss und keine Quelldatei, kein Namespace, keine Prozedur und kein Block sein kann. 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.

Sie können eine Function-Prozedur auf der rechten Seite eines Ausdrucks aufrufen, wenn der von der Funktion zurückgegebene Wert verwendet werden soll. Die Function-Prozedur wird genauso verwendet wie die Bibliotheksfunktionen, z. B. Sqrt, Cos oder ChrW.

Sie rufen eine Function-Prozedur in einem Ausdruck über den Prozedurnamen auf, gefolgt von der Argumentliste in Klammern. Wenn keine Argumente angegeben werden, können Sie die Klammern auch auslassen. Die Lesbarkeit des Codes wird jedoch verbessert, wenn Sie die Klammern immer einfügen.

Eine Funktion kann auch mit der Call-Anweisung aufgerufen werden. In diesem Fall wird der Rückgabewert ignoriert.

Tipp

Mit Lambda-Ausdrücken können Sie Funktionsausdrücke inline definieren. Weitere Informationen finden Sie unter Funktionsausdruck (Visual Basic) und Lambda-Ausdrücke (Visual Basic).

Regeln

  • Rückgabetyp. Die Function-Anweisung kann den Datentyp des Werts deklarieren, den sie zurückgibt. Sie können einen beliebigen Datentyp oder den Namen einer Enumeration, Struktur, Klasse oder Schnittstelle angeben.

    Wenn Sie returntype nicht angeben, gibt die Prozedur Object zurück.

  • Implementierung. Wenn die Prozedur das Implements-Schlüsselwort verwendet, muss auf die Class-Anweisung oder die Structure-Anweisung der enthaltenden Klasse oder Struktur direkt eine Implements-Anweisung folgen. Die Implements-Anweisung muss jede in implementslist angegebene Schnittstelle enthalten. Der Name, mit dem eine Schnittstelle die Function definiert (in definedname), muss jedoch nicht mit dem Namen dieser Prozedur (in name) übereinstimmen.

Verhalten

  • Beenden einer Prozedur. Wenn die Function-Prozedur zum aufrufenden Code zurückkehrt, wird die Ausführung mit der Anweisung fortgesetzt, die auf die aufrufende Anweisung folgt.

    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.

  • Rückgabewert. Der Wert einer Funktion wird zurückgegeben, indem Sie den Wert dem Funktionsnamen zuweisen oder ihn in eine Return-Anweisung einfügen. 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
    

    Wenn Sie Exit Function verwenden, ohne name einen Wert zuzuweisen, gibt die Prozedur den Standardwert für den in returntype angegebenen Datentyp zurück. Wenn returntype nicht angegeben wurde, gibt die Prozedur Nothing zurück, den Standardwert für Object.

    Die Return-Anweisung weist den Rückgabewert zu und beendet gleichzeitig die Funktion. Im folgenden Beispiel wird dies veranschaulicht.

    Function myFunction(ByVal j As Integer) As Double
        Return 3.87 * j
    End Function
    

Problembehandlung

  • Reihenfolge der Ausführung. Visual Basic ändert zuweilen die Anordnung arithmetischer Ausdrücke, um die interne Effizienz zu erhöhen. Vermeiden Sie daher die Verwendung von Function-Prozeduren in einem arithmetischen Ausdruck, wenn die Funktion den Wert von Variablen im selben Ausdruck ändert.

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

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

Parameterarrays (Visual Basic)

Lambda-Ausdrücke (Visual Basic)