Freigeben über


Vorgehensweise: Erzwingen, dass ein Argument als Wert übergeben wird (Visual Basic)

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