ref
y out
permettent toutes deux à la méthode appelée de modifier un paramètre. La différence entre les deux est ce qui se passe avant vous passez l'appel.
-
ref
signifie que le paramètre a une valeur avant dans la fonction. La fonction appelée peut lire et/ou modifier la valeur à tout moment. Le paramètre entre, puis sort
-
out
signifie que le paramètre n'a pas de valeur officielle avant d'entrer dans la fonction. La fonction appelée doit l'initialiser. Le paramètre ne sort que
Voici ma façon préférée de voir les choses : ref
est de passer les variables par référence. out
est de déclarer une valeur de retour pour la fonction. C'est comme si tu pouvais écrire ça :
// This is not C#
public (bool, string) GetWebThing(string name, ref Buffer paramBuffer);
// This is C#
public bool GetWebThing(string name, ref Buffer paramBuffer, out string actualUrl);
Voici une liste plus détaillée des effets de chaque alternative :
Avant d'appeler la méthode :
ref
: L'appelant doit définir la valeur du paramètre avant de le transmettre à la méthode appelée.
out
: La méthode appelante n'est pas tenue de définir la valeur de l'argument avant d'appeler la méthode. Le plus souvent, vous ne devriez pas. En fait, toute valeur actuelle est rejetée.
Pendant l'appel :
ref
: La méthode appelée peut lire l'argument à tout moment.
out
: La méthode appelée doit initialiser le paramètre avant de le lire.
Appels à distance :
ref
: La valeur courante est marshallée à l'appel distant. Coût de performance supplémentaire.
out
: Rien n'est transmis à l'appel distant. Plus rapide.
Techniquement parlant, vous pourriez utiliser toujours ref
à la place de out
mais out
vous permet d'être plus précis sur le sens de l'argument, et parfois il peut être beaucoup plus efficace.
0 votes
A mon avis, ce n'est pas un duplicata de la question mentionnée parce que 1. il a précédé cette question 2. il y a des détails dans cette question qui ne sont pas liés au "duplicata".