Delen via


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