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

9voto

Krishna Thota Points 960

Paramètres Ref et Out :

El out y el ref Les paramètres sont utilisés pour retourner des valeurs dans la même variable, que vous passez comme argument d'une méthode. Ces deux paramètres sont très utiles lorsque votre méthode doit retourner plus d'une valeur.

Vous devez attribuer une valeur au paramètre out dans le corps de la méthode calee, sinon la méthode ne sera pas compilée.


Paramètre de référence : Il doit être initialisé avant d'être transmis à la méthode. Le site ref sur un paramètre de méthode fait en sorte que la méthode se réfère à la même variable qui a été passée comme paramètre d'entrée pour la même méthode. Toute modification apportée à cette variable sera répercutée dans la variable.

int sampleData = 0; 
sampleMethod(ref sampleData);

Ex de Ref Paramètre

public static void Main() 
{ 
 int i = 3; // Variable need to be initialized 
 sampleMethod(ref i );  
}

public static void sampleMethod(ref int sampleData) 
{ 
 sampleData++; 
} 

Paramètre de sortie : Il n'est pas nécessaire de l'initialiser avant de le passer à la méthode. Le site out peut être utilisé pour retourner les valeurs de la même variable passée en paramètre de la méthode. Toute modification apportée au paramètre sera répercutée sur la variable.

 int sampleData; 
 sampleMethod(out sampleData);

Ex du paramètre Out

public static void Main() 
{ 
 int i, j; // Variable need not be initialized 
 sampleMethod(out i, out j); 
} 
public static int sampleMethod(out int sampleData1, out int sampleData2) 
{ 
 sampleData1 = 10; 
 sampleData2 = 20; 
 return 0; 
} 

7voto

Nazmul Hasan Points 4930

Dehors :

En C#, une méthode ne peut renvoyer qu'une seule valeur. Si vous souhaitez renvoyer plus d'une valeur, vous pouvez utiliser le mot-clé out. Le modificateur out renvoie comme un retour par référence. La réponse la plus simple est que le mot clé "out" est utilisé pour obtenir la valeur de la méthode.

  • Vous n'avez pas besoin d'initialiser la valeur dans la fonction appelante.
  • Vous devez affecter la valeur dans la fonction appelée, sinon le compilateur signalera une erreur.

réf :

En C#, lorsque vous passez un type de valeur tel que int, float, double etc. comme argument au paramètre de la méthode, il est passé par valeur. Par conséquent, si vous modifiez la valeur du paramètre, cela n'affecte pas l'argument dans l'appel de la méthode. Mais si vous marquez le paramètre avec le mot clé "ref", cela se reflétera dans la variable actuelle.

  • Vous devez initialiser la variable avant d'appeler la fonction.
  • Il n'est pas obligatoire d'attribuer une valeur au paramètre ref dans la méthode. Si vous ne changez pas la valeur, quel est le besoin de le marquer comme "ref" ?

4voto

Patrick Points 20392

Les paramètres Ref n'ont pas besoin d'être définis dans la fonction, tandis que les paramètres Out doivent être liés à une valeur avant de quitter la fonction. Les variables passées en tant que out peuvent également être transmises à une fonction sans être initialisées.

4voto

Alan Points 21367

out spécifie que le paramètre est un paramètre de sortie, c'est-à-dire qu'il n'a pas de valeur tant qu'il n'est pas explicitement défini par la méthode.

ref précise que la valeur est une référence qui a une valeur, et dont vous pouvez modifier la valeur à l'intérieur de la méthode.

2voto

Henk Holterman Points 153608

La réponse est évidente : ref signifie entrée et sortie, out signifie uniquement la sortie. Cela a des conséquences pour la méthode C# définitivement attribué le suivi :

void foo(ref int x, out int y)
{
    x = y; // Error: y is not definitely assigned
    y = x; // OK        
}

...
   int a, b;
   foo(
      ref a,  // Error: a is not definitely assigned
      out b); // OK

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