28Fermer30
ZephLe 17/05/2016 à 19:20
Hmm non, l'explication de Warpten n'est pas tout à fait exacte (ou alors je ne l'ai pas comprise).

Les mots-clé "ref" et "out" permettent de passer une référence vers une instance de classe (peu importe qu'il s'agisse d'un type référence ou d'un type valeur, c'est pour ça que c'est confus). Exemple :void Pwet1(out int value) { value = 5; } void Pwet2(out List<string> list) { list = new List<string>(); } void Test() { List<string> list; int value; Pwet1(out list); Pwet2(out value); // Ici, list est une liste initialisée et value contient 5 }Avec les deux codes suivant on peut changer la valeur des paramètres, ce qui aurait été impossible sans "ref" ou "out" dans les deux cas. Plus simplement, "ref" et "out" permettent de réassigner une variable passée par l'appelant. Sans ces mots-clés on peut soit changer son contenu mais pas la faire pointer ailleurs (dans le cas d'une variable de type référence), ou bien rien du tout (dans le cas d'une variable de type valeur).

La différence entre "ref" et "out" n'existe qu'à la compilation : dans le cas de "out" le compilateur considère que tu es obligé d'assigner la variable avant de sortir de la méthode, et va râler si tu oublies. Pour "ref" il suppose que la variable est déjà assignée à l'entrée de la méthode et qu'il est acceptable de ne pas la toucher. C'est la seule différence, les deux sont ensuite compilées exactement avec les mêmes instructions.