Aller au contenu

Méthodes avec paramètres par référence (ref et out)

"Modifier une variable sans la retourner ? En C#, on appelle ça par référence."

Un développeur pointilleux

Pourquoi passer par référence ?

En C#, les paramètres sont passés par défaut par valeur : cela signifie que la méthode reçoit une copie de la variable.
➡️ Si on modifie cette copie, l’original ne change pas.

Mais parfois, on veut qu’une méthode puisse modifier directement la valeur d’une variable définie dans le Main.
C’est là qu’interviennent ref et out.


🔁 Le mot-clé ref

  • Le paramètre doit être initialisé avant l’appel.
  • La méthode peut lire ET modifier la variable.

Exemple

void Doubler(ref int x)
{
    x *= 2;
}

int valeur = 5;
Doubler(ref valeur);
Console.WriteLine(valeur); // Affiche : 10

➡️ x est modifié directement dans la méthode, et la modification est répercutée à l’extérieur.


➕ Le mot-clé out

  • La variable peut être non initialisée avant l’appel.
  • Elle doit obligatoirement être affectée dans la méthode.

Exemple

void CalculerSomme(int a, int b, out int resultat)
{
    resultat = a + b;
}

int r;
CalculerSomme(3, 4, out r);
Console.WriteLine(r); // Affiche : 7

➡️ out est souvent utilisé pour renvoyer plusieurs résultats.


⚠️ Erreurs fréquentes

  • ❌ Oublier ref ou out à l’appel de la méthode → erreur de compilation
  • ❌ Ne pas affecter la variable out dans la méthode → erreur de compilation
  • ❌ Utiliser ref sans avoir initialisé la variable au préalable

Quiz

Testez vos connaissances ! 🧠

1️⃣ Quel est l'effet du mot-clé ref ?

A. Rendre la méthode plus rapide
B. Passer la variable par copie
C. Permettre à la méthode de modifier la variable d'origine
D. Empêcher l’utilisation de la variable dans Main
E. Affecter obligatoirement une valeur

✅ Afficher la réponse
Réponse C: Avec ref, la méthode peut modifier directement la variable d'origine.

2️⃣ Que se passe-t-il si une variable out n’est pas affectée dans la méthode ?

A. Elle prend la valeur par défaut
B. Le programme compile mais plante
C. Erreur à l'exécution
D. Erreur à la compilation
E. Rien ne se passe

✅ Afficher la réponse
Réponse D: Le compilateur exige que toute variable out soit affectée.

3️⃣ Quelle est la différence principale entre ref et out ?

A. ref permet de modifier, out permet de lire
B. ref exige une variable initialisée, out non
C. out est plus rapide
D. Aucune différence
E. out fonctionne sans déclaration

✅ Afficher la réponse
Réponse B: ref demande une variable initialisée, contrairement à out.

4️⃣ Pourquoi utiliser out au lieu d’un return ?

A. Pour ne pas avoir de valeur de retour
B. Pour modifier plusieurs variables à la fois
C. Pour améliorer les performances
D. Pour éviter les erreurs
E. Pour faire des boucles

✅ Afficher la réponse
Réponse B: out permet de renvoyer plusieurs résultats depuis une même méthode.

5️⃣ Quel code est correct ?

A. void Test(out int x) { } Console.WriteLine(x);
B. void T(ref int x) { x++; } T(5);
C. void T(out int x) { x = 3; } int a; T(out a);
D. void X(int x) { ref x = 0; }
E. void T(ref x) { x = 2; }

✅ Afficher la réponse
Réponse C: Le seul exemple correct et complet avec out.


Navigation

Introduction Sans paramètre Avec paramètre Avec retour Par référence / Out Retour multiple (out) Retour multiple (tuples) Travail pratique


Pour aller plus loin