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?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;
}
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" ?
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
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".