Sobes.tech
Junior — Middle

Czym różnią się typy referencyjne od typów wartości w C# i jakie są ich główne różnice w użyciu?

sobes.tech AI

Odpowiedź od AI

W C# typy dzielą się na typy wartościowe (value types) i typy referencyjne (reference types).

Typy wartościowe przechowują dane bezpośrednio. Przykłady: int, double, struct. Przy przypisaniu lub przekazaniu do metody, kopiuje się sama wartość, czyli tworzona jest niezależna kopia.

Typy referencyjne przechowują odwołanie do obiektu w pamięci (na stercie). Przykłady: class, string, tablice. Przy przypisaniu kopiowane jest odwołanie, a nie obiekt, więc kilka zmiennych może odwoływać się do tego samego obiektu.

Główne różnice:

  • Przechowywanie: typy wartościowe zazwyczaj na stosie, referencyjne — na stercie.
  • Kopiowanie: typy wartościowe są kopiowane przez wartość, referencyjne — przez odwołanie.
  • Zachowanie przy zmianie: zmiana typu wartościowego nie wpływa na inne kopie, zmiana obiektu typu referencyjnego odzwierciedla się na wszystkich odwołaniach.

Przykład:

int a = 5;
int b = a; // kopia wartości
a = 10; // a pozostanie 5

class Osoba { public string Imie; }
Osoba p1 = new Osoba { Imie = "Иван" };
Osoba p2 = p1; // kopia odwołania
p2.Imie = "Пётр"; // p1.Imie również zmieni się na "Пётр"