Sobes.tech
Junior — Middle

Explique ce que sont les types de données qui stockent des références aux objets en mémoire, et en quoi ils diffèrent des types de valeur.

sobes.tech IA

Réponse de l'IA

En C#, les types de données se divisent en types de valeur (value types) et types de référence (reference types).

  • Les types de référence stockent dans la variable non pas les données elles-mêmes, mais une référence (pointeur) vers la zone mémoire où se trouvent les données de l'objet. Exemples : classes (class), chaînes (string), tableaux.

  • Les types de valeur stockent directement les données dans la variable. Exemples : structures (struct), énumérations (enum), types de base (int, bool, etc.).

Différences :

  • Lors de l'assignation d'un type de valeur, les données sont copiées, tandis que pour un type de référence, la référence à l'objet est copiée.
  • Les types de référence sont placés dans le tas géré, tandis que les types de valeur sont généralement dans la pile ou à l'intérieur d'autres objets.
  • Les modifications apportées à un type de référence via une référence sont visibles dans d'autres références au même objet, alors que les copies de types de valeur sont indépendantes.

Exemple :

class Person { public string Name; }

struct Point { public int X, Y; }

Person p1 = new Person { Name = "Alice" };
Person p2 = p1; // référence copiée
p2.Name = "Bob";
Console.WriteLine(p1.Name); // Affichera "Bob" — les deux référencent le même objet

Point pt1 = new Point { X = 1, Y = 2 };
Point pt2 = pt1; // données copiées
pt2.X = 10;
Console.WriteLine(pt1.X); // Affichera 1 — les copies sont indépendantes