410 votes

Différence entre les paramètres ref et out dans .NET

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 ?

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".

0voto

casademora Points 15214

Este _Le paramétre out et ref en C#_ présente quelques bons exemples.

La différence fondamentale soulignée est la suivante out n'ont pas besoin d'être initialisés lorsqu'ils sont passés, alors que les paramètres ref doivent l'être.

0voto

Jacob Proffitt Points 8187

Out et ref sont exactement les mêmes, à l'exception des variables out qui n'ont pas besoin d'être initialisées avant d'être envoyées dans l'abîme. Je ne suis pas si intelligent, j'ai piqué ça dans la bibliothèque MSDN :).

Pour être plus explicite sur leur utilisation, cependant, la signification du modificateur est que si vous changez la référence de cette variable dans votre code, out et ref feront en sorte que votre variable appelante change également de référence. Dans le code ci-dessous, la variable ceo sera une référence au newGuy lorsqu'il reviendra de l'appel à doStuff. Si ce n'était pas pour ref (ou out), la référence ne serait pas changée.

private void newEmployee()
{
    Person ceo = Person.FindCEO();
    doStuff(ref ceo);
}

private void doStuff(ref Person employee)
{
    Person newGuy = new Person();
    employee = newGuy;
}

0voto

Ranganatha Points 89

Cuando paramètre de sortie est déclaré dans la déclaration de la méthode, le corps de la méthode doit affecter une valeur à la variable out avant de retourner. Il est donc de la responsabilité de l'appelé d'assigner une valeur au paramètre out avant son retour.

Où comme quand paramètre de référence est déclarée dans la méthode, l'argument passé lors de l'invocation de la méthode devrait se voir attribuer la valeur. Il est donc de la responsabilité de l'appelant d'assigner la valeur de l'argument ref avant d'appeler la méthode.

0voto

jpaugh Points 1543

Ils sont subtilement différents.

Un site out n'a pas besoin d'être initialisé par le destinataire avant d'être transmis à la méthode. Par conséquent, toute méthode avec un paramètre out paramètre

  • Impossible de lire le paramètre avant de lui attribuer une valeur
  • Il faut lui attribuer une valeur avant de le renvoyer

Ceci est utilisé pour une méthode qui doit écraser son argument quelle que soit sa valeur précédente.


A ref doit être initialisé par le destinataire avant d'être transmis à la méthode. Par conséquent, toute méthode avec un paramètre ref paramètre

  • Peut inspecter la valeur avant de l'assigner
  • Peut retourner la valeur originale, intacte.

Elle est utilisée pour une méthode qui doit (par exemple) inspecter sa valeur et la valider ou la normaliser.

0voto

Marc Ziss Points 106

Out a obtenu une nouvelle syntaxe plus succincte dans C#7 https://docs.microsoft.com/en-us/dotnet/articles/csharp/whats-new/csharp-7#more-expression-bodied-members Les améliorations apportées aux tuple en C#7, qui constituent un choix plus élégant que l'utilisation de ref et out, sont encore plus intéressantes.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X