Mécanisme de passage de paramètres pour les utilisateurs de Visual Basic 6.0
Mise à jour : novembre 2007
Visual Basic 2008 introduit plusieurs modifications affectant la manière dont les arguments sont passés aux procédures.
Mécanisme de passage d'arguments par défaut
Visual Basic 6.0
Dans Visual Basic 6.0, si vous ne spécifiez pas ByVal ou ByRef dans un paramètre de procédure, le mécanisme de passage utilise ByRef par défaut. De cette façon, la variable passée dans la procédure peut être modifiée dans le programme appelant.
Exposer une variable à la modification peut comporter certains dangers. Dans l'exemple suivant, le mécanisme de passage utilise par défaut ByRef, la valeur elapsedSeconds est modifiée par minutesPastHour, et elapsedSeconds est donc affichée de façon incorrecte par MsgBox :
Function minutesPastHour(seconds As Integer) As Integer
Dim hours As Integer = seconds \ 3600
seconds = seconds Mod 3600
Return seconds \ 60
End Function
Sub showSecondsAndMinutes()
Dim elapsedSeconds, extraMinutes As Integer
elapsedSeconds = CInt(Timer()) ' Integer seconds since midnight.
extraMinutes = minutesPastHour(elapsedSeconds)
MsgBox "Total seconds: " & elapsedSeconds & _
"; minutes past hour: " & extraMinutes
End Sub
Le passage d'un argument ByRef permet à une procédure de modifier cet argument dans le programme appelant, ce qui peut donner lieu à un comportement imprévu. De plus, si cette procédure en appelle une autre et passe le même argument ByRef, les risques de voir la variable d'origine modifiée par inadvertance sont accrus.
Visual Basic 2008
Lorsque vous déclarez une procédure dans Visual Basic 2008, le mécanisme de passage est par défaut sur ByVal pour chaque paramètre. Il s'agit là d'une mesure destinée à empêcher toute modification des arguments. La déclaration de l'exemple précédent peut être réécrite comme suit.
Function MinutesPastHour(ByVal Seconds As Integer) As Integer
Le passage de seconds par valeur empêche que la procédure n'accède à la variable dans le programme appelant et contribue à éviter les dangers que nous venons de décrire.
Bien que ByVal soit utilisé comme mécanisme de passage par défaut, en le spécifiant explicitement pour chaque paramètre, le code, libéré de toute ambiguïté, devient plus facile à lire.
Arguments de propriété ByRef
Visual Basic 6.0
Dans Visual Basic 6.0, une propriété passée à une procédure en tant qu'argument ByRef est copiée dans cette procédure, mais elle ne peut pas en être extraite. Cela signifie que toute modification d'un argument de propriété de ce genre n'est pas réfléchie sur la propriété d'origine dans le programme appelant, bien que cet argument ait été passé avec ByRef.
Visual Basic 2008
Dans Visual Basic 2008, un argument de propriété passé ByRef est copié à la fois en dedans et en dehors de la procédure. L'exemple suivant montre comment une propriété peut être modifiée par une procédure.
Sub Reduce(ByRef Height As Single)
' ... ... ... ... ... ... ... ' Code to modify Height argument.
End Sub
Dim Sq As Square = New Square ' Square has property Side of type Single.
Reduce(Sq.Side) ' Side is changed when Reduce returns.
Quand une procédure modifie un argument de propriété, la valeur de la propriété d'origine n'est pas modifiée immédiatement dans le programme appelant. Au lieu de cela, elle est extraite dès le retour à la procédure.
Arguments ParamArray
Visual Basic 6.0
Dans Visual Basic 6.0, une procédure peut spécifier le mot clé ParamArray sur le dernier de ses arguments pour accepter un tableau d'arguments Variant. Il est impossible de déclarer le mécanisme de passage de ces arguments. Ces derniers sont toujours passés avec ByRef.
Visual Basic 2008
Dans Visual Basic 2008, les arguments ParamArray sont toujours passés ByVal. Les arguments du tableau doivent tous être du même type de données que l'argument ParamArray.
Voir aussi
Concepts
Déclaration de procédure pour les utilisateurs de Visual Basic 6.0
Séquence d'appel de procédure pour les utilisateurs de Visual Basic 6.0
Récapitulatif des modifications relatives à la prise en charge des éléments de programmation
Référence
Function, instruction (Visual Basic)