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?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.
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;
}
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.
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.
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.
- Réponses précédentes
- Plus de réponses
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".