Freigeben über


Gewusst wie: Ändern des Werts eines Prozedurarguments (Visual Basic)

Im Aufruf einer Prozedur entspricht jedes Argument, das angegeben wird, einem der in der Prozedur definierten Parameter. In einigen Fällen kann der Prozedurcode den Wert ändern, der einem Argument im Aufrufcode zugrunde liegt. In anderen Fällen kann die Prozedur nur ihre lokale Kopie eines Arguments ändern.

Wenn Sie die Prozedur aufrufen, erstellt Visual Basic von jedem Argument, das mit ByVal (Visual Basic) übergeben wird, eine lokale Kopie. Für jedes mit ByRef (Visual Basic) übergebene Argument übergibt Visual Basic der Prozedur einen direkten Verweis auf das Programmierelement, das dem Argument im Aufrufcode zugrunde liegt.

Falls es sich bei dem zugrunde liegenden Element im Aufrufcode um ein änderbares Element handelt und das Argument mit ByRef übergeben wird, kann der Prozedurcode über den direkten Verweis den Wert des Elements im Aufrufcode ändern.

Ändern des zugrunde liegenden Werts

So ändern Sie den zugrunde liegenden Wert eines Prozedurarguments im Aufrufcode

  1. Geben Sie in der Prozedurdeklaration ByRef (Visual Basic) für den Parameter an, der dem Argument entspricht.

  2. Übergeben Sie im Aufrufcode ein änderbares Programmierelement als Argument.

  3. Schließen Sie im Aufrufcode das Argument in der Argumentliste nicht in Klammern ein.

  4. Verwenden Sie im Prozedurcode den Parameternamen, um dem zugrunde liegenden Element im Aufrufcode einen Wert zuzuweisen.

Dies wird anhand des folgenden Beispiels veranschaulicht.

Ändern von lokalen Kopien

Wenn es sich beim zugrunde liegenden Element im Aufrufcode um ein nicht änderbares Element handelt, oder wenn das Argument mit ByVal übergeben wird, kann die Prozedur dessen Wert im Aufrufcode nicht ändern. Die Prozedur kann jedoch die lokale Kopie eines solchen Arguments ändern.

So ändern Sie die Kopie eines Prozedurarguments im Prozedurcode

  1. Geben Sie in der Prozedurdeklaration ByVal (Visual Basic) für den Parameter an, der dem Argument entspricht.

    - oder -

    Schließen Sie im Aufrufcode das Argument in der Argumentliste in Klammern ein. Dadurch wird Visual Basic gezwungen, das Argument als Wert zu übergeben, auch wenn für den entsprechenden Parameter ByRef angegeben wird.

  2. Verwenden Sie im Prozedurcode den Parameternamen, um der lokalen Kopie des Arguments einen Wert zuzuweisen. Der zugrunde liegende Wert im Aufrufcode wird nicht geändert.

Beispiel

Im folgenden Beispiel werden zwei Prozeduren demonstriert, die eine Arrayvariable als Wert übernehmen und mit deren Elementen arbeiten. Mit der increase-Prozedur wird einfach 1 zu jedem Element addiert. Die replace-Prozedur weist dem a()-Parameter ein neues Array zu und fügt dann jedem Element 1 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. Weil das Array n ein Verweistyp ist, kann replace seine Member ändern, obwohl ByVal als Übergabemechanismus verwendet wird.

Der zweite MsgBox-Aufruf zeigt "After replace(n): 101, 201, 301" an. Da n mit ByRef übergeben wird, kann replace die Variable n im Aufrufcode ä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 im Aufrufcode ändert. Weitere Informationen finden Sie unter Gewusst wie: Schützen eines Prozedurarguments gegen Wertänderungen (Visual Basic).

Kompilieren des Codes

Die Variablenübergabe durch Verweis muss mit dem ByRef-Schlüsselwort angegeben werden.

Standardmäßig werden Argumente in Visual Basic als Wert übergeben. Beim Programmieren empfiehlt es sich jedoch, das ByVal (Visual Basic)-Schlüsselwort oder das ByRef (Visual Basic)-Schlüsselwort in jeden deklarierten Parameter aufzunehmen. Dadurch wird der Code besser lesbar.

Sicherheit

Zuzulassen, dass eine Prozedur den einem Argument zugrunde liegenden Wert im Aufrufcode ändert, birgt potenziell immer Gefahren. Stellen Sie sicher, dass Sie mit der Änderung des Werts einverstanden sind, und überprüfen Sie die Gültigkeit des Werts, bevor Sie ihn verwenden.

Siehe auch

Aufgaben

Gewusst wie: Übergeben von Argumenten an eine Prozedur (Visual Basic)

Gewusst wie: Schützen eines Prozedurarguments gegen Wertänderungen (Visual Basic)

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

Konzepte

Prozeduren in Visual Basic

Parameter und Argumente von Prozeduren (Visual Basic)

Übergeben von Argumenten als Wert und als Verweis (Visual Basic)

Unterschiede zwischen veränderbaren und nicht veränderbaren Argumenten (Visual Basic)

Unterschiede zwischen dem Übergeben von Argumenten als Wert und als Verweis (Visual Basic)

Übergeben von Argumenten nach Position und Name (Visual Basic)

Weitere Ressourcen

Datentypimplementierung (Visual Basic)