Procedure: Een procedureargument beveiligen tegen waardewijzigingen (Visual Basic)
Als een procedure een parameter declareert als ByRef, geeft Visual Basic de procedurecode een directe verwijzing naar het programmeerelement onder het argument in de aanroepcode. Hierdoor kan de procedure de waarde van het argument in de aanroepende code wijzigen. In sommige gevallen kan het zijn dat de aanroepende code bescherming wil bieden tegen een dergelijke wijziging.
U kunt een argument altijd beschermen tegen wijziging door de bijbehorende parameter ByVal in de procedure te declareren. Als u in sommige gevallen een bepaald argument wilt kunnen wijzigen, maar niet in andere, kunt u dit ByRef
declareren en de aanroepende code het doorgevenmechanisme in elke aanroep laten bepalen. Dit doet u door het bijbehorende argument tussen haakjes te sluiten om het door te geven op waarde, of niet tussen haakjes om te geven. Zie Procedure voor meer informatie : Een argument afdwingen om door te geven door waarde.
Opmerking
In het volgende voorbeeld ziet u twee procedures die een matrixvariabele nemen en op de elementen ervan werken. Met de increase
procedure wordt er gewoon één aan elk element toegevoegd. De replace
procedure wijst een nieuwe matrix toe aan de parameter a()
en voegt er vervolgens een toe aan elk element. De toewijzing heeft echter geen invloed op de onderliggende matrixvariabele in de aanroepende code.
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(ByVal 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)))
In de eerste MsgBox
aanroep wordt 'Na toename(n): 11, 21, 31, 41' weergegeven. Omdat de matrix n
een verwijzingstype is, increase
kunnen de leden ervan wijzigen, ook al is ByVal
het doorgegeven mechanisme.
In de tweede MsgBox
aanroep wordt 'Na replace(n): 11, 21, 31, 41' weergegeven. Omdat n
deze wordt doorgegeven ByVal
, replace
kan de variabele n
in de aanroepcode niet worden gewijzigd door er een nieuwe matrix aan toe te wijzen. Wanneer replace
u het nieuwe matrixexemplaren k
maakt en deze toewijst aan de lokale variabele a
, verliest het de verwijzing die n
moet worden doorgegeven door de aanroepende code. Wanneer de leden worden a
gewijzigd, wordt alleen de lokale matrix k
beïnvloed. replace
Daarom worden de waarden van de matrix n
in de aanroepende code niet verhoogd.
De code compileren
De standaardinstelling in Visual Basic is het doorgeven van argumenten op waarde. Het is echter een goede programmeerpraktijk om het trefwoord ByVal of ByRef op te nemen met elke gedeclareerde parameter. Hierdoor is uw code gemakkelijker te lezen.
Zie ook
- Procedures
- Procedureparameters en argumenten
- Procedure: Argumenten doorgeven aan een procedure
- Argumenten doorgeven op waarde en verwijzing
- Verschillen tussen modiable en nonmodifiable argumenten
- Verschillen tussen het doorgeven van een argument op waarde en verwijzing
- Procedure: de waarde van een procedureargument wijzigen
- Procedure: Een argument afdwingen om door te geven door waarde
- Argumenten doorgeven op positie en op naam
- Waardetypen en verwijzingstypen