Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
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 plaatsen om het door te geven als waarde, of het niet tussen haakjes te plaatsen om het door te geven als referentie. Zie voor meer informatie Hoe u een argument kunt dwingen door waarde door te geven.
Voorbeeld
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)))
De eerste MsgBox oproep toont "Na de stijging(n): 11, 21, 31, 41". Omdat de matrix n een verwijzingstype is, increase kunnen de leden ervan gewijzigd worden, ook al is ByVal het doorgegeven mechanisme.
In de tweede MsgBox aanroep wordt 'Na replace(n): 11, 21, 31, 41' weergegeven. Omdat n wordt doorgegeven ByVal, kan replace de variabele n in de aanroepcode niet wijzigen door er een nieuwe array aan toe te wijzen. Wanneer replace het nieuwe array-exemplaar k maakt en deze toewijst aan de lokale variabele a, verliest het de verwijzing naar n die door de aanroepende code werd doorgegeven. Wanneer a de leden wijzigt, wordt alleen de lokale array 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
- Procedure-parameters en argumenten
- Hoe: Argumenten doorgeven aan een procedure
- Argumenten doorgeven via waarde en via referentie
- Verschillen tussen modiable en nonmodifiable argumenten
- De verschillen tussen het doorgeven van een argument door waarde en door verwijzing
- Hoe de waarde van een procedureargument te veranderen
- Hoe een argument afdwingen dat als waarde wordt doorgegeven
- Argumenten doorgeven op positie en op naam
- Waardetypen en Verwijzingstypen