Sobes.tech
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