Passer Un Argument Par Référence
La fonctionnalité
BYREF a essentiellement été ajoutée pour aider au portage des projets VB.
Elle ne fonctionne pas en passant des pointeurs, mais en ne libérant pas la valeur de l'argument lorsque la fonction se termine, et en la stockant dans l'expression passée par référence.
En d'autres termes :
GetData(BYREF sResult)
effectue en réalité ce qui suit :
GetData(sResult) ' Pousse sResult comme premier argument sur la pile.
... ' Ne libère pas la pile après que GetData soit terminé.
sResult = ... ' Obtient la valeur depuis la pile et la place dans sResult.
Notez que de cette façon, n'importe quelle expression d'affectation peut être passée par référence.
GetData(BYREF MyCollectionOfLabels["key"].Text)
Au niveau de la déclaration de fonction,
ByRef
signifie que vous
pouvez passer l'argument par référence mais vous n’êtes pas obligé de le faire.
Au niveau de l'appel de fonction,
ByRef
signifie que vous
voulez que l'argument soit passé par référence.
Comme en Gambas l'édition des liens est entièrement dynamique, l'interpréteur vérifie lors de l'exécution que vous n'utilisez
ByRef
que si la fonction le permet réellement. C'est la raison pour laquelle
ByRef
doit être spécifié à la fois dans la déclaration de fonction et lors de l'appel de fonction.
ByRef
rend l'appel de fonction plus lent en raison des vérifications nécessaires et du processus supplémentaire pour rappeler la valeur depuis la pile.
ByRef
n'est pas pris en charge par le compilateur JIT actuellement.