Événements
Créer des applications intelligentes
17 mars, 21 h - 21 mars, 10 h
Rejoignez la série de rencontres pour créer des solutions IA évolutives basées sur des cas d’usage réels avec d’autres développeurs et experts.
S’inscrire maintenantCe navigateur n’est plus pris en charge.
Effectuez une mise à niveau vers Microsoft Edge pour tirer parti des dernières fonctionnalités, des mises à jour de sécurité et du support technique.
En Visual Basic, vous pouvez passer un argument à une procédure par valeur ou par référence. Il s’agit du mécanisme de passage, et détermine si la procédure peut modifier l’élément de programmation sous-jacent à l’argument dans le code appelant. La déclaration de procédure détermine le mécanisme de passage pour chaque paramètre en spécifiant le mot clé ByVal ou ByRef.
Lors de la transmission d’un argument à une procédure, tenez compte de plusieurs distinctions différentes qui interagissent entre elles :
Indique si l’élément de programmation sous-jacent est modifiable ou non modifiable
Indique si l’argument lui-même est modifiable ou non modifiable
Indique si l’argument est passé par valeur ou par référence
Indique si le type de données d’argument est un type valeur ou un type référence
Pour plus d’informations, consultez différences entre les arguments modifiables et non modifiables et différences entre le passage d’un argument par valeur et par référence.
Vous devez choisir soigneusement le mécanisme de passage pour chaque argument.
Protection. Dans le choix entre les deux mécanismes de passage, le critère le plus important est l’exposition des variables appelantes à changer. L’avantage de passer un argument ByRef
est que la procédure peut retourner une valeur au code appelant via cet argument. L’avantage de passer un argument ByVal
est qu’il protège une variable contre la modification par la procédure.
Performances. Bien que le mécanisme de passage puisse affecter les performances de votre code, la différence est généralement insignifiante. Une exception à ceci est un type valeur passé ByVal
. Dans ce cas, Visual Basic copie l’intégralité du contenu des données de l’argument. Par conséquent, pour un type de valeur volumineux tel qu’une structure, il peut être plus efficace de le passer ByRef
.
Pour les types de référence, seul le pointeur vers les données est copié (quatre octets sur les plateformes 32 bits, huit octets sur les plateformes 64 bits). Par conséquent, vous pouvez passer des arguments de type String
ou Object
par valeur sans nuire aux performances.
La déclaration de procédure spécifie le mécanisme de passage pour chaque paramètre. Le code appelant ne peut pas remplacer un mécanisme ByVal
.
Si un paramètre est déclaré avec ByRef
, le code appelant peut forcer le mécanisme à ByVal
en plaçant le nom de l’argument entre parenthèses dans l’appel. Pour plus d’informations, consultez Comment : forcer le passage d'un argument par valeur.
La valeur par défaut dans Visual Basic consiste à passer des arguments par valeur.
Si l’élément de code appelant sous-jacent à l’argument est un élément non modifiable, déclarez le paramètre correspondant ByVal. Aucun code ne peut modifier la valeur d’un élément non modifiable.
Si l’élément sous-jacent est modifiable, mais que vous ne souhaitez pas que la procédure puisse modifier sa valeur, déclarez le paramètre ByVal
. Seul le code appelant peut modifier la valeur d’un élément modifiable passé par valeur.
Si la procédure a une véritable nécessité de modifier l’élément sous-jacent dans le code appelant, déclarez le paramètre correspondant ByRef.
Si l’exécution correcte du code dépend de la procédure qui modifie l’élément sous-jacent dans le code appelant, déclarez le paramètre ByRef
. Si vous le passez par valeur ou si le code appelant remplace le mécanisme de passage de ByRef
en plaçant l’argument entre parenthèses, l’appel de procédure peut produire des résultats inattendus.
L’exemple suivant illustre quand passer des arguments par valeur et quand les passer par référence. La procédure Calculate
a à la fois un ByVal
et un paramètre de ByRef
. Compte tenu d’un taux d’intérêt, rate
et d’une somme d’argent debt
, la tâche de la procédure consiste à calculer une nouvelle valeur pour debt
qui est le résultat de l’application du taux d’intérêt à la valeur d’origine de debt
. Étant donné que debt
est un paramètre ByRef
, le nouveau total est reflété dans la valeur de l’argument dans le code appelant qui correspond à debt
. Le paramètre rate
est un paramètre ByVal
, car Calculate
ne doit pas modifier sa valeur.
Module Module1
Sub Main()
' Two interest rates are declared, one a constant and one a
' variable.
Const highRate As Double = 12.5
Dim lowRate = highRate * 0.6
Dim initialDebt = 4999.99
' Make a copy of the original value of the debt.
Dim debtWithInterest = initialDebt
' Calculate the total debt with the high interest rate applied.
' Argument highRate is a constant, which is appropriate for a
' ByVal parameter. Argument debtWithInterest must be a variable
' because the procedure will change its value to the calculated
' total with interest applied.
Calculate(highRate, debtWithInterest)
' Format the result to represent currency, and display it.
Dim debtString = Format(debtWithInterest, "C")
Console.WriteLine("What I owe with high interest: " & debtString)
' Repeat the process with lowRate. Argument lowRate is not a
' constant, but the ByVal parameter protects it from accidental
' or intentional change by the procedure.
' Set debtWithInterest back to the original value.
debtWithInterest = initialDebt
Calculate(lowRate, debtWithInterest)
debtString = Format(debtWithInterest, "C")
Console.WriteLine("What I owe with low interest: " & debtString)
End Sub
' Parameter rate is a ByVal parameter because the procedure should
' not change the value of the corresponding argument in the
' calling code.
' The calculated value of the debt parameter, however, should be
' reflected in the value of the corresponding argument in the
' calling code. Therefore, it must be declared ByRef.
Sub Calculate(ByVal rate As Double, ByRef debt As Double)
debt = debt + (debt * rate / 100)
End Sub
End Module
Commentaires sur .NET
.NET est un projet open source. Sélectionnez un lien pour fournir des commentaires :
Événements
Créer des applications intelligentes
17 mars, 21 h - 21 mars, 10 h
Rejoignez la série de rencontres pour créer des solutions IA évolutives basées sur des cas d’usage réels avec d’autres développeurs et experts.
S’inscrire maintenantEntrainement
Module
Créer des méthodes C# avec des paramètres - Training
Ce module couvre les paramètres de méthode, notamment les types de paramètres à passage par référence et passage par valeur. Ce module couvre également les arguments facultatifs et nommés.