W tym i kolejnych postach postaram się przybliżyć wam typy danych, wykorzystywanych w C# do określenia typu zmiennych.
Zanim jednak przejdę do opisu poszczególnych typów, zacznę od takich pojęć jak :
- “Stos”
- “Sterta”.
jaka jest między nimi różnica i do czego są wykorzystywane w programowaniu w C#.
Po pierwsze, i chyba najważniejsze to nie należy tych pojęć mylić ze strukturami do przechowywania danych, możliwych do implementacji w wielu językach. Stos tak samo jak i sterta są częścią pamięci wirtualnej jaka jest przydzielona aplikacji podczas uruchamiania.
Każdy utworzony wątek w aplikacji którą będziemy tworzyć, będzie wykorzystywał osobny stos, idąc za tym oznacza to że jedna aplikacja może mieć ich kilka wątków a tym samym kilka stosów. Na stosie lądują wszelkie zmienne oraz parametry przekazywane do funkcji.
Z punktu widzenia programisty stos jest pomijany, tzn że pisząc program/aplikacje, nie musimy pamiętać o nim. Porządek na stosie w pewnym sensie utrzymuje system. Deklarując zmienną trafia ona na stos i zostaje z niego usunięta (bądź jak mówią niektórzy, zdjęta), wtedy gdy wypadnie poza klamry zasięgu (lub mówiąc potocznie blok kodu {}).
Sterta jest miejscem w pamięci wirtualnej procesu, gdzie trafiają wszelkie klasy i ich instancje. Ponadto w języku C# na stertę trafiają także interfejsy, tablice ale również delegaty. Sterta jest zarządzana nie przez system operacyjny, a przez wirtualną maszynę .NET. Elementy trafiające na stertę są tworzone operatorem new którego zasada działania jest bardziej skomplikowana niż zwykła deklaracja zmiennych lądujących na stos. W C# w odróżnieniu od innych podobnych języków typu C++, nie musisz pamiętać o zwalnianiu pamięci, pamięć w C# jest kontrolowany przez garbage collector (tzw. śmietnik) , który ma za zadanie wyszukać puste referencje i je usunąć, tym samym zwalniając miejsce w pamięci.
Na ten moment i poziom mojej wiedzy, nie będę dalej się rozpisywał na temat stery czy stosu, bo nie chciałbym przekazywać wam, informacji nie do końca sprawdzonych bądź też błędnych. A w tym blogu nie o to chodzi.
W każdym bądź razie C# jest językiem, który jest bardzo zautomatyzowany, wiele rzeczy wykonywanych jest poza naszą wiedzą.
Przejdźmy jednak do naszych typów.
Zmienne w C# możemy podzielić na 3 podstawowe rodzaje:
- wartościowe,
- referencyjne,
- wskaźnikowe.