Quelle est la différence entre ref
y out
dans .NET ? Quelles sont les situations où l'un peut être plus utile que l'autre ? Quel serait un extrait de code où l'un peut être utilisé et pas l'autre ?
Réponses
Trop de publicités?out
Les paramètres sont initialisés par la méthode appelée, ref
sont initialisés avant l'appel de la méthode. Par conséquent, out
sont utilisés lorsque vous avez simplement besoin d'obtenir une valeur de retour secondaire, ref
les paramètres sont utilisés pour obtenir une valeur y retourner potentiellement une modification de cette valeur (secondairement à la valeur de retour principale).
Le mot-clé ref est utilisé pour transmettre des valeurs par référence. (Cela n'exclut pas que les valeurs transmises soient des types de valeur ou des types de référence). Les paramètres de sortie spécifiés avec le mot-clé out servent à renvoyer des valeurs à partir d'une méthode.
Une différence essentielle dans le code est que vous devez définir la valeur d'un paramètre de sortie au sein de la méthode. Ce n'est pas le cas pour les paramètres ref.
Pour plus de détails, consultez le site http://www.blackwasp.co.uk/CSharpMethodParameters.aspx
Un site out
est un paramètre ref
avec un paramètre spécial Out()
attribut ajouté. Si un paramètre d'une méthode C# est déclaré en tant que out
le compilateur exigera que le paramètre soit écrit avant d'être lu et avant que la méthode puisse retourner. Si C# appelle une méthode dont le paramètre comprend un élément Out()
le compilateur, pour décider s'il doit signaler des erreurs de type "variable indéfinie", fera comme si la variable était écrite immédiatement avant l'appel de la méthode. Notez que, comme les autres langages .net n'attachent pas la même signification à l'attribut Out()
il est possible que l'appel d'une routine avec un attribut out
n'affectera pas la variable en question. Si une variable est utilisée comme un out
avant qu'elle ne soit définitivement affectée, le compilateur C# générera du code pour s'assurer qu'elle est effacée à un moment donné avant d'être utilisée, mais si une telle variable quitte et réintègre la portée, il n'y a aucune garantie qu'elle sera à nouveau effacée.
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".