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
Funktionsausdruck (Visual Basic)