Function-Anweisung (Visual Basic)
Aktualisiert: November 2007
Deklariert Namen, Parameter und Code, die eine Function-Prozedur definieren.
Hinweis: |
---|
In Visual Basic 2008 werden Lambda-Ausdrücke eingeführt, die es Ihnen ermöglichen, Funktionsausdrücke inline zu definieren. Weitere Informationen finden Sie unter Funktionsausdruck und unter Lambda-Ausdrücke. |
[ <attributelist> ] [ accessmodifier ] [ proceduremodifiers ] [ Shared ] [ Shadows ]
Function name [ (Of typeparamlist) ] [ (parameterlist) ] [ As returntype ] [ Implements implementslist | Handles eventlist ]
[ statements ]
[ Exit Function ]
[ statements ]
End Function
Bestandteile
attributelist
Optional. Siehe Attributliste.accessmodifier
Optional. Einer der folgenden Werte ist möglich:proceduremodifiers
Optional. Einer der folgenden Werte ist möglich:MustOverride Overrides
NotOverridable Overrides
Shared
Optional. Siehe Shared.Shadows
Optional. Siehe Shadows.name
Erforderlich. Name der Prozedur. Siehe Namen deklarierter Elemente.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.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 verfügt über folgende Syntax und folgende Bestandteile:
interface.definedname
Bestandteil
Beschreibung
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.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
Bestandteil
Beschreibung
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.EndFunction
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.
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.
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.
Dim returnedValue As Double = calcSum(4, 3, 2, 1)
' The function's local variables are assigned the following values:
' args(0) = 4, args(1) = 3, and so on.
Siehe auch
Aufgaben
Gewusst wie: Verwenden einer generischen Klasse
Verfahren zur Problembehandlung