Procedure: Een argument afdwingen om door te geven door waarde (Visual Basic)
De proceduredeclaratie bepaalt het doorgegeven mechanisme. 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 staan naast de haakjes tussen de argumentenlijst in de aanroep.
De aanroepende code kan geen ByVal-mechanisme overschrijven.
Een argument afdwingen dat door een waarde wordt doorgegeven
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.
Opmerking
In het volgende voorbeeld wordt een ByRef
parameterdeclaratie overschreven. In het gesprek dat dwingt ByVal
, noteert u 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
de procedure tussen extra haakjes in de lijst met argumenten staat, kan de waarde van de setNewString
procedure in de aanroepcode niet worden gewijzigd en MsgBox
wordt 'Kan niet worden vervangen als ByVal wordt doorgegeven' weergegeven. Wanneer str
deze niet tussen extra haakjes staat, kan de procedure deze wijzigen en MsgBox
wordt 'Dit is een nieuwe waarde voor het argument inString' weergegeven.
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
- 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 procedureargument beveiligen tegen waardewijzigingen
- Argumenten doorgeven op positie en op naam
- Waardetypen en verwijzingstypen