203 votes

Quelle est l’utilisation de « ref » pour les variables de type référence en c# ?

Je comprends que si je passe une valeur de type (int, struct, etc.) comme un paramètre (sans l' ref mot-clé), une copie de cette variable est passée à la méthode, mais si j'utilise l' ref mot-clé une référence à cette variable est passée, pas une nouvelle.

Mais avec référence-types, comme les classes, même sans l' ref mot-clé, une référence est passé à la méthode, pas une copie. Alors, quelle est l'utilisation de l' ref mot-clé de référence-types?


Prenons, par exemple:

var x = new Foo();

Quelle est la différence entre la suivante?

void Bar(Foo y) {
    y.Name = "2";
}

et

void Bar(ref Foo y) {
    y.Name = "2";
}

179voto

user7116 Points 39829

Vous pouvez modifier ce qui pointe vers à l’aide de :

34voto

Mehrdad Afshari Points 204872

Il y a des cas où vous souhaitez modifier la réelle référence et non l’objet pointé :

22voto

Noldorin Points 67794

Jon Skeet a écrit un excellent article à propos de la transmission de paramètres en C#. Il détaille clairement le exacte du comportement et de l'utilisation de passage de paramètres par valeur, par référence (ref), et par sortie (out).

Voici un important citation de la page par rapport à l' ref paramètres:

Des paramètres de référence ne passe pas l' les valeurs des variables utilisées dans l' la fonction de membre d'invocation qu'ils utilisent les variables elles-mêmes. Plutôt que de la création d'un nouvel emplacement de stockage pour la variable dans la fonction membre déclaration, le même emplacement de stockage est utilisé, de sorte que la valeur de la variable dans la fonction de membre et la valeur de la valeur de référence sera toujours être le même. Des paramètres de référence nécessaire la ref modificateur tant dans le cadre des la déclaration et l'invocation que signifie qu'il est toujours clair quand vous êtes transmission de quelque chose par référence.

10voto

Rytmis Points 15848

Lorsque vous passez un type de référence avec le mot clé ref, vous passez la référence par référence, et la méthode que vous appelez peut assigner une nouvelle valeur pour le paramètre. Ce changement se propagent à la portée en appel. Sans Réf, la référence est passée par valeur, et cela ne se produit.

C# a aussi le mot-clé « out » qui est un peu comme ref, sauf qu’avec « ref », les arguments doivent être initialisées avant d’appeler la méthode, et avec « out », vous devez attribuer une valeur à la méthode de réception.

5voto

HVS Points 1219

Il vous permet de modifier la référence passée dans. par exemple

Vous pouvez également utiliser dehors si vous ne se souciez la référence passée dans :

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