Types valeur vs référence

Une struct se copie, une class se partage. Cette différence explique un paquet de bugs subtils. Prédisez chaque résultat.

En C#, un type valeur (struct, int, bool…) se copie à l'affectation ; un type référence (class) se partage. Comprendre ça, c'est éviter des heures de débogage. Devinez la sortie de chaque extrait.

Pile vs Tas : où vivent tes données

Deux choses font toute la différence : où est stockée la donnée, et ce qui est copié quand on affecte la variable. Un type valeur contient la donnée elle-même (copiée en entier) ; un type référence ne contient qu'un renvoi vers la donnée (la copie pointe sur le même objet). À gauche, un type valeur ; à droite, un type référence.

Type valeur (struct, int…)
PILE (STACK) int x = 5; int y = x; x 5 y 5 copie copier copie la VALEUR → deux exemplaires indépendants modifier y ne change pas x
Type référence (class, object…)
PILE (STACK) TAS (HEAP) var a = new P(); var b = a; a référence b référence P (objet) { Nom = "Léa", Age = 30 } copier copie la RÉFÉRENCE → a et b partagent le même objet modifier via b se voit via a

Un type valeur est sa donnée (sur la pile) ; un type référence est une flèche vers l'objet (sur le tas). D'où le piège : copier une référence ne duplique pas l'objet — les deux variables le partagent.

Retour aux outils