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.
De proceduredeclaratie bepaalt de overdrachtsmethode. Als een parameter door ByRef wordt gedeclareerd, verwacht Visual Basic het bijbehorende argument per verwijzing door te geven. Hierdoor kan de procedure de waarde van het programmeerelement dat onder het argument in de aanroepcode is, wijzigen. Als u het onderliggende element tegen een dergelijke wijziging wilt beschermen, kunt u het ByRef
doorgegeven mechanisme in de procedure-aanroep overschrijven door de argumentnaam tussen haakjes te plaatsen. Deze haakjes komen bovenop de haakjes die de argumentenlijst in de aanroep omsluiten.
De aanroepende code kan geen ByVal-mechanisme overschrijven.
Om een argument door waardeoverdracht af te dwingen
Als de bijbehorende parameter in de procedure is gedeclareerd
ByVal
, hoeft u geen extra stappen uit te voeren. Visual Basic verwacht al dat het argument op waarde wordt doorgegeven.Als de bijbehorende parameter is gedeclareerd
ByRef
in de procedure, plaatst u het argument tussen haakjes in de procedureaanroep.
Voorbeeld
In het volgende voorbeeld wordt een ByRef
parameterdeclaratie overschreven. In de oproep die ByVal
forceert, let op de twee niveaus van haakjes.
Sub setNewString(ByRef inString As String)
inString = "This is a new value for the inString argument."
MsgBox(inString)
End Sub
Dim str As String = "Cannot be replaced if passed ByVal"
' The following call passes str ByVal even though it is declared ByRef.
Call setNewString((str))
' The parentheses around str protect it from change.
MsgBox(str)
' The following call allows str to be passed ByRef as declared.
Call setNewString(str)
' Variable str is not protected from change.
MsgBox(str)
Wanneer str
tussen extra haakjes in de lijst met argumenten is omsloten, kan de waarde van de setNewString
procedure in de aanroepcode niet worden gewijzigd en MsgBox
geeft 'Kan niet worden vervangen als het als ByVal wordt doorgegeven' weer. Wanneer str
niet in extra haakjes staat, kan de procedure het wijzigen en geeft MsgBox
'Dit is een nieuwe waarde voor het argument inString' weer.
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.
Robuuste programmering
Als een procedure een parameter ByRef declareert, kan de juiste uitvoering van de code afhankelijk zijn van het wijzigen van het onderliggende element in de aanroepende code. Als de aanroepende code dit aanroepmechanisme overschrijft door het argument tussen haakjes te sluiten of als het een niet-wijzigbaar argument doorgeeft, kan de procedure het onderliggende element niet wijzigen. Dit kan onverwachte resultaten opleveren in de aanroepende code.
.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 de waarde van een procedureargument te veranderen
- Hoe een procedureargument tegen waardeveranderingen te beschermen
- Argumenten doorgeven op positie en op naam
- Waardetypen en Verwijzingstypen