Witam serdecznie.
Zaczynam naukę C#, przychodząc z JavaScriptu, także tematy zakresu wielkości typu danych czy w ogóle statyczne typowanie nie jest dla mnie codziennością.
Próbuję zrozumieć relację pomiędzy typami w C# i .NET i jako nadal zupełny laik rozumiem to w bardzo uproszczony sposób.
Cały mój tok rozumowania od absolutnych podstaw jest następujący:
- C# to język programowania
- .NET to framework umożliwiający budowanie aplikacji głównie na system Windows (bez wchodzenia w szczegóły). Framework .NET można wykorzystać nie tylko pisząc w jeżyku C#, ale np. F#, C++ czy VB .NET
.NET składa się z:
- CLR - dzięki temu narzędziu skompilowany kod C#, czyli IL Code, jest zamieniany na kod maszynowy za pomocą Just-in-time Compilation. Teoretycznie dzięki temu, jeśli dana maszyna (niezależnie od systemu operacyjnego) ma zainstalowane CLR to może uruchomić aplikację napisaną w języku "zintegrowanym" z frameworkiem .NET (np. napisaną w C#).
- Biblioteka klas
Dochodzimy do owej biblioteki klas, omówionej między innymi w oficjalnej dokumentacji i widzimy tam sposób tworzenia danego typu danych w różnych jezykach i tego typu w języku .NET.
Czy to oznacza, że jeżeli ja pisząc następujący kod w C#:
int sampleVariable = 10;
skompiluję go, to w trakcie kompilacji powyższa zmienna jest mapowana (takie słowo znalazłem, ale nie wiem co ono oznacza w tym kontekście) z typu int na typ zrozumiały w .NET, czyli System.Int32?
Jeżeli dobrze to rozumiem to dlaczego i po co to się dzieje? Czy ta wiedza mi jest w ogóle potrzebna?
Ponadto doczytałem, że System.Int32 zawiera się w FCL - Framework Class Library. Jak się to ma do BCL, czyli Base Class Library i tak prosto ujmując po co jest FCL i BCL oraz czym się różnią?
Dlaczego w moim kodzie jak wyżej ze zmienną typu int nie wykorzystam dyrektywy using System; (ogólnie nic nie zaimportuje do projektu) gdzie jak zakładam takie prymitywne typy jak int są zdefiniowane, to dlaczego to nadal działa? Czy to się jakoś wiąże z BCL?
Proszę o dokładne i spokojne wytłumaczenie. Proszę nie zakładać, że mam jakąkolwiek wiedzę, bo powyższe co napisałem, glównie wiem z suchej teorii i nie miałem okazji nigdzie grzebać w kodzie bibliotek i przekonać się jak to działa pod maską na własne oczy. Za możliwie jak najprostsze wytłumaczenie z całego serca dziękuję.