Verschillen tussen het doorgeven van een argument op waarde en verwijzing (Visual Basic)
Wanneer u een of meer argumenten doorgeeft aan een procedure, komt elk argument overeen met een onderliggend programmeerelement in de aanroepcode. U kunt de waarde van dit onderliggende element of een verwijzing naar het element doorgeven. Dit wordt het doorgegeven mechanisme genoemd.
Doorgeven op waarde
U geeft een argument door op waarde door het Trefwoord ByVal op te geven voor de bijbehorende parameter in de proceduredefinitie. Wanneer u dit passeermechanisme gebruikt, kopieert Visual Basic de waarde van het onderliggende programmeerelement naar een lokale variabele in de procedure. De procedurecode heeft geen toegang tot het onderliggende element in de aanroepende code.
Doorgeven per verwijzing
U geeft een argument door naslaginformatie door het trefwoord ByRef op te geven voor de bijbehorende parameter in de proceduredefinitie. Wanneer u dit passeermechanisme gebruikt, geeft Visual Basic de procedure een directe verwijzing naar het onderliggende programmeerelement in de aanroepende code.
Mechanisme en elementtype doorgeven
De keuze voor het doorgeven van een mechanisme is niet hetzelfde als de classificatie van het onderliggende elementtype. Het doorgeven van een waarde of verwijzing verwijst naar wat Visual Basic aan de procedurecode levert. Een waardetype of verwijzingstype verwijst naar de manier waarop een programmeerelement wordt opgeslagen in het geheugen.
Het doorgevende mechanisme en het elementtype zijn echter onderling gerelateerd. De waarde van een verwijzingstype is een verwijzing naar de gegevens elders in het geheugen. Dit betekent dat wanneer u een verwijzingstype op waarde doorgeeft, de procedurecode een aanwijzer heeft naar de gegevens van het onderliggende element, ook al heeft deze geen toegang tot het onderliggende element zelf. Als het element bijvoorbeeld een matrixvariabele is, heeft de procedurecode geen toegang tot de variabele zelf, maar heeft deze wel toegang tot de matrixleden.
Mogelijkheid om te wijzigen
Wanneer u een niet-wijzigbaar element als argument doorgeeft, kan de procedure het nooit wijzigen in de aanroepende code, ongeacht of het wordt doorgegeven ByVal
of ByRef
.
Voor een wijzigbaar element geeft de volgende tabel een overzicht van de interactie tussen het elementtype en het doorgevende mechanisme.
Elementtype | Doorgegeven ByVal |
Doorgegeven ByRef |
---|---|---|
Waardetype (bevat alleen een waarde) | De procedure kan de variabele of een van de leden ervan niet wijzigen. | De procedure kan de variabele en de bijbehorende leden wijzigen. |
Verwijzingstype (bevat een aanwijzer naar een klasse- of structuurexemplaren) | De procedure kan de variabele niet wijzigen, maar kan leden van het exemplaar wijzigen waarnaar deze verwijst. | De procedure kan de variabele en leden van het exemplaar waarnaar deze verwijst, wijzigen. |
Zie ook
- Procedures
- Procedureparameters en argumenten
- Procedure: Argumenten doorgeven aan een procedure
- Argumenten doorgeven op waarde en verwijzing
- Verschillen tussen modiable en nonmodifiable argumenten
- Procedure: de waarde van een procedureargument wijzigen
- Procedure: Een procedureargument beveiligen tegen waardewijzigingen
- Procedure: Een argument afdwingen om door te geven door waarde
- Argumenten doorgeven op positie en op naam
- Waardetypen en verwijzingstypen