Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Wenn eine Prozedur einen Parameter als ByRef deklariert, gibt Visual Basic dem Prozedurcode einen direkten Verweis auf das Programmierelement, das dem Argument im aufrufenden Code zugrunde liegt. Dadurch kann die Prozedur den Wert ändern, der dem Argument im aufrufenden Code zugrunde liegt. In einigen Fällen möchte der aufrufende Code möglicherweise vor einer solchen Änderung schützen.
Sie können ein Argument jederzeit vor Änderungen schützen, indem Sie den entsprechenden Parameter ByVal in der Prozedur deklarieren. Wenn Sie ein bestimmtes Argument in einigen Fällen, aber nicht in anderen Fällen ändern möchten, können Sie es ByRef
deklarieren und den aufrufenden Code den Übergabemechanismus in jedem Aufruf bestimmen lassen. Dies geschieht, indem das entsprechende Argument in Klammern eingeschlossen wird, um es nach Wert zu übergeben, oder es nicht in Klammern einschließen, um es per Verweis zu übergeben. Weitere Informationen finden Sie unter So erzwingen Sie, dass ein Argument als Wert übergeben wird.
Beispiel
Das folgende Beispiel zeigt zwei Prozeduren, die eine Arrayvariable verwenden und mit den zugehörigen Elementen arbeiten. Die increase
Prozedur fügt jedem Element einfach ein Element hinzu. Die replace
Prozedur weist dem Parameter a()
ein neues Array zu und fügt dann jedem Element ein Array hinzu. Die Neuzuordnung wirkt sich jedoch nicht auf die zugrunde liegende Arrayvariable im aufrufenden Code aus.
Public Sub increase(ByVal a() As Long)
For j As Integer = 0 To UBound(a)
a(j) = a(j) + 1
Next j
End Sub
Public Sub replace(ByVal a() As Long)
Dim k() As Long = {100, 200, 300}
a = k
For j As Integer = 0 To UBound(a)
a(j) = a(j) + 1
Next j
End Sub
Dim n() As Long = {10, 20, 30, 40}
Call increase(n)
MsgBox("After increase(n): " & CStr(n(0)) & ", " &
CStr(n(1)) & ", " & CStr(n(2)) & ", " & CStr(n(3)))
Call replace(n)
MsgBox("After replace(n): " & CStr(n(0)) & ", " &
CStr(n(1)) & ", " & CStr(n(2)) & ", " & CStr(n(3)))
Der erste MsgBox
-Aufruf zeigt „After increase(n): 11, 21, 31, 41“ an. Da es sich bei dem Array n
um einen Verweistyp handelt, kann increase
seine Member ändern, auch wenn der Übergabemechanismus ByVal
ist.
Der zweite MsgBox
-Aufruf zeigt „After replace(n): 11, 21, 31, 41“ an. Da n
übergeben ByVal
wird, replace
kann die Variable n
im aufrufenden Code nicht geändert werden, indem sie ihm ein neues Array zuweist. Wenn replace
die neue Arrayinstanz k
erstellt und der lokalen Variablen a
zugewiesen wird, verliert es den Verweis auf n
, der vom aufrufenden Code übergeben wurde. Wenn die Mitglieder von a
geändert werden, wird nur das lokale Array k
betroffen.
replace
Erhöht daher nicht die Werte des Arrays n
im aufrufenden Code.
Kompilieren des Codes
Die Standardeinstellung in Visual Basic besteht darin, Argumente nach Wert zu übergeben. Es empfiehlt sich jedoch, entweder das ByVal - oder ByRef-Schlüsselwort mit jedem deklarierten Parameter einzuschließen. Dadurch wird das Lesen des Codes vereinfacht.
Siehe auch
- Vorgehensweisen
- Parameter und Argumente von Prozeduren
- Vorgehensweise: Übergeben von Argumenten an eine Prozedur
- Übergeben von Argumenten nach Wert und nach Verweis
- Unterschiede zwischen modifizierbaren und nicht modifizierbaren Argumenten
- Unterschiede zwischen der Übergabe eines Arguments nach Wert und nach Bezug
- Vorgehensweise: Ändern des Werts eines Prozedurarguments
- Vorgehensweise: Erzwingen, dass ein Argument als Wert übergeben wird
- Übergeben von Argumenten nach Position und nach Name
- Werttypen und Verweistypen