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 "Пётр"