Junior
Jaka jest różnica między typami referencyjnymi a typami wartości?
sobes.tech AI
Odpowiedź od AI
Różnice w sposobie przechowywania i przesyłania danych:
-
Typy wartości (Value Types):
- Są przechowywane bezpośrednio tam, gdzie zostały zadeklarowane (na stosie lub wewnątrz instancji typu wartości).
- Podczas przypisania lub przekazania przez wartość tworzona jest kopia wartości.
- Obejmują typy prymitywne (int, float, bool itp.), struktury (struct) i wyliczenia (enum).
- Są zamknięte (sealed) i nie mogą być dziedziczone.
-
Typy odwołaniowe (Reference Types):
- Są przechowywane na stercie. Zmienna zawiera nie wartość, lecz odwołanie do adresu na stercie.
- Podczas przypisania lub przekazania przez wartość, kopiowane jest tylko odwołanie, nie obiekt.
- Obejmują klasy (class), interfejsy (interface), delegaty (delegate) i tablice (array).
- Mogą wspierać dziedziczenie.
- Zbieracz śmieci zarządza zwalnianiem pamięci dla obiektów odwołaniowych, na które nie ma aktywnych odwołań.
// Przykład typu wartości (struct)
struct Point
{
public int X;
public int Y;
}
// Przykład typu odwołaniowego (class)
class Circle
{
public int Radius;
}
| Charakterystyka | Typy wartości | Typy odwołaniowe |
|---|---|---|
| Miejsce przechowywania | Stos lub wewnątrz instancji typu wartości | Sterta |
| Przekazywanie/Przypisanie | Kopia wartości | Kopia odwołania |
| Dziedziczenie | Nie | Tak |
| Zarządzanie pamięcią | Automatyczne (stos) | Zbieracz śmieci |