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.
Wanneer u een procedure aanroept, komt elk argument dat u opgeeft overeen met een van de parameters die in de procedure zijn gedefinieerd. In sommige gevallen kan de procedurecode de waarde van een argument in de aanroepende code wijzigen. In andere gevallen kan de procedure alleen de lokale kopie van een argument wijzigen.
Wanneer u de procedure aanroept, maakt Visual Basic een lokale kopie van elk argument dat wordt doorgegeven door ByVal. Voor elk argument dat ByRef wordt doorgegeven, geeft Visual Basic de procedurecode een directe verwijzing naar het onderliggende programmeerelement van het argument in de aanroepcode.
Als het onderliggende element in de aanroepcode een wijzigbaar element is en het argument wordt doorgegeven ByRef, kan de procedurecode de directe verwijzing gebruiken om de waarde van het element in de aanroepende code te wijzigen.
De onderliggende waarde wijzigen
De onderliggende waarde van een procedureargument in de aanroepende code wijzigen
Geef in de proceduredeclaratie ByRef op voor de parameter die overeenkomt met het argument.
Geef in de aanroepende code een wijzigbaar programmeerelement door als het argument.
Plaats in de aanroepcode het argument niet tussen haakjes in de lijst met argumenten.
Gebruik in de procedurecode de parameternaam om een waarde toe te wijzen aan het onderliggende element in de aanroepende code.
Zie het voorbeeld verderop voor een demonstratie.
Lokale kopieën wijzigen
Als het onderliggende element in de aanroepcode een niet-wijzigbaar element is of als het argument wordt doorgegeven ByVal, kan de procedure de waarde ervan niet wijzigen in de aanroepende code. De procedure kan echter de lokale kopie van een dergelijk argument wijzigen.
Om de kopie van een procedureargument in de procedurecode te wijzigen
Geef in de proceduredeclaratie ByVal op voor de parameter die overeenkomt met het argument.
– of –
Plaats in de aanroepende code het argument tussen haakjes in de lijst met argumenten. Dit dwingt Visual Basic om het argument door te geven op waarde, zelfs als de bijbehorende parameter aangeeft
ByRef.Gebruik in de procedurecode de parameternaam om een waarde toe te wijzen aan de lokale kopie van het argument. De onderliggende waarde in de aanroepcode wordt niet gewijzigd.
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.
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)))
De eerste MsgBox oproep toont "Na de stijging(n): 11, 21, 31, 41". Omdat de matrix n een verwijzingstype is, replace kunnen de leden ervan gewijzigd worden, ook al is ByVal het doorgegeven mechanisme.
In de tweede MsgBox aanroep wordt 'Na replace(n): 101, 201, 301' weergegeven. Omdat n wordt doorgegeven aan ByRef, kan replace de variabele n in de aanroepende code wijzigen en er een nieuwe array aan toewijzen. Omdat n een referentietype is, kan replace ook zijn leden wijzigen.
U kunt voorkomen dat de procedure de variabele zelf wijzigt in de aanroepende code. Zie Hoe te: Een procedureargument beschermen tegen waardeveranderingen.
De code compileren
Wanneer u een variabele op basis van verwijzing doorgeeft, moet u het ByRef trefwoord gebruiken om dit mechanisme op te geven.
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.
.NET Framework-beveiliging
Er bestaat altijd een potentieel risico dat een procedure de waarde onder een argument in de aanroepcode kan wijzigen. Zorg ervoor dat u verwacht dat deze waarde wordt gewijzigd en controleer of deze geldig is voordat u deze gebruikt.
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 een procedureargument tegen waardeveranderingen te beschermen
- Hoe een argument afdwingen dat als waarde wordt doorgegeven
- Argumenten doorgeven op positie en op naam
- Waardetypen en Verwijzingstypen