Najważniejszą różnicą jest to, że wszystkie typy wartościowe trzymają dane na stosie, a referencyjne na stercie. Na stosie trzymany jest jedynie wskaźnik (referencja) do obszaru pamięci na stercie, gdzie przechowywane będą wartości dla stworzonego typu referencyjnego. Gdy zmienimy wartość typu referencyjnego, zmieni się wartość wszystkich zmiennych trzymających referencję do niej.

Tworząc typ referencyjny nigdy nie wiemy ile miejsca zajmie dany obiekt. W przypadku typów wartościowych znamy tę informację w momencie zadeklarowania. Na przykład w przypadku typu double będzie to 8 bajtów.

Kopiując type referencyjne nie możemy korzystać z operatora przypisania tak jak w przypadku typów wartościowych.

Typy wartościowe dziedziczą po klasie Object.ValueType natomiast referencyjne bezpośrednio po klasie Object.

  • byte
  • char
  • bool
  • int
  • double
  • long
  • struktury
  • enum

  • klasy
  • interfejsy
  • delegaty
  • instancje
  • tablice
  • łańcuchy znaków (string)

czerwo 14-10-2018 09:36
Dodałbym do tego jeszcze jedną informację że typy proste są zarządzane przez maszynę wirtualną .NET a typy referencyjne przez Garbage Collector

alsenq 02-02-2022 01:56
Przydałyby się jakieś proste schematy gdzie w pamięci trzymane są typy referencyjne i typy wartościowe. Jakie są zależności itp.


© 2024 - SkillsTest.pl | | Regulamin | Polityka Prywatnosci