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.
Die Prozedurdeklaration bestimmt den Übergabemechanismus. Wenn ein Parameter von ByRef deklariert wird, erwartet Visual Basic, dass das entsprechende Argument per Verweis übergeben wird. Dadurch kann die Prozedur den Wert des Programmierelements ändern, das dem Argument im aufrufenden Code zugrunde liegt. Wenn Sie das zugrunde liegende Element vor einer solchen Änderung schützen möchten, können Sie den ByRef
Übergabemechanismus im Prozeduraufruf außer Kraft setzen, indem Sie den Argumentnamen in Klammern einschließen. Diese Klammern sind zusätzlich zu den Klammern, die die Argumentliste in den Aufruf einschließen.
Der aufrufende Code kann einen ByVal-Mechanismus nicht außer Kraft setzen.
So erzwingen Sie, dass ein Argument durch einen Wert übergeben wird
Wenn der entsprechende Parameter in der Prozedur deklariert
ByVal
wird, müssen Sie keine zusätzlichen Schritte ausführen. Visual Basic erwartet bereits, dass das Argument nach Wert übergeben wird.Wenn der entsprechende Parameter in der Prozedur deklariert
ByRef
wird, schließen Sie das Argument in Klammern im Prozeduraufruf ein.
Beispiel
Im folgenden Beispiel wird eine ByRef
Parameterdeklaration außer Kraft gesetzt. Beachten Sie in dem Aufruf, der ByVal
erzwingt, die beiden Ebenen von Klammern.
Sub setNewString(ByRef inString As String)
inString = "This is a new value for the inString argument."
MsgBox(inString)
End Sub
Dim str As String = "Cannot be replaced if passed ByVal"
' The following call passes str ByVal even though it is declared ByRef.
Call setNewString((str))
' The parentheses around str protect it from change.
MsgBox(str)
' The following call allows str to be passed ByRef as declared.
Call setNewString(str)
' Variable str is not protected from change.
MsgBox(str)
Wenn str
in der Argumentliste in zusätzliche Klammern gesetzt wird, kann die setNewString
Prozedur seinen Wert im aufrufenden Code nicht ändern und MsgBox
zeigt "Kann nicht ersetzt werden, wenn es mit ByVal übergeben wird". Wenn str
nicht in zusätzliche Klammern eingeschlossen ist, kann die Prozedur str
ändern, und zeigt "Dies ist ein neuer Wert für das inString-Argument" an.
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.
Robuste Programmierung
Wenn eine Prozedur einen Parameter ByRef deklariert, kann die korrekte Ausführung des Codes davon abhängen, dass das zugrunde liegende Element im aufrufenden Code geändert werden kann. Wenn der aufrufende Code diesen Aufrufmechanismus außer Kraft setzt, indem es das Argument in Klammern einschließt oder ein nicht modifizierbares Argument übergibt, kann die Prozedur das zugrunde liegende Element nicht ändern. Dies kann zu unerwarteten Ergebnissen im aufrufenden Code führen.
.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: Ändern des Werts eines Prozedurarguments
- Vorgehensweise: Schützen eines Prozedurarguments vor Wertänderungen
- Übergeben von Argumenten nach Position und nach Name
- Werttypen und Verweistypen