Rubrik: Variablen & Strings | 01.04.02 |
ByVal oder ByRef ? VB-Version: VB5, VB6 | ||
Views: 36.311 |
Was bedeuten die Schlüsselwörter ByVal und ByRef?
ByVal legt fest, dass ein Argument als Wert übergeben wird, d. h. der Wert eines Arguments wird an eine Prozedur oder Funktion anstelle der Adresse übergeben. Dadurch kann die Prozedur auf ein Kopie der Variablen zugreifen. Das bedeutet, dass der aktuelle Wert der Variablen nicht von der Prozedur verändert werden kann, an die er übergeben wird.
ByRef legt fest, dass das Argument als Verweis übergeben wird, d. h. die Adresse eines Arguments wird an eine Prozedur oder Funktion anstelle des Werts übergeben. Dadurch kann die Prozedur auf die tatsächliche Variable zugreifen. Das bedeutet, dass der aktuelle Wert der Variablen von der Prozedur geändert werden kann, an die er übergeben wird. Wenn nichts anderes angegeben wird, werden Argumente als Referenz übergeben, da ByRef der Standardwert in Visual Basic ist.
Um das auszuprobieren, starten Sie ein neues Projekt und platzieren auf der Form 2 CommandButtons, die Sie wie folgt benennen: Name = Command1, Caption = ByRef, Name = Command2, Caption = ByVal. Dann noch folgender Code:
' Parameterübergabe ByRef Function RechneA(x As Long, y As Long) As Long RechneA = (x + y) x = x + 1 End Function Private Sub Command1_Click() Dim x As Long, y As Long x = 5 y = 6 MsgBox RechneA(x, y) MsgBox x End Sub
In diesem Beispiel wird durch ByRef die Variable selbst übergeben. Als Ergebnis wird angezeigt: 11 und 6. Die Funktion hat durch ByRef die übergebene Variable verändert, was mit ByVal nicht passiert wäre.
' Parameterübergabe ByVal Function RechneB(ByVal x As Long, ByVal y As Long) As Long RechneB = (x + y) x = x + 1 End Function Private Sub Command2_Click() Dim x As Long, y As Long x = 5 y = 6 MsgBox RechneB(x, y) MsgBox x End Sub
In diesem Beispiel wird durch ByVal nur der Wert übergeben: 5 und 6. Als Ergebnis wird angezeigt: 11 und 5.