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 Sie eine Prozedur aufrufen, entspricht jedes argument, das Sie angeben, einem der parameter, die in der Prozedur definiert sind. In einigen Fällen kann der Prozedurcode den Wert ändern, der einem Argument im aufrufenden Code zugrunde liegt. In anderen Fällen kann die Prozedur nur die lokale Kopie eines Arguments ändern.
Wenn Sie die Prozedur aufrufen, erstellt Visual Basic eine lokale Kopie jedes Arguments, das ByVal übergeben wird. Für jedes Argument, das ByRef übergeben wird, gibt Visual Basic dem Prozedurcode einen direkten Verweis auf das Programmierelement, das dem Argument im aufrufenden Code zugrunde liegt.
Wenn das zugrunde liegende Element im aufrufenden Code ein modifizierbares Element ist und das Argument übergeben ByRef
wird, kann der Prozedurcode den direkten Verweis verwenden, um den Wert des Elements im aufrufenden Code zu ändern.
Ändern des zugrunde liegenden Werts
So ändern Sie den zugrunde liegenden Wert eines Prozedurarguments im aufrufenden Code
Geben Sie in der Prozedurdeklaration ByRef für den Parameter an, der dem Argument entspricht.
Übergeben Sie im aufrufenden Code ein modifizierbares Programmierelement als Argument.
Schließen Sie im aufrufenden Code das Argument nicht in Klammern in die Argumentliste ein.
Verwenden Sie im Prozedurcode den Parameternamen, um dem zugrunde liegenden Element im aufrufenden Code einen Wert zuzuweisen.
Sehen Sie sich das Beispiel weiter unten für eine Demonstration an.
Lokale Kopien ändern
Wenn das zugrunde liegende Element im aufrufenden Code ein nicht modifizierbares Element ist oder wenn das Argument übergeben ByVal
wird, kann die Prozedur den Wert im aufrufenden Code nicht ändern. Die Prozedur kann jedoch ihre lokale Kopie eines solchen Arguments ändern.
So ändern Sie die Kopie eines Prozedurarguments im Prozedurcode
Geben Sie in der Prozedurdeklaration ByVal für den Parameter an, der dem Argument entspricht.
-oder-
Schließen Sie im aufrufenden Code das Argument in Klammern in die Argumentliste ein. Dadurch wird visual Basic gezwungen, das Argument nach Wert zu übergeben, auch wenn der entsprechende Parameter angibt
ByRef
.Verwenden Sie im Prozedurcode den Parameternamen, um der lokalen Kopie des Arguments einen Wert zuzuweisen. Der zugrunde liegende Wert im aufrufenden Code wird nicht geändert.
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.
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(ByRef 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 replace
seine Member ändern, auch wenn der Übergabemechanismus ByVal
ist.
Der zweite MsgBox
-Aufruf zeigt „After replace(n): 101, 201, 301“ an. Da n
übergeben ByRef
wird, kann replace
die Variable n
im aufrufenden Code ändern und ihr ein neues Array zuweisen. Weil n
ein Verweistyp ist, kann replace
auch seine Member ändern.
Sie können verhindern, dass die Prozedur die Variable selbst im aufrufenden Code ändert. Siehe Vorgehensweise: Schützen eines Prozedurarguments vor Wertänderungen.
Kompilieren des Codes
Wenn Sie eine Variable nach Verweis übergeben, müssen Sie das ByRef
Schlüsselwort verwenden, um diesen Mechanismus anzugeben.
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.
.NET Framework-Sicherheit
Es besteht immer ein potenzielles Risiko, dass eine Prozedur den Wert ändern kann, der einem Argument im aufrufenden Code zugrunde liegt. Stellen Sie sicher, dass Sie damit rechnen, dass sich dieser Wert ändern könnte, und bereiten Sie sich darauf vor, seine Gültigkeit vor der Verwendung zu überprüfen.
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: Schützen eines Prozedurarguments vor Wertänderungen
- Vorgehensweise: Erzwingen, dass ein Argument als Wert übergeben wird
- Übergeben von Argumenten nach Position und nach Name
- Werttypen und Verweistypen