C# 12 i .NET 8 dla programistów aplikacji wieloplatformowych. Twórz aplikacje, witryny WWW oraz serwisy sieciowe za pomocą ASP.NET Core 8, Blazor i EF Core 8. Wydanie VIII - Mark J. Price

Kup książkę

179.00 zł
109.19 zł (107,40 zł najniższa cena z 30 dni)

-
Proszę czekać

Wstęp

Istnieją opasłe książki o programowaniu, które chcą być kompletnymi podręcznikami opisującymi język C#, platformę .NET oraz modele aplikacji, takie jak witryny WWW, serwisy albo aplikacje stacjonarne i mobilne.

Moja książka jest inna. Jest zwięzła i powinna być płynną i zabawną lekturą, wypełnioną praktycznymi poradami na każdy temat. Szerokość omawianego materiału sprawia, że nie możemy zagłębić się w szczegóły, ale jeśli zechcesz, to znajdziesz wiele wskazówek do dalszych eksploracji.

Książka ta z jednej strony jest przewodnikiem, który krok po kroku zapoznaje czytelnika z nowoczesnymi praktykami sprawdzonymi w języku C# oraz na wieloplatformowym frameworku .NET. Zawiera także krótkie wprowadzenie do głównych typów aplikacji, które można zbudować za pomocą tych dwóch elementów. Najlepiej sprawdzi się dla początkujących programistów języka C# i frameworka .NET albo dla tych, którzy pracowali już wcześniej z językiem C#, jednak czują, że nie nadążają za zmianami, które nastąpiły w ciągu ostatnich kilku lat.

Jeśli masz już doświadczenie w programowaniu w starszych wersjach języka C#, to w pierwszym temacie z rozdziału 2., "Mówimy w C#", możesz przejrzeć tabele nowych funkcji języka i przejść bezpośrednio do ich opisów.

Jeśli masz doświadczenie ze starszymi wersjami platformy .NET, to w pierwszej części rozdziału 7., "Poznawanie typów .NET", możesz przejrzeć tabele nowych funkcji tej platformy oraz przejść bezpośrednio do ich opisów.

W tej książce postaram się pokazać ciekawe elementy i kruczki języka C#, tak żeby czytelnik mógł zaskoczyć swoich kolegów i przełożonych oraz szybko zacząć efektywną pracę. Zamiast spowalniać tempo czytania i zanudzać Cię opisami drobnych szczegółów, zakładam, że będziesz wystarczająco sprytny, aby móc znaleźć w internecie powiązane tematy, które nie są konieczne do uwzględnienia w przewodniku dla początkujących lub średnio zaawansowanych programistów.

W niektórych rozdziałach znajdziesz linki do treści dostępnych w internecie. Są one przeznaczone dla Czytelników, którzy chcieliby dowiedzieć się więcej. Na przykład z rozdziałem 1., "Cześć, C#! Witaj, .NET!", powiązana jest część dostępna w internecie, w której prezentuję historię platformy .NET.

Gdzie znaleźć przykładowy kod z tej książki?

Możesz pobrać rozwiązania z ćwiczeniami krok po kroku tworzonymi w książce z repozytorium GitHub dostępnego pod adresem https://github.com/markjprice/cs12dotnet8.

Jeśli nie wiesz, jak to zrobić, to na końcu rozdziału 1., "Cześć, C#! Witaj, .NET!" podam niezbędne instrukcje.

Spolonizowane kody źródłowe są dostępne pod adresem https://ftp.helion.pl/przyklady/c12n88.zip.

Co znajdziesz w tej książce?

Rozdział 1., "Cześć, C#! Witaj, .NET!", poświęcony jest konfigurowaniu środowiska programistycznego i wykorzystywaniu Visual Studio 2022 lub Visual Studio Code z pakietem C# Dev Kit do tworzenia najprostszych aplikacji w języku C# i na platformie .NET. Do tworzenia uproszczonych aplikacji konsoli wykorzystamy funkcję programu najwyższego poziomu, wprowadzoną w języku C# 9 i używaną domyślnie od wersji C# 10. Do nauki prostych konstrukcji językowych i funkcji bibliotek posłużą nam interaktywne notatniki .NET. Dowiesz się również, gdzie najlepiej szukać pomocy, używając do tego narzędzi sztucznej inteligencji, takich jak ChatGPT lub GitHub Copilot.

W rozdziale 2., "Mówimy w C#", prezentuję różne wersje języka C#, jak również tabele pokazujące, jakie funkcje języka pojawiły się w określonej wersji. Objaśniam też gramatykę i słownictwo, którego będziemy używać na co dzień w trakcie pisania kodu aplikacji. W szczególności dowiesz się tutaj, jak zadeklarować zmienne różnych typów i jak z nimi pracować.

W rozdziale 3., "Sterowanie przepływem i konwertowanie typów", zajmiemy się używaniem operatorów do wykonywania prostych czynności na zmiennych, np. porównań. Zaczniemy też pisać kod, który podejmuje decyzje, wykorzystuje dopasowanie wzorców, powtarza blok instrukcji i konwertuje wartości między różnymi typami. Poznasz też defensywny styl tworzenia kodu, tak żeby prawidłowo obsługiwać błędy, które z całą pewnością się pojawią. Wykorzystamy tu takie klauzule zabezpieczające jak ThrowIfLessThan z klasy ArgumentOutOfRangeException, wprowadzone w .NET 8.

Rozdział 4., "Pisanie, debugowanie i testowanie funkcji", w całości dotyczyć będzie zasady DRY (ang. don't repeat yourself - nie powtarzaj się) i będziemy w nim tworzyć funkcje do ponownego wykorzystania, używając do tego stylu imperatywnego i funkcyjnego. Nauczymy się też używać narzędzi do debugowania, aby wykrywać i usuwać z kodu ewentualne błędy, i monitorować działanie wykonywanego właśnie kodu, aby diagnozować różne problemy. Poznamy też sposoby rygorystycznego testowania kodu w celu usunięcia błędów i uzyskania odpowiednio stabilnego i solidnego kodu, który będzie można przekazać do produkcji.

W rozdziale 5., "Tworzenie własnych typów w programowaniu obiektowym", omówię wszystkie kategorie elementów, które mogą wchodzić w skład typu, takie jak pola do przechowywania danych oraz metody wykonujące różne operacje. Poznasz tutaj różne pojęcia związane z programowaniem obiektowym, takie jak agregacja lub hermetyzacja. Zaprezentuję też funkcje języka takie jak składnia krotek, zmienne typu out, domyślne wartości literałów albo wnioskowanie nazw krotek. Dowiesz się również, jak używać słowa kluczowego record do definiowania typów niezmiennych i jak z nimi pracować, jak tworzyć właściwości inicjowane oraz jak używać wyrażenia with wprowadzonego w C# 9. Sprawdzimy też, jak działa wprowadzone w C# 11 słowo kluczowe required, które pozwala ograniczyć użycie konstruktorów do inicjalizowania obiektów. Omówię też wprowadzone w C# 12 konstruktory podstawowe dla typów nierekordowych.

W rozdziale 6., "Implementowanie interfejsów i dziedziczenie klas", zajmiemy się wywodzeniem nowych typów z już istniejących za pomocą mechanizmów programowania obiektowego (OOP). Nauczysz się definiować własne operatory, a także funkcje lokalne, delegaty i zdarzenia, Dowiesz się, jak implementować interfejsy w klasie bazowej i wywiedzionej, jak pokrywać elementy klasy, jak korzystać z polimorfizmu, jak tworzyć metody rozszerzające i jak rzutować pomiędzy klasami z tej samej hierarchii dziedziczenia. Omówię też poważną zmianę wprowadzoną w C# 8, czyli nullowalne typy referencyjne, które stały się domyślnym sposobem pracy w C# 10 i nowszych wersjach. Dowiesz się także, w jaki sposób można wykorzystać analizatory do tworzenia lepszego kodu.

W rozdziale 7., "Poznawanie typów .NET", przedstawiam wersje platformy .NET oraz tabele opisujące poszczególne wersje, w których wprowadzono nowe funkcje. Następnie omawiam typy dostępne na platformie .NET zgodne z .NET Standard oraz ich związki z językiem C#. Nauczysz się tu pisać i kompilować kod w dowolnym z obsługiwanych systemów operacyjnych: Windows, macOS i Linux. Dowiesz się też, jak tworzyć pakiety dla swoich aplikacji i bibliotek. W dwóch opcjonalnych sekcjach dostępnych w internecie nauczysz się korzystać ze starszych bibliotek .NET Framework w projektach nowoczesnego .NET i dowiesz się, jak przenosić stary kod tworzony dla .NET Framework na nowsze platformy. Poznasz też generatory kodu i nauczysz się ich używać.

Rozdział 8., "Używanie typów .NET", poświęcony zostanie typom definiowanym przez .NET, które pozwalają naszym aplikacjom wykonywać standardowe i często powtarzane zadania, takie jak manipulowanie liczbami i tekstem, zapisywanie elementów w kolekcjach oraz (w opcjonalnych częściach dostępnych w internecie) praca w środowisku sieciowym z wykorzystaniem typów niskopoziomowych. Dowiesz się też, jak działają wyrażenia regularne, i poznasz usprawnienia ułatwiające pisanie tych wyrażeń. Zaprezentuję również generatory kodu źródłowego, pozwalają zwiększyć wydajność pracy wyrażeń regularnych.

W rozdziale 9., "Praca z plikami, strumieniami i serializacją", zajmiemy się interakcją z systemem plików, odczytywaniem i zapisywaniem danych do plików i strumieni, kodowaniem tekstu oraz serializacją formatów takich jak JSON i XML. Omówię też usprawnione klasy System.Text.Json. Jeżeli używasz Linuksa, to z pewnością zainteresują Cię programowe sposoby pracy z archiwami tar, o których będę mówił w opcjonalnej części dostępnej w internecie.

W rozdziale 10., "Praca z bazami danych przy użyciu Entity Framework Core", opisywać będę metody odczytywania i zapisywania danych w bazach danych, takich jak Microsoft SQL Server lub SQLite, z wykorzystaniem technologii odwzorowywania relacji obiektów (ORM) o nazwie Entity Framework Core. Nauczysz się tutaj definiować modele encji odwzorowywane na tabele w bazie danych, stosując modele w systemie najpierw baza danych (ang. database first). Spróbujemy też wykorzystać modele w systemie najpierw kod (ang. Code First), które mogą tworzyć tabele i bazy danych w trakcie pracy programu.

W rozdziale 11., "Odczytywanie danych i manipulowanie nimi za pomocą LINQ", nauczysz się posługiwać zapytaniami LINQ, czyli rozszerzeniami języka zwiększającymi możliwości pracy z sekwencjami elementów o operacje filtrowania, sortowania i wybierania. W tym rozdziale opiszę też nowe metody LINQ, które zostały wprowadzone w .NET 6, takie jak TryGetNonEnumeratedCount i DistinctBy, a także metody wprowadzone w .NET 7, takie jak Order i OrderDescending. W opcjonalnej części dostępnej w internecie poznasz również szczególne możliwości funkcji PLINQ (Parallel LINQ) oraz LINQ to XML.

W rozdziale 12., "Wprowadzenie do tworzenia stron WWW za pomocą ASP.NET Core", zaprezentuję rodzaje aplikacji WWW, które można zbudować za pomocą języka C# i platformy .NET. Przygotujemy tu również model EF Core reprezentujący bazę danych fikcyjnej firmy Northwind, którego będziemy używać w pozostałej części tej książki. Na końcu rozdziału znajdzie się wprowadzenie do typowych technologii sieci WWW.

Rozdział 13., "Tworzenie witryn WWW przy użyciu ASP.NET Core Razor Pages", zostanie poświęcony podstawom tworzenia witryn internetowych z wykorzystaniem nowoczesnej architektury HTTP po stronie serwera zbudowanej za pomocą biblioteki ASP.NET Core. Poznasz tutaj nową funkcję ASP.NET Core nazywaną Razor Pages, która upraszcza tworzenie dynamicznych stron WWW dla niewielkich witryn oraz sposób tworzenia potoku obsługi żądań i odpowiedzi HTTP. W dwóch opcjonalnych częściach dostępnych w internecie nauczysz się korzystać z bibliotek klas Razor oraz ponownie wykorzystywać istniejące już strony Razor. Dowiesz się też, jak włączyć w swoim projekcie obsługę protokołu HTTP/3.

Dostępny wyłącznie w internecie rozdział "Tworzenie aplikacji WWW przy użyciu ASP.NET Core MVC" jest poświęcony metodom tworzenia wielkich, złożonych witryn internetowych w sposób ułatwiający testowanie za pomocą testów jednostkowych oraz jednoczesną pracę wielu zespołów programistów używających ASP.NET Core MVC. Nauczysz się tutaj przygotowywać konfigurację startową, wykorzystywać mechanizmy uwierzytelniania, definiowania ścieżek, modeli, widoków i kontrolerów. Poznasz też długo wyczekiwaną przez społeczność .NET funkcję o nazwie buforowanie wyjścia (ang. output cacheing), która została wprowadzona w ASP.NET Core 7. Rozdział ten zajdziesz pod adresem https://ftp.helion.pl/przyklady/c12n88.zip.

W rozdziale 14., "Tworzenie i używanie serwisów sieciowych", przedstawię zasady tworzenia usług sieciowych w architekturze REST przy użyciu interfejsu ASP.NET Core Web API oraz prawidłowego korzystania z nich przy użyciu automatycznie tworzonych klientów HTTP. Omówię również sposoby dokumentowania i testowania tych usług za pomocą OpenAPI. W dwóch częściach dostępnych wyłącznie w internecie zajmiemy się zaawansowanymi funkcjami, takimi jak kontrola dostępności usługi i dodawanie zabezpieczających nagłówków HTTP. Zajmiemy się też minimalnymi API oraz sposobom wykorzystywania kompilacji AOT (ang. ahead of time - (kompilacje) wyprzedzające) w procesie publikowania aplikacji, co skraca czas uruchamiania i zmniejsza zapotrzebowanie na pamięć.

W rozdziale 15., "Tworzenie interfejsów użytkownika w technologii Blazor", prezentuję sposób tworzenia komponentów interfejsu użytkownika w aplikacjach WWW za pomocą technologii Blazor, które można uruchamiać zarówno po stronie serwera, jak i po stronie klienta, w przeglądarce użytkownika. Zobaczysz tutaj różnice między rozwiązaniami Blazor Server i Blazor WebAssembly oraz poznasz nowy model hostowania aplikacji wprowadzony w .NET 8.

W epilogu zaprezentuję dalsze możliwości, z jakich możesz skorzystać, aby kontynuować naukę języka C# i platformy .NET.

W dodatku A "Odpowiedzi na pytania z testów" znajdą się odpowiedzi na wszystkie pytania znajdujące się na końcu każdego z rozdziałów.

Czego potrzebujesz?

Programy w języku C# i w .NET przy użyciu Visual Studio można tworzyć na wielu platformach, takich jak Windows, macOS i różne warianty Linuksa. Aby ukończyć prace z wszystkich oprócz jednego z rozdziałów, potrzebujesz jedynie systemu operacyjnego obsługującego Visual Studio Code oraz połączenia internetowego.

Jeżeli wolisz korzystać z Visual Studio 2022 dla Windows lub dla macOS albo zewnętrznych edytorów, takich jak JetBrains Rider, to nic nie stoi na przeszkodzie.

Konwencje

W tej książce użyłem kilku stylów tekstu, aby wyróżnić różne rodzaje informacji. Oto przykłady zastosowanych stylów wraz z opisem ich znaczenia.

Nowe pojęcia i ważne słowa zostaną wyróżnione pogrubieniem. Słowa, które będą się pojawiać na ekranie, np. pozycje menu albo nazwy okien dialogowych, będę wyróżniał w tekście w ten sposób: "Kliknij przycisk Dalej, żeby przejść do następnego ekranu".

Umieszczane w tekście słowa kluczowe, nazwy tabel baz danych i teksty wpisywane przez użytkownika wyróżniane będą za pomocą takiego stylu: "Klasa Produkt definiuje właściwości odwzorowujące pola z tabeli Produkty". Z kolei nazwy folderów, nazwy plików, rozszerzenia nazw plików, ścieżki i adresy URL będą wyróżniane w ten sposób: "Foldery Controllers, Models i Views przechowują klasy ASP.NET Core oraz plik .cshtml, które będą wykorzystywane po stronie serwera".

Blok kodu zapisywany będzie w ten sposób:

// zapisywanie elementów pod określonymi indeksami
imiona[0] = "Kasia";
imiona[1] = "Jacek";
imiona[2] = "Radek";
imiona[3] = "Tomek";

Jeżeli będę chciał zwrócić Twoją uwagę na określoną część bloku kodu, to wyróżnię go za pomocą pogrubienia, tak jak poniżej:

// zapisywanie elementów pod określonymi indeksami
imiona[0] = "Kasia";
imiona[1] = "Jacek";
imiona[2] = "Radek";
imiona[3] = "Tomek";

Wszystkie polecenia wpisywane w wierszu poleceń, a także wypisywane komunikaty będę prezentował tak:

dotnet new console

Pogrubienie oznacza nowe pojęcie lub bardzo ważne słowo, które chciałem uwypuklić w tekście.

Uwaga

Ostrzeżenia lub ważne informacje i linki do zewnętrznych źródeł będę umieszczał w takich ramkach.

Wskazówka

Różnego rodzaju wskazówki będą pojawiały się w takich ramkach.

Rozdział 1. Cześć, C#! Witaj, .NET!

W pierwszym rozdziale zajmiemy się przygotowaniem środowiska programistycznego i przedstawimy podobieństwa i różnice pomiędzy nowoczesnymi środowiskami .NET, takimi jak .NET Core, .NET Framework, Mono, Xamarin i .NET Standard. Przygotujemy tu najprostszą z możliwych aplikację napisaną w języku C# 12 i działającą w środowisku .NET 8. Będziemy przy tym używać różnych edytorów kodu i poznamy kilka dobrych miejsc do szukania pomocy.

W tym rozdziale omawiam następujące zagadnienia:

wprowadzenie do książki i jej zawartości; przygotowanie środowiska programistycznego; poznawanie platformy .NET; tworzenie aplikacji konsoli w Visual Studio 2022; tworzenie aplikacji konsoli w Visual Studio Code; wykorzystywanie repozytorium kodu dla tej książki; wyszukiwanie pomocy.

Wprowadzenie do książki i jej zawartości

Zaczniemy od zaprezentowania struktury tej książki i opisywanego w niej kodu.

Pobieranie kodu przygotowanego dla tej książki

Całość kodu źródłowego prezentowanego w tej książce, w tym wszystkie projekty aplikacji, znajdziesz pod adresem https://github.com/markjprice/cs12dotnet8. Z kolei spolonizowaną wersję kodu możesz pobrać pod adresem https://ftp.helion.pl/przyklady/c12n88.zip.

Jeżeli w podanym adresie serwisu GitHub zmienisz domenę .com na .dev, to umieścisz repozytorium kodu w edytorze Visual Studio Code for Web (rysunek 1.1).

Rysunek 1.1. Edytor Visual Studio Code for Web z repozytorium GitHuba dla tej książki

Uwaga

Udostępniamy też plik PDF z kolorowymi obrazami zrzutów ekranów i diagramów używanych w tej książce. Można go pobrać pod adresem https://ftp.helion.pl/przyklady/c12n88.zip.

Visual Studio Code działający w przeglądarce to doskonałe rozwiązanie wspomagające pracę z tradycyjnym edytorem kodu nad zadaniami z tej książki. Umożliwia łatwe porównanie kodu z obu rozwiązań i w razie potrzeby skopiowanie wybranych części.

Uwaga

Nie musisz nic wiedzieć na temat Gita, aby pobrać kod rozwiązania dla tej książki. Możesz pobrać plik ZIP zawierający wszystkie pliki z kodami pod adresem https://github.com/markjprice/cs12dotnet8/archive/refs/heads/main.zip, a potem rozpakować zawartość pliku ZIP w swoim systemie plików. Spolszczone wersje plików z kodami znajdziesz pod adresem https://ftp.helion.pl/przyklady/c12n88.zip.

Pojęcia związane z .NET używane w tej książce

W tekście książki będę używał pojęcia nowoczesne .NET, które oznacza .NET 8 i jego poprzedniki, takie jak .NET 6 i .NET 5, wywodzące się z platformy .NET Core. Z kolei terminu stare .NET będę używał zbiorczo, odnosząc się do platform .NET Framework, Mono, Xamarin i .NET Standard.

Nowoczesne .NET jest środowiskiem łączącym te starsze platformy i standardy.

Struktura książki i używany w niej styl

Po pierwszym rozdziale książkę można podzielić na trzy części: pierwszą - poświęconą gramatyce i słownictwu języka C#, drugą - opisującą typy danych w .NET używane do tworzenia aplikacji i trzecią - przytaczającą przykłady typowych aplikacji wieloplatformowych, które można tworzyć w języku C# i na platformie .NET.

Większość ludzi uczy się złożonych rzeczy przez powtarzanie widzianych już akcji, a nie przez czytanie wyczerpujących opisów teoretycznych. Dlatego nie będę tu objaśniał każdego użytego słowa kluczowego i kroku. Chodzi o to, żeby nauczyć Cię pisania kodu, budowania aplikacji i uruchamiania jej.

Nie musisz od razu znać wszystkich zawiłych szczegółów. Będzie to coś, co przyjdzie z czasem, gdy zaczniesz tworzyć własne aplikacje i wykraczać poza to, czego może Cię nauczyć jakakolwiek książka.

Przywołując słowa Samuela Johnsona, autora słownika języka angielskiego z 1755 r., najpewniej popełniłem tu "kilka błędów oraz sporych absurdów, od których nie jest wolna żadna praca tej wielkości". Biorę na siebie pełną odpowiedzialność za te błędy, mając nadzieję, że docenisz moje starania podczas pisania książki o szybko rozwijających się technologiach, takich jak C# i .NET, oraz aplikacjach, które możesz za ich pomocą zbudować.

Wskazówka

Jeżeli masz jakąś uwagę do tej książki, skontaktuj się ze mną, zanim napiszesz negatywną recenzję. Autorzy nie mają możliwości reagować na takie recenzje, przez co nie będę w stanie dowiedzieć się, w czym leży problem i jak go poprawić w następnym wydaniu. Odezwij się do mnie przez kanał Discord poświęcony tej książce (https://packt.link/csharp12dotnet8), wyślij mi e-mail (mój adres znajdziesz w repozytorium GitHub) albo zgłoś problem za pomocą samego GitHuba (https://github.com/markjprice/cs12dotnet8/issues).

Tematy omawiane w tej książce

W tej książce omawiam następujące zagadnienia:

Podstawy języka - podstawowe funkcje języka C#, od deklarowania zmiennych, poprzez pisanie funkcji, aż do zasad programowania obiektowego. Podstawy bibliotek - podstawowe funkcje biblioteki klas .NET oraz kilku opcjonalnych pakietów umożliwiających wykonywanie typowych zadań oraz pozwalających na dostęp do baz danych. Podstawy tworzenia aplikacji sieciowych - podstawowe funkcje platformy ASP.NET Core przeznaczonej do tworzenia serwerowych i klienckich aplikacji sieciowych oraz różnego rodzaju serwisów sieciowych.

Konfigurowanie środowiska programistycznego

Zanim zaczniemy programować, trzeba wybrać zintegrowane środowisko programistyczne (ang. Integrated Development Environment - IDE), którego częścią jest edytor kodu dla języka C#. Microsoft udostępnia małą rodzinę takich środowisk:

Visual Studio 2022 dla Windows, Visual Studio Code dla Windowsa, Maca i Linuksa, Visual Studio Code for the Web lub GitHub Codespaces.

Inne firmy również oferują własne edytory kodu C#, czego przykładem może być JetBrains Rider, dostępny dla systemów Windows, Mac i Linux. JetBrains Raider jest edytorem chętnie używanym przez wielu doświadczonych programistów .NET, choć wymaga opłacenia licencji.

Wskazówka

Ostrzeżenie! Oczywiście JetBrains to wspaniała firma tworząca fantastyczne produkty, ale zarówno Raider, jak i rozszerzenie dla Visual Studio, ReSharper, są tylko oprogramowaniem, które może zawierać błędy i charakteryzować się dziwnym zachowaniem. Na przykład na stronach, w widokach Razora albo w komponentach Blazora mogą pojawiać się komunikaty o błędach, takie jak Nie można znaleźć nazwy (ang. Cannot resolve symbol), co jednak nie przeszkadza w skompilowaniu i uruchomieniu takich projektów. W rzeczywistości nie ma tam żadnego błędu. Po zainstalowaniu dodatku Unity Support zaczynają się pojawić komunikaty o błędach przy każdej operacji związanej z boxingiem (które mogą być poważnym problemem dla programistów gier używających Unity), ale w projektach niezwiązanych z Unity nie mają one żadnego znaczenia.

Wybieranie narzędzia i typu aplikacji właściwych do nauki

Czy istnieje najlepsze narzędzie i najlepszy rodzaj aplikacji do nauki języka C# i platformy .NET?

Podczas nauki najlepszym narzędziem jest takie, które wspomaga przy pisaniu kodu i konfigurowaniu, a jednocześnie nie ukrywa mechanizmów języka. Środowiska z graficznym interfejsem użytkownika są bardzo łatwe w obsłudze, ale czy wiesz, co właściwie robią one w tle? W tym przypadku prostszy edytor kodu, który pozostawia Ci większą kontrolę, a jednocześnie pomaga przy pisaniu kodu będzie najlepszym narzędziem do nauki.

Po tym wstępie można twierdzić, że najlepszym narzędziem jest to, z którym już wcześniej pracowaliśmy, albo to, którego będzie używał Twój zespół w codziennej pracy. Z tego powodu kolejne zadania zawarte w niniejszej książce możesz wykonywać w swoim własnym edytorze kodu C# (lub środowisku IDE). Do wyboru masz Visual Studio Code, Visual Studio dla Windows, Visual Studio dla Mac, a nawet JetBrains Rider.

W tej książce podaję dokładne instrukcje wykonania działań w obu edytorach kodu C#, ale jedynie w projektach realizowanych w rozdziale 1. Podaję też linki do instrukcji przeznaczonych dla innych edytorów kodu. Możesz je zobaczyć pod adresem https://github.com/ markjprice/cs12dotnet8/blob/main/docs/code-editors/README.md.

W kolejnych rozdziałach będę podawał tylko nazwy projektów oraz ogólne instrukcje do wykonania w wybranym przez Ciebie edytorze kodu.

Najlepszym rodzajem aplikacji przy uczeniu się mechanizmów języka C# oraz wielu bibliotek .NET jest aplikacja, która nie rozprasza dodatkowym, niepotrzebnym kodem. Na przykład nie ma potrzeby tworzenia całej aplikacji graficznej dla systemu Windows tylko po to, żeby nauczyć się posługiwać instrukcją switch.

Z tego powodu uważam, że najlepszą metodą uczenia się języka C# i platformy .NET jest tworzenie aplikacji konsoli, co będziemy robić w rozdziałach od 1. do 11. W kolejnych rozdziałach, od 12. do 16., będziemy tworzyć witryny WWW, serwisy sieciowe oraz aplikacje dla przeglądarek.

Zalety i wady stosowania interaktywnych notatników

Kolejną zaletą Visual Studio Code jest możliwość skorzystania z rozszerzenia interaktywnych notatników (Polyglot Notebooks). To rozszerzenie daje łatwy i bezpieczny dostęp do miejsca, w którym można pisać i testować działanie wycinków kodu. Na przykład osoby przetwarzające dane używają notatników do ich analizowania i wizualizowania. Studenci korzystają z nich, by uczyć się pisania małych wycinków kodu związanych z konstrukcjami językowymi lub różnymi API.

Interaktywne notatniki umożliwiają tworzenie pliku notatnika łączącego w sobie komórki tekstu z formatowaniem Markdown i z kodem C# lub innych języków, takich jak PowerShell, F# lub SQL (do pracy z bazami danych). Rozszerzenie udostępnia te wszystkie funkcje dzięki zastosowaniu mechanizmu o nazwie .NET Interactive.

Uwaga

Dawniej rozszerzenie Polyglot Notebooks nosiło nazwę .NET Interactive Notebooks. Nazwa została zmieniona, ponieważ rozszerzenie nie jest ograniczone do używania wyłącznie języków związanych z platformą .NET, takich jak C# i F#. Zachowano jednak pierwotny identyfikator rozszerzenia, czyli ms-dotnettools.dotnet-interactive-vscode.

Niestety notatniki Polyglot mają też kilka ograniczeń:

Nie można ich używać do tworzenia witryn WWW, serwisów ani aplikacji. Nie mogą pobierać danych od użytkownika, na przykład nie pozwalają na użycie metod ReadLine lub ReadKey. (Choć istnieją alternatywne metody, o których możesz przeczytać w opcjonalnym ćwiczeniu dostępnym wyłącznie w internecie). Nie można przekazywać do nich żadnych argumentów. Nie pozwalają definiować własnych przestrzeni nazw. Nie udostępniają żadnych narzędzi do debugowania kodu (choć takie narzędzia mają się pojawić w przyszłości).

Na zakończenie tego rozdziału będziesz mieć możliwość wykonania opcjonalnego ćwiczenia wykorzystującego notatniki Polyglot.

Programowanie na wielu platformach przy użyciu Visual Studio Code

Najnowocześniejsze i najlżejsze IDE, jakie mamy do wyboru, i jedyne, które w rodzinie Microsoftu jest wieloplatformowe, to Microsoft Visual Studio Code. Działa ono w wielu różnych systemach operacyjnych, takich jak Windows, macOS, oraz w wielu wariantach Linuksa, np. Red Hat Enterprise Linux (RHEL) albo Ubuntu.

Visual Studio Code to dobry wybór przy tworzeniu nowoczesnego programowania międzyplatformowego, ponieważ ma obszerny i wciąż rosnący zestaw rozszerzeń obsługujących wiele języków oprócz C#. Dla programistów .NET i C# najważniejszym rozszerzeniem jest C# Dev Kit, które zostało wstępnie wydane w czerwcu 2023 r. Zmienia ono Visual Studio Code z edytora kodu ogólnego przeznaczenia w narzędzie zoptymalizowane dla programistów .NET i C#.

Uwaga

Więcej informacji: Na temat rozszerzenia C# Dev Kit możesz poczytać w artykule ogłaszającym jego udostępnienie: https://devblogs.microsoft.com/visualstudio/announcing-csharp-dev-kit-for-visual-studio-code/.

Visual Studio Code jest lekkim i wieloplatformowym narzędziem, dzięki czemu można je instalować na wszystkich platformach, na których będą wdrażane Twoje aplikacje, co usprawnia naprawianie błędów lub wykonywanie innych działań. Visual Studio Code sprawia, że programista może korzystać z wieloplatformowego edytora kodu, aby za jego pomocą tworzyć wieloplatformowe aplikacje. Visual Studio Code może działać również na procesorach ARM, dzięki czemu można z niego korzystać na komputerach Apple Silicon albo Raspberry Pi.

Visual Studio Code ma wiele funkcji wspomagających tworzenie aplikacji dla sieci WWW, ale aktualnie nie ma tak dobrze rozwiniętych funkcji ułatwiających budowanie aplikacji mobilnych i dla komputerów stacjonarnych.

Visual Studio Code jest aktualnie najpopularniejszym środowiskiem IDE. W ankiecie przeprowadzonej przez serwis StackOverflow w 2023 roku do jego używania przyznało się ponad 73% programistów (https://survey.stackoverflow.co/2023/).

Tworzenie systemów chmurowych w GitHub Codespaces

GitHub Codespaces jest doskonale skonfigurowanym środowiskiem programistycznym bazującym na Visual Studio Code, które można przekształcić w środowisko uruchamiane w chmurze z dostępem poprzez dowolną przeglądarkę. Obsługuje ono repozytoria Gita i rozszerzenia, a dodatkowo udostępnia interfejs wiersza poleceń, umożliwiający edytowanie, uruchamianie i testowanie kodu z dowolnego urządzenia.

Wskazówka

Więcej informacji: Więcej na temat edytora GitHub Codespaces możesz przeczytać pod adresem https://github.com/features/codespaces.

Tworzenie aplikacji za pomocą Visual Studio

Microsoft Visual Studio 2022 dla Windows umożliwia tworzenie większości rodzajów aplikacji, w tym aplikacje konsoli, witryny WWW, serwisy sieciowe, aplikacje dla komputerów stacjonarnych i dla urządzeń mobilnych. Co prawda można używać Visual Studio 2022 do tworzenia wieloplatformowych aplikacji mobilnych, ale do ich skompilowania potrzebny jest system macOS i środowisko Xcode.

Visual Studio działa tylko w systemie Windows 10 w wersji 1909 lub nowszej w wariancie Home, Professional, Education lub Enterprise albo w systemie Windows 11 w wersji 21H2 lub nowszej w wariancie Home, Pro, Pro Education lub Pro for Workstations, Enterprise lub Education.

Wskazówka

Ostrzeżenie! Visual Studio 2022 dla systemu Mac oficjalnie nie obsługuje .NET 8 i w sierpniu 2024 r. zakończy się dla niego wsparcie. Użytkownicy Visual Studio 2022 for Mac powinni przejść na Visual Studio Code bądź JetBrains Rider lub użyć Visual Studio 2022 dla systemu Windows działającego w maszynie wirtualnej na komputerze lokalnym lub w chmurze. Można w tym celu skorzystać z takiej technologii jak Microsoft Dev Box. Ogłoszenie o wycofaniu Visual Studio 2022 for Mac można przeczytać pod adresem https://devblogs.microsoft.com/visualstudio/visual-studio-for-mac-retirement-announcement/.

Jakich narzędzi używałem?

Do pisania i testowania kodu prezentowanego w tej książce wykorzystywałem następujący sprzęt:

Visual Studio 2022 dla Windows działające w systemie: Windows 11 na laptopie HP Spectre (z procesorem Intel). Visual Studio Code działające w systemie: macOS na komputerze Apple Silicon Mini (z procesorem M1), Windows 10 na laptopie HP Spectre (z procesorem Intel), JetBrains Raider działające w systemie: macOS na komputerze Apple Silicon Mini (z procesorem M1), Windows 10 na laptopie HP Spectre (z procesorem Intel).

Mam nadzieję, że również masz dostęp do różnego sprzętu i oprogramowania, ponieważ poznawanie różnic między platformami pozwoli poznać wyzwania związane z tworzeniem oprogramowania. Pamiętaj jednak, że dowolna z wymienionych wyżej kombinacji całkowicie wystarcza do zgłębiania podstaw języka C# i platformy .NET oraz metod budowania praktycznych aplikacji i witryn WWW.

Uwaga

Dodatkowe informacje na temat pisania kodu w języku C# na komputerze Raspberry Pi 400 z systemem Ubuntu Desktop 64 znajdziesz w napisanym przeze mnie artykule dostępnym pod adresem https://github.com/markjprice/cs12dotnet8/tree/main/docs/raspberry-pi-ubuntu64.

Instalowanie na wielu platformach

Wybór IDE i systemu operacyjnego na potrzeby tworzenia oprogramowania nie ogranicza nam możliwości instalowania go na innych platformach.

.NET 8 pozwala zainstalować oprogramowanie na następujących platformach:

Windows: Windows 10 w wersji 1607 lub nowsza, Windows 11 w wersji 22000 lub nowszej. Windows Server 2012 R2 SP1 i nowsze, Nano Server w wersji 1809 lub nowszej. Mac: macOS Catalina (wersja 10.15) i nowsza oraz w emulatorze Rosetta 2 x64. Linux: Alpine Linux 3.17 lub nowszy. Debian 11 lub nowszy. Fedora 37 lub nowszy. openSUSE 15 lub nowszy.Oracle Linux 8 lub nowszy. RHEL 8 i nowszy. SUSE Enterprise Linux 12 SP2 lub nowszy. Ubuntu 20.04 lub nowszy. Android: API 21 lub nowszy. iOS i tvOS: 11.0 lub nowszy. Mac Catalyst: 10.15 lub nowszy. 11.0 lub nowszy na platformie ARM64.

Wskazówka

Ostrzeżenie. Obsługa systemów Windows7 i Windows 8.1 zakończyła się w styczniu 2023 r.: https://github.com/dotnet/core/issues/7556.

Wprowadzenie obsługi systemów Windows ARM64 w platformie .NET 5 sprawiło, że możemy tworzyć i instalować oprogramowanie na urządzeniach Windows ARM, takich jak Microsoft Surface Pro X.

Uwaga

Najnowszą listę obsługiwanych systemów operacyjnych i ich wersji znajdziesz pod adresem https://github.com/dotnet/core/blob/main/release-notes/8.0/supported-os.md.

Pobieranie i instalowanie Visual Studio 2022 dla Windows

Wielu zawodowych programistów pracujących z technologiami Microsoftu w swojej codziennej pracy używa Visual Studio 2022 dla Windows. Nawet jeżeli do wykonywania zadań z tej książki używasz Visual Studio Code, to i tak zalecam Ci zapoznanie się z Visual Studio 2022. Dopiero po napisaniu sporej ilości kodu za pomocą danego narzędzia możesz faktycznie zdecydować, czy spełnia ono Twoje wymagania.

Jeżeli nie masz komputera z systemem Windows, to możesz pominąć ten punkt i przejść do następnego, w którym zajmiemy się pobieraniem i instalowaniem Visual Studio Code w systemach macOS i Linux.

W październiku 2014 roku Microsoft udostępnił bezpłatną edycję Visual Studio dla Windows, której używać mogą studenci, osoby rozwijające projekty o otwartych źródłach oraz osoby prywatne. Ten wariant edytora nazywa się Community Edition. Do pracy z tą książką możesz wykorzystać dowolny wariant Visual Studio. Jeżeli nie masz go jeszcze zainstalowanego w systemie, to możesz zrobić to teraz.

Z adresu https://visualstudio.microsoft.com/downloads/ pobierz instalator Visual Studio 2022 w wersji 17.8 lub nowszej. Uruchom instalator. W karcie Workloads zaznacz następujące opcje: ASP.NET and web development. .NET desktop development (tutaj znajduje się też aplikacja konsoli). Desktop Development with C++ razem ze wszystkimi domyślnymi komponentami (umożliwia to publikowanie aplikacji konsolowych oraz serwisów sieciowych, które szybciej się uruchamiają i używają mniej pamięci). Jeżeli chcesz używać spolszczonej wersji Visual Studio, na karcie Language packs wybierz opcję Polish. Kliknij przycisk Install i czekaj, aż instalator pobierze wybrane komponenty i je zainstaluje. Po zakończeniu instalacji kliknij przycisk Launch. Przy pierwszym uruchomieniu Visual Studio program poprosi Cię o zalogowanie się. Jeżeli masz już konto Microsoftu, możesz użyć go w tym miejscu. Jeżeli nie masz jeszcze konta, możesz je utworzyć pod adresem https://signup.live.com. Przy pierwszym uruchomieniu Visual Studio program poprosi Cię o skonfigurowanie swojego środowiska. W sekcji Development Settings wybierz pozycję Visual C#, natomiast z listy schematów kolorystyki możesz wybrać najbardziej odpowiadający Ci schemat. Ja lubię używać schematu Blue. Jeżeli chcesz dostosować skróty klawiszowe, to wybierz z menu pozycję Tools/Options..., a w otwartym oknie wybierz sekcję Keyboard. Jeżeli chcesz zmienić język Visual Studio na polski, to wybierz z menu pozycję Tools/Options..., w otwartym oknie wybierz sekcję Environment/International Settings, a z listy Language wybierz pozycję Polski. Zmiana języka zostanie wprowadzona po ponownym uruchomieniu Visual Studio.

Skróty klawiszowe w Microsoft Visual Studio dla Windows

W tej książce staram się unikać podawania skrótów klawiszowych, ponieważ można je bardzo łatwo zmienić. Jeżeli takie skróty są jednakowe w wielu różnych edytorach kodu, to będę je prezentował w tekście książki.

Jeżeli chcesz przejrzeć i zmienić skróty klawiszowe w swoim edytorze, możesz to zrobić zgodnie z instrukcjami dostępnymi pod adresem https://docs.microsoft.com/pl-pl/visualstudio/ide/identifying-and-customizing-keyboard-shortcuts-in-visual-studio.

Pobieranie i instalowanie Microsoft Visual Studio Code

Edytor Visual Studio Code bardzo się rozwinął w ciągu kilku ostatnich lat, co przełożyło się na ciągle rosnącą popularność. Dla odważnych, którzy chcą cały czas testować najnowsze rozwiązania, dostępne są wydania z linii Insider, zawierające codzienne kompilacje nowych wersji edytora.

Nawet jeżeli planujesz pracować wyłącznie z Visual Studio 2022 dla Windows, polecam zainstalować Visual Studio Code i spróbować wykonać z jego pomocą zadania z tego rozdziału. Potem możesz zdecydować, czy chcesz dalej używać tego edytora, czy w pozostałej części książki wolisz pracować z Visual Studio 2022.

Jesteśmy już gotowi do pobrania i zainstalowania Visual Studio Code, rozszerzenia C# Dev Kit oraz pakietu .NET SDK.

Pobierz i zainstaluj Visual Studio Code w wydaniu stabilnym albo z kanału Insiders, korzystając z adresu https://code.visualstudio.com.

Uwaga

Więcej informacji: Jeżeli potrzebujesz pomocy przy instalowaniu Visual Studio Code, możesz przeczytać oficjalny poradnik instalowania dostępny pod adresem https://code.visualstudio.com/docs/setup/setup-overview.

Pobierz i zainstaluj pakiet .NET SDK 8.0 oraz dodatkowo przynajmniej jeden w wersji 6.0 lub 7.0, korzystając z adresu https://www.microsoft.com/net/ download.

Uwaga

W normalnej pracy w systemie będziemy mieli zainstalowanych kilka wersji .NET SDK. Aby nauczyć się w pełni panować nad pakietami .NET SDK, musimy zainstalować kilka wersji. .NET 6.0, .NET 7.0 i .NET 8.0 to najaktualniejsze wersje SDK. Można je bezpiecznie instalować w systemie obok siebie. Do kompilowania projektów będzie używana najnowsza wersja SDK.

Aby zainstalować rozszerzenie C# Dev Kit, musisz najpierw uruchomić aplikację Visual Studio Code. W Visual Studio Code kliknij ikonę Extensions albo wybierz z menu pozycję View/Extensions. Rozszerzenie C# Dev Kit jest jednym z najpopularniejszych, dlatego powinno być widoczne na samym szczycie listy. Możesz też wprowadzić tekst C# w okienku wyszukiwania.

Uwaga

C# Dev Kit automatycznie pobiera też rozszerzenie C# w wersji 2.0 lub nowszej, dzięki czemu nie musisz instalować tego rozszerzenia oddzielnie. Pamiętaj, że rozszerzenie C# w wersji 2.0 lub nowszej nie korzysta już z OmniSharp, ponieważ używa nowego hosta Language Service Protocol (LSP). C# Dev Kit wymaga też zainstalowania rozszerzeń NET Install Tool for Extension Authors oraz IntelliCode for C# Dev Kit, które również zostaną zainstalowane automatycznie.

Kliknij przycisk Install i poczekaj na pobranie i zainstalowanie niezbędnych pakietów.

Wskazówka

Dobra praktyka: Przeczytaj dokładnie treść licencji rozszerzenia C# Dev Kit, ponieważ jest ona bardziej restrykcyjna od licencji rozszerzenia C#: https://aka.ms/vs/ csdevkit/license.

Instalowanie innych rozszerzeń

W kolejnych rozdziałach tej książki będziemy korzystać z większej liczby rozszerzeń. Jeżeli chcesz zainstalować je już teraz, to możesz posiłkować się listą zamieszczoną w tabeli 1.1.

Tabela 1.1. Rozszerzenia dla Visual Studio Code używane w tej książce

Rozszerzenie

Opis

C# Dev Kit

ms-dotnettools.csdevkit

Oficjalne rozszerzenie przygotowane przez Microsoft. Zarządzaj kodem w eksploratorze rozwiązań i testuj za pomocą wbudowanych funkcji wyszukiwania testów i ich uruchamiania.

Zawiera rozszerzenia C# i IntelliCode for C# Dev Kit.

C#

ms-dotnettools.csharp

Obsługa edytowania kodu C#, kolorowanie składni, IntelliSense, Idź do definicji, Znajdź wszystkie odwołania, obsługa debugowania w .NET Core (CoreCLR) oraz obsługa plików csproj w systemach Windows, macOS i Linux.

IntelliCode for C# Dev Kit

ms-dotnettools.vscodeintellicode-csharp

Udostępnia ułatwienia dla programistów języków Python, TypeScript i JavaScript, C# oraz Java.

Polyglot Notebooks

ms-dotnettools.dotnet-interactive-vscode

Dodaje obsługę funkcji .NET Interactive do notatnika Visual Studio Code. Ma własną zależność od rozszerzenia Jupyter (ms-toolsai.jupyter).

MSBuild project tools

tintoy.msbuild-project-tools

Udostępnia funkcję IntelliSense w plikach projektów MSBuild, w tym automatyczne uzupełnianie elementów <PackageReference>.

REST Client

humao.rest-client

Wysyłanie żądań HTTP i przeglądanie odpowiedzi bezpośrednio w Visual Studio Code.

ILSpy-vscode

icsharpcode.ilspy-vscode

Dekompilacja zestawów MSIL. Obsługuje nowoczesne .NET, .NET Framework, .NET Core oraz .NET Standard.

Zarządzanie rozszerzeniami Visual Studio Code z wiersza poleceń

Rozszerzenia Visual Studio Code możesz też zainstalować z wiersza poleceń lub z terminala, stosując polecenia z tabeli 1.2.

Tabela 1.2. Polecenia wypisujące, instalujące i usuwające rozszerzenia

Polecenie

Opis

code --list-extensions

Wypisuje zainstalowane rozszerzenia.

code --install-extension <identyfikator>

Instaluje rozszerzenie o podanym identyfikatorze.

code --uninstall-extension <identyfikator>

Odinstalowuje rozszerzenie o podanym identyfikatorze.

Na przykład, aby zainstalować rozszerzenie C# Dev Kit, wystarczy wpisać w wierszu poleceń lub w terminalu poniższe polecenie:

code --install-extension ms-dotnettools.csdevkit

Uwaga

Przygotowałem też mały skrypt w PowerShellu instalujący wszystkie rozszerzenia Visual Studio Code z powyższej tabeli. Możesz go pobrać pod adresem https://github.com/markjprice/cs12dotnet8/tree/main/scripts/extension-scripts/.

Rozpoznawanie wersji programu Microsoft Visual Studio Code

Co miesiąc (no prawie) firma Microsoft wydaje nową wersję programu Visual Studio Code, a jeszcze częściej pojawiają się wersje naprawiające błędy. I tak:

Wersja 1.79.0 to wydanie z maja 2023 r. Wersja 1.79.1 to wydanie poprawkowe z maja2023 r.

Wersja użyta w tej książce to 1.82.1 z września 2023 roku, jednak wersja Visual Studio Code jest tu mniej ważna niż wersja rozszerzeń C# Dev Kit i C#, które zainstalowaliśmy wcześniej. Zalecam używanie rozszerzenia C# w wersji 2.8.23 lub nowszej oraz C# Dev Kit w wersji 0.5.150 lub nowszej.

Chociaż rozszerzenie dla języka C# nie jest wymagane, zapewnia ono funkcję IntelliSense, a także funkcje w nawigacji po kodzie oraz funkcję debugowania, więc jest to coś, co z pewnością warto zainstalować.

Skróty klawiszowe w Visual Studio Code

Jeżeli chcesz zmienić skróty klawiszowe używane w Twoim Visual Studio Code, możesz to zrobić zgodnie z instrukcjami dostępnymi pod adresem https://code.visualstudio.com/ docs/getstarted/keybindings.

Dobrze jest pobrać sobie plik PDF z listą skrótów klawiszowych właściwych dla Twojego systemu operacyjnego:

Windows: https://code.visualstudio.com/shortcuts/keyboard-shortcuts-windows.pdf. macOS: https://code.visualstudio.com/shortcuts/keyboard-shortcuts-macos.pdf. Linux: https://code.visualstudio.com/shortcuts/keyboard-shortcuts-linux.pdf.

Poznawanie .NET

"Kto nie pamięta historii, skazany jest na jej ponowne przeżycie".

- George Santayana.

.NET 7, .NET Core, .NET Framework i Xamarin są powiązanymi ze sobą platformami programistycznymi, których programiści mogą używać do tworzenia aplikacji i usług.

Jeżeli nie znasz jeszcze całej historii platformy .NET, to opis wszystkich wariantów, jakie powstały do tej pory, znajdziesz w materiałach dodatkowych do rozdziału 1. pod adresem https://ftp.helion.pl/przyklady/c12n88.zip.

Plany obsługi platformy .NET

Wersje platformy .NET oznaczane są jako LTS (ang. Long-Term Support - długoterminowa obsługa), STS (ang. Standard Term Support - obsługa standardowa, znana wcześniej jako Current) albo Preview. Oznaczenia te wyjaśniam poniżej:

LTS. Te wydania uznaje się za stabilne i nie będą one wymagały wielu poprawek w czasie swojego życia. Warto je stosować w aplikacjach, które raczej nie będą często aktualizowane. Wydania LTS mają otrzymywać aktualizacje do trzech lat od oficjalnego wydania albo do roku po pojawieniu się następnego wydania LTS, zależnie, co będzie dłuższym terminem. STS. Te wydania udostępniają funkcje, które mogą zostać zmienione w wyniku reakcji użytkowników. Świetnie nadają się do stosowania przy aktywnie rozwijanych aplikacjach, gdyż umożliwiają dostęp do najnowszych usprawnień środowiska. Każde z pomniejszych wydań jest aktualizowane jeszcze przez sześć miesięcy po pojawieniu się nowszego wydania albo do 18 miesięcy od jej udostępnienia. Preview. To wydania przeznaczone dla testów publicznych. Są świetnym wyborem dla ciekawych programistów, którzy zawsze chcą korzystać z najnowszych technologii, albo dla autorów książek o programowaniu, którzy muszą mieć dostęp do nowych funkcji języków programowania, bibliotek i platform. Ten rodzaj wydań nie jest objęty obsługą firmy Microsoft, ale każde z nich może zostać przekształcone w wydanie oficjalne, które taką obsługę otrzymuje. Dotyczy to również wydań RC (Release Candidate).

Wydania LTS i STS w czasie swojego życia otrzymują wszystkie poprawki związane z bezpieczeństwem i stabilnością systemu.

Wskazówka

Dobra Praktyka: Obsługa wydań STS i LTS wymaga, żeby na bieżąco instalować wszystkie pojawiające się poprawki. Na przykład, jeżeli system działa z wersją 8.0.0, a pojawiła się wersja 8.0.1, to konieczne jest jak najszybsze zainstalowanie wersji 8.0.1. Takie aktualizacje pojawiają się w każdy drugi wtorek miesiąca.

Aby móc lepiej wybrać między wydaniem STS a LTS, dobrze jest przyjrzeć się diagramowi z rysunku 1.2. W tym diagramie czarne paski reprezentują 3-letnie wydania LTS, natomiast szare paski opisują wydania STS.

Rysunek 1.2. Diagram aktualizacji różnych wersji .NET

W czasie istnienia .NET 8 Microsoft zakończy okres obsługi dwóch starszych wersji, ale też wyda dwie nowsze. Starałem się zatem brać pod uwagę fakt, że czytając tę książkę, możesz korzystać z .NET 9 lub .NET 10. Oczywiście nie jestem w stanie przewidzieć nowych funkcji, jakie mogą się pojawić w tych wersjach.

Uwaga

Zakończenie obsługi lub zakończenie życia wydania oznacza dzień, po którym Microsoft nie będzie już wydawać nowych poprawek błędów i aktualizacji bezpieczeństwa dla danego wydania, jak również nie będzie oferować pomocy technicznej.

Jeżeli potrzebujesz dłuższej obsługi wydań, to dzisiaj możesz wybrać .NET 8.0 i korzystać z niego również po pojawieniu się .NET 9.0 w 2024 roku. Po prostu .NET 9.0 będzie wydaniem z linii STS, co oznacza, że jego obsługa zostanie zakończona przed zakończeniem okresu obsługi wersji .NET 8.0, co nastąpi w listopadzie 2026. Po pojawieniu się .NET 10 musisz jednak zacząć przenosić swoje projekty .NET 8 na nowsze środowisko. Masz na to czas aż do zakończenia obsługi .NET 8.

Wskazówka

Dobra praktyka: Pamiętaj jednak, że nawet w przypadku wersji LTS musisz aktualizować środowisko wersjami poprawkowymi, takimi jak .NET 8.0.1 i .NET SDK 8.0.101, które zostały wydane w grudniu 2023 roku. Kolejne aktualizacje pojawiają się raz na miesiąc.

Podczas pisania tej książki wszystkie wersje nowoczesnego .NET osiągnęły już koniec swojego okresu obsługi, z wyjątkiem poniższych:

.NET 7 - okres obsługi zakończy się 14 maja 2024 r. .NET 6 - okres obsługi zakończy się 12 listopada 2024 r. .NET 8 - okres obsługi zakończy się 10 listopada 2026 r.

Uwaga

Listę aktualnie obsługiwanych wersji .NET wraz z datami zakończenia wsparcia dla nich przez Microsoft znajdziesz pod adresem https://github.com/dotnet/core/blob/main/releases.md.

Fazy obsługi środowisk .NET

Cykl życia wersji platformy .NET składa się z kilku faz, w których poziom obsługi ulega zmianie:

Wersja preview - bez obsługi. Wersje .NET 8 od Preview 1 do Preview 7 znajdowały się w tej fazie od lutego do sierpnia 2023 r. Go Live - obsługa jest dostępna do momentu wydania wersji ogólnodostępnej (GA), co powoduje natychmiastowe zakończenie obsługi. Konieczna jest wtedy aktualizacja do finalnej wersji wydania, gdy tylko będzie ona dostępna. Wersje .NET 8 RC1 i RC2 znajdowały się w tej fazie we wrześniu i październiku 2023 r. Aktywna - wersja .NET 8 będzie w tej fazie od listopada 2023 r. do maja 2026 r. Utrzymanie - obsługa jest dostępna wyłącznie w zakresie poprawek bezpieczeństwa przez ostatnie 6 miesięcy cyklu życia. Wersja .NET 8 będzie się znajdować w tej fazie od maja do listopada 2026 r. Koniec cyklu życia - brak obsługi. Wersja .NET 8 osiągnie koniec swojego cyklu życia w listopadzie 2026 r.

Rozpoznawanie wersji .NET Runtime i .NET SDK

Jeśli nie tworzysz samodzielnych aplikacji, to minimalnym wymaganiem do uruchomienia aplikacji .NET przez system operacyjny jest zainstalowanie środowiska uruchomieniowego .NET. Natomiast .NET SDK (Software Development Kit - zestaw narzędzi programistycznych) zawiera zarówno środowisko uruchomieniowe .NET, jak i kompilatory oraz inne narzędzia niezbędne do budowania kodu i aplikacji .NET.

Numeracja wersji środowiska wykonawczego .NET Runtime jest zgodna z semantycznym schematem numerów wersji, a zatem zmiana głównego numeru oznacza poważną zmianę w środowisku, zmiana pobocznego numeru oznacza dodanie nowych funkcji, a zmiana numeru poprawkowego oznacza usunięcie błędów.

Numeracja wersji .NET SDK nie zachowuje semantycznego schematu numerów wersji. Główny i podoczny numer są dopasowane do wersji .NET Runtime, natomiast numer poprawkowy nadawany jest zgodnie ze schematem oznaczającym główne i mniejsze wersje SDK. Mniejszy numer wersji jest mnożony przez 100 i dodawany do numeru poprawki.

Przykłady tej numeracji możesz zobaczyć w tabeli 1.3.

Tabela 1.3. Przykłady zmian numerów wersji środowiska .NET Runtime i SDK

Zmiana

.NET Runtime

.NET SDK

Wydanie początkowe

8.0.0

8.0.100

Poprawki w SDK

8.0.0

8.0.101

Poprawki w Runtime i SDK

8.0.1

8.0.102

Nowa funkcja w SDK

8.0.1

8.0.200

Usuwanie starszych wersji .NET

Aktualizacje .NET Runtime są zawsze zgodne z głównymi wersjami, takimi jak 7.x, natomiast aktualizacje wydań .NET SDK zachowują możliwość obsługi aplikacji kompilowanych dla poprzednich wersji tego samego środowiska wykonawczego. Pozwala to zatem usunąć starsze wersje.

Aby sprawdzić, jakie wersje SDK i Runtime są zainstalowane w Twoim systemie, możesz posłużyć się następującymi poleceniami:

dotnet --list-sdks
dotnet --list-runtimes
dotnet --info

Wskazówka

Dobra praktyka: Aby ułatwić Ci wprowadzanie poleceń w wierszu polecenia lub terminalu, przygotowałem listę wszystkich poleceń z książki, które można łatwo skopiować i wkleić: https://github.com/markjprice/cs12dotnet8/blob/main/docs/ command-lines.md.

W systemie Windows możesz skorzystać z sekcji Aplikacje i funkcje w oknie ustawień systemu, aby usunąć niepotrzebne wersje .NET SDK.

W Linuksie nie ma jednego mechanizmu usuwania .NET SDK, a niezbędne instrukcje znajdziesz pod adresem https://learn.microsoft.com/pl-pl/dotnet/core/install/remove-runtime-sdk-versions?pivots=os-linux.

Uwaga

Możesz też skorzystać z zewnętrznego narzędzia, takiego jak Dots (menadżer wersji .NET SDK), dostępnego pod adresem https://johnnys.news/2023/01/Dots-a-dotnet-SDK-manager. W czasie gdy pisałem tę książkę, trzeba było samodzielnie skompilować tę aplikację ze źródeł dostępnych w repozytorium GitHub, dlatego jest to rozwiązanie dla zaawansowanych programistów.

Poznawanie języka IL

Kompilator języka C# (nazywa się Roslyn) używane przez program dotnet (działający w wierszu poleceń) zmienia kod źródłowy języka C# w kod języka IL (ang. intermediate language - język pośredni), a następnie zapisuje go w pliku zestawu (są to pliki DLL lub EXE). Polecenia języka IL przypominają instrukcje języka assembler, które jednak wykonywane są w maszynie wirtualnej .NET o nazwie CoreCLR.

W czasie pracy CoreCLR ładuje kod IL z pliku wykonywalnego, a następnie kompiluje go do postaci instrukcji procesora, na którym działa. Dopiero te instrukcje przekazywane są procesorowi do wykonania.

Zaletą takiej dwuetapowej kompilacji jest to, że Microsoft może przygotować maszyny wirtualne CLR nie tylko dla systemów Windows, ale i dla Linuksa oraz systemu macOS. Ten sam kod IL może działać wszędzie, ponieważ dopiero drugi etap kompilacji generuje kod właściwy dla danego systemu operacyjnego i procesora.

Niezależnie od tego, w jakim języku napisany jest kod źródłowy (czy będzie to C#, Visual Basic czy też F#), wszystkie aplikacje działające w środowisku .NET mają zapisane w plikach wykonywalnych instrukcje języka IL. Microsoft i inni producenci udostępniają deasemblery, które odczytują pliki wykonywalne i podają zawarty w nich kod IL, czego przykładem może być rozszerzenie dekompilujące ILSpy. Więcej informacji na ten temat znajdziesz w rozdziale 7., "Poznawanie typów .NET".

Porównanie technologii .NET

W tabeli 1.4 zamieściłem podsumowanie informacji o poszczególnych technologiach .NET.

Tabela 1.4. Porównanie technologii .NET

Technologia

Opis

Systemy operacyjne

Nowoczesne .NET

Zbiór nowoczesnych funkcji, pełna obsługa języka od C# 8 do C# 12, pozwala na przenoszenie istniejących lub tworzenie nowych aplikacji i usług dla sieci WWW i systemów Windows. Może używać starszych platform .NET

Windows, macOS, Linux, Android, iOS, tvOS, Tizen

.NET Framework

Zbiór starszych funkcji, ograniczona obsługa języka C# 8.0, brak obsługi wersji C# 9 i nowszych, konserwacja istniejących aplikacji

Tylko Windows

Xamarin

Aplikacje mobilne i dla komputerów

iOS, Android, macOS

Zarządzanie wieloma projektami w edytorach kodu

W Visual Studio 2022, JetBrains Rider, a nawet w Visual Studio Code (z zainstalowanym rozszerzeniem C# Dev Kit) istnieje koncepcja rozwiązania (ang. solution), które umożliwia jednoczesne otwieranie wielu projektów i zarządzanie nimi. Wykorzystamy tutaj rozwiązanie, aby zachowywać w nim dwa projekty tworzone w tym rozdziale.

Tworzenie aplikacji konsoli za pomocą Visual Studio 2022

Zadaniem tego podrozdziału jest zaprezentowanie procedury tworzenia aplikacji konsolowej za pomocą Visual Studio 2022 dla Windows.

Jeżeli nie masz komputera z systemem Windows albo chcesz korzystać z Visual Studio Code, możesz pominąć ten podrozdział, ponieważ ostateczny kod będzie wyglądał tak samo. Zachęcam jednak do przejrzenia tego podrozdziału, ponieważ znajdują się w nim opisy części kodu oraz objaśnienie zasady działania programów najwyższego poziomu. Są to zatem informacje przydatne niezależnie od używanego edytora kodu.

Jeżeli chcesz przejrzeć podobne instrukcje dotyczące edytora JetBrains Rider, to znajdziesz je w moim repozytorium GitHub pod adresem https://github.com/markjprice/cs12dotnet8/blob/main/docs/code-editors/rider.md.

Pisanie kodu za pomocą Visual Studio 2022

Zaczynamy już pisanie kodu!

Uruchom Visual Studio 2022. Możesz zobaczyć eksperymentalną, nową kartę powitalną, która zastąpiła starsze okno dialogowe. Na karcie powitalnej kliknij przycisk Nowy projekt, a jeżeli nadal używasz wersji Visual Studio 2022 z oknem dialogowym, to kliknij przycisk Utwórz nowy projekt. W oknie dialogowym Utwórz nowy projekt, z filtra szablonów projektów wybierz język C#, w polu Wyszukaj szablony, wpisz słowo konsol, a z listy poniżej wybierz pozycję Aplikacja konsoli. Ważne jest, aby wybrać szablon projektu wieloplatformowego w języku C#, a nie projektu dla .NET Framework (bo ten działa tylko w systemie Windows) i nie dla innych języków, takich jak F# lub Visual Basic, tak jak na rysunku 1.3.

Rysunek 1.3. Wybieranie szablonu projektu aplikacji konsoli

Kliknij przycisk Dalej. W oknie dialogowym Konfiguruj nowy projekt wpisz nazwę projektu WitajCS, jako lokalizację podaj katalog C:\cs12dotnet8, a w polu Nazwa rozwiązania wpisz nazwę Rozdzial01. Kliknij przycisk Dalej. W oknie dialogowym Informacje dodatkowe zwróć uwagę na to, że na liście rozwijanej Platforma dostępne są warianty .NET w wersji Pomoc techniczna objęta standardowym terminem, Długoterminowa pomoc techniczna, Preview lub Zakończono wsparcie. Wybierz z tej listy pozycję .NET 8.0 (Długoterminowa pomoc techniczna).

Uwaga

Możesz zainstalować dowolną liczbę różnych wersji .NET SDK. Jeżeli brakuje Ci jakiejś wersji, to możesz ją zainstalować po pobraniu pod adresem https://dotnet.microsoft.com/en-us/download/dotnet.

Nie zaznaczaj opcji Nie używaj instrukcji najwyższego poziomu. (W dalszej części tego rozdziału przygotujemy aplikację konsoli, która będzie używać tej opcji, a wtedy zobaczysz różnicę w wyglądzie kodu). Nie zaznaczaj opcji Włącz publikowanie native AOT. Jej opis znajdziesz w rozdziale 7., "Poznawanie typów .NET". Kliknij przycisk Utwórz. Jeżeli nie widzisz panelu Eksplorator rozwiązań, wybierz z menu pozycję Widok/Eksplorator rozwiązań. W okienku Eksplorator rozwiązań kliknij dwukrotnie plik o nazwie Program.cs. Zwróć przy tym uwagę na to, że w Eksploratorze rozwiązań wyświetlany jest cały projekt WitajCS, tak jak na rysunku 1.4.

Rysunek 1.4. Edytowanie pliku Program.cs w Visual Studio 2022

W pliku Program.cs zwróć uwagę na to, że kod składa się tylko z jednego wiersza komentarza i jednej instrukcji. Całość kodu wygląda tak:
// See https://aka.ms/new-console-template for more information
Console.WriteLine("Hello, World!");

Uwaga

Ten szablon używa funkcji programu najwyższego poziomu, która została wprowadzona w C# 9. Tę funkcję omawiam w dalszej części tego rozdziału. Według komentarza w kodzie więcej informacji na temat tego szablonu znajdziesz pod adresem https://aka.ms/new-console-template.

W pliku Program.cs zmień wiersz numer 2, tak żeby w konsoli wypisywany był tekst Witaj, C#!.

Uwaga

Wszystkie przykłady kodów oraz poleceń, które czytelnik musi przejrzeć lub wpisać, podawane są w tekście książki, tak jak w kroku 10. Nie zmuszam nikogo do czytania kodu lub poleceń ze zrzutów ekranu, takich jak na rysunku 1.4, które mogą być mało czytelne.

Kompilowanie i uruchamianie kodu w Visual Studio

Następne zadanie polega na skompilowaniu i uruchomieniu kodu.

W Visual Studio wybierz z menu pozycję Debuguj/Uruchom bez debugowania. Wynik działania programu zobaczysz w oknie konsoli, tak jak na rysunku 1.5.

Wskazówka

Dobra praktyka: Uruchamiając projekt w Visual Studio 2022, możesz zdecydować, czy dołączyć do niego debugger. Jeżeli nie musisz debugować projektu, to lepiej nie dołączać do niego debuggera, ponieważ wymaga on dodatkowych zasobów i spowalnia działanie programu. Poza tym z debuggerem można uruchomić tylko jeden projekt. Jeżeli chcesz uruchomić kilka projektów z debugowaniem, to dla każdego z nich musisz uruchomić osobną instancję Visual Studio. Na pasku narzędzi możesz kliknąć ikonę z obrysem trójkąta (rysunek 1.4, po prawej stronie przycisku WitajCS), aby uruchomić projekt bez debugowania, lub ikonę wypełnionego trójkąta (rysunek 1.4, po lewej stronie przycisku WitajCS), aby uruchomić go z debugowaniem.

Rysunek 1.5. Uruchomienie aplikacji konsoli w systemie Windows

Naciśnij dowolny klawisz, aby zamknąć okno konsoli i wrócić do Visual Studio. Jeżeli to potrzebne, zamknij panel Właściwości, aby zrobić więcej miejsca dla Eksploratora rozwiązań. Kliknij dwukrotnie projekt WitajCS, aby otworzyć plik projektu WitajCS.csproj zawierający dane aplikacji konsoli dla platformy net8.0. Zawartość tego pliku możesz zobaczyć na rysunku 1.6.

Rysunek 1.6. Wyświetlanie folderów i plików generowanych przez kompilator

W okienku Eksplorator rozwiązań na pasku narzędzi kliknij przycisk Pokaż wszystkie pliki. Zauważ, że teraz widoczne są też wygenerowane przez kompilator foldery bin i obj, takie jak na rysunku 1.6.

Czym są foldery i pliki generowane przez kompilator?

Utworzone zostały dwa wygenerowane przez kompilator foldery o nazwach bin i obj. Oto krótki opis tego, co znajduje się w tych dwóch folderach:

Folder obj zawiera po jednym skompilowanym pliku obiektu dla każdego pliku z kodem źródłowym. Takie obiekty nie zostały jeszcze połączone ze sobą w ramach pliku wykonywalnego. Folder bin zawiera po jednym binarnym pliku wykonywalnym dla każdej aplikacji lub biblioteki klas. Więcej szczegółów na ten temat znajdziesz w rozdziale 7., "Poznawanie typów .NET".

Nie musisz jeszcze zaglądać do tych folderów ani przeglądać zapisanych w nich plików.

Musisz jednak wiedzieć, że kompilator w trakcie swojej pracy tworzy foldery i pliki tymczasowe. Możesz je w dowolnym momencie usunąć, a później zostaną one ponownie odtworzone. Programiści często w ten sposób "oczyszczają" projekt. W Visual Studio istnieje nawet pozycja menu Kompilowanie/Wyczyść rozwiązanie, która usuwa wszystkie tymczasowe pliki. Jest ona równoznaczna z wydaniem w Visual Studio Code polecenia dotnet clean.

Programy najwyższego poziomu

Jeżeli widziałeś już starsze projekty .NET, to z pewnością spodziewałeś się większej ilości kodu, nawet jeżeli chcieliśmy tylko wypisać prosty komunikat. Kodu jest mniej, ponieważ w .NET 6 i nowszych wersjach to kompilator samodzielnie dopisuje za nas część kodu.

Gdybyśmy utworzyli projekt dla .NET SDK 5.0 lub starszych albo zaznaczyli opcję Nie używaj instrukcji najwyższego poziomu, to w pliku Program.cs znalazłoby się znacznie więcej instrukcji, takich jak w poniższym kodzie:

using System; // NIepotrzebne w .NET 6 i nowszych
namespace WitajCS
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello, World!");
}
}
}

Podczas kompilacji podstawowy kod definiujący przestrzeń nazw, klasę Program i metodę Main jest automatycznie generowany i umieszczany wokół wpisanych przez nas instrukcji.

Wykorzystywana jest tutaj funkcja wprowadzona w .NET 5, która nosi nazwę programu najwyższego poziomu. Dopiero w .NET 6 Microsoft zaktualizował szablony projektów tak, żeby tej funkcji można było domyślnie użyć w aplikacjach konsoli. Z kolei w .NET 7 i nowszych dodano opcję pozwalającą użyć starszego stylu szablonu:

Jeżeli używasz Visual Studio 2022, zaznacz pole wyboru Nie używaj instrukcji najwyższego poziomu. Jeżeli używasz narzędzia dotnet w wierszu poleceń, dopisz do polecenia poniższą opcję:
dotnet new console --use-program-main

Wskazówka

Ostrzeżenie! Najważniejszą różnicą jest tutaj to, że kod generowany automatycznie nie definiuje przestrzeni nazw, a zatem klasa Program jest niejawnie definiowana w pustej przestrzeni nazw (co oznacza, że nie ma ona żadnej nazwy), a nie w przestrzeni nazw zgodnej z nazwą całego projektu.

Wymagania programów najwyższego poziomu

Trzeba tylko zapamiętać reguły dotyczące programów najwyższego poziomu:

W projekcie może istnieć tylko jeden plik tego typu. Ewentualne instrukcje using muszą znaleźć się na początku pliku. Jeżeli zadeklarujesz dodatkowe klasy lub inne typy, to muszą się one znaleźć na dole pliku. Jawnie definiowana metoda musi nosić nazwę Main, ale ta wygenerowana przez kompilator nazywa się <Main>$.

Niejawne importowanie przestrzeni nazw

Zapisana na początku pliku instrukcja using System; nakazuje zaimportować przestrzeń nazw System. Dzięki temu możemy później skorzystać z instrukcji Console.WriteLine. Dlaczego zatem nie musimy zaimportować jej w naszym projekcie?

Okazuje się, że co prawda nadal musimy zaimportować przestrzeń nazw System, ale tym razem robi to za nas nowa funkcja wprowadzona w C# 10 i .NET 6. Sprawdźmy, jak to działa.

W okienku Eksplorator rozwiązań rozwiń folder obj, w nim rozwiń folder Debug, a potem jeszcze folder net8.0 i otwórz plik o nazwie WitajCS.GlobalUsings.g.cs. Zauważ, że ten plik jest automatycznie generowany przez kompilator na potrzeby projektów korzystających z .NET 6 lub nowszej i używa funkcji nazywanej importem globalnym wprowadzonej w C# 10. Pozwala ona globalnie importować powszechnie używane przestrzenie nazw, takie jak System, do wszystkich plików z kodem. Oto zawartość tego pliku:
// <auto-generated/>
global using global::System;
global using global::System.Collections.Generic;
global using global::System.IO;
global using global::System.Linq;
global using global::System.Net.Http;
global using global::System.Threading;
global using global::System.Threading.Tasks;
W okienku Eksplorator rozwiązań kliknij przycisk Pokaż wszystkie pliki, aby ukryć foldery obj i bin.

Więcej informacji na temat tej funkcji podam w następnym rozdziale. Na razie zapamiętaj, że poważną różnicą między .NET 5 i .NET 6 jest to, że wiele szablonów projektów, takich jak projekt aplikacji konsoli, wykorzystuje nowe funkcje języka, aby ukrywać powtarzalne części kodu.

Ujawnianie ukrytego kodu za pomocą wyjątku

Sprawdźmy teraz, jak wygląda ten ukryty kod:

W pliku Program.cs, za instrukcją wypisującą komunikat, dopisz instrukcję rzucającą nowy wyjątek, taką jak poniżej:
throw new Exception();
W Visual Studio wybierz z menu pozycję Debuguj/Uruchom bez debugowania. (Nie uruchamiaj projektu z debugowaniem, bo wyjątek zostanie przechwycony przez debugger). Tekst wypisany w oknie konsoli prezentuje wyniki pracy naszej aplikacji, w tym ukrytą klasę Program, która została zdefiniowana przez kompilator, oraz metodę <Main>$, która przyjmuje parametr o nazwie args, co widać też na rysunku 1.7.

Rysunek 1.7. Rzucenie wyjątku ujawnia ukrytą metodę Program.<Main>$

Naciśnij dowolny klawisz, aby zamknąć okno konsoli i wrócić do Visual Studio.

Ujawnianie przestrzeni nazwy klasy Program

Sprawdźmy teraz, w jakiej przestrzeni nazw została zdefiniowana klasa Program:

W pliku Program.cs, przed instrukcją rzucającą wyjątek, dodaj wiersze kodu pobierające nazwę przestrzeni nazw klasy Program, a następnie wypisujące ją w konsoli:
string nazwa = typeof(Program).Namespace ?? "Brak!";
Console.WriteLine($"Przestrzeń nazw: {nazwa}");

Uwaga

Operator łączenia wartości null (??) sprawia, że powyższą instrukcję można odczytać jako "jeżeli przestrzeń nazw klasy Program to null, zwróć tekst "Brak!", a w przeciwnym wypadku zwróć nazwę tej przestrzeni". W dalszej części tej książki zobaczysz jeszcze wiele razy te słowa kluczowe i operatory. Na razie wpisz po prostu ten kod i zobacz, jak działa.

W Visual Studio wybierz z menu pozycję Debugowanie/Uruchom bez debugowania. Dane wypisane w oknie konsoli są wynikiem pracy aplikacji i zawierają informację, że ukryta klasa Program została zdefiniowana bez przestrzeni nazw, co widać też poniżej:
Przestrzeń nazw: Brak!
Naciśnij dowolny klawisz, aby zamknąć okno aplikacji konsoli i wrócić do Visual Studio.

Dodawanie drugiego projektu w Visual Studio 2022

Dodajmy teraz drugi projekt do naszego rozwiązania, aby przyjrzeć się metodom pracy z wieloma projektami.

W Visual Studio wybierz z menu pozycję Plik/Dodaj/Nowy projekt....

Wskazówka

Ostrzeżenie! Powyższy krok dodaje nowy projekt do istniejącego rozwiązania. NIE wybieraj z menu pozycji Plik/Nowy/Projekt..., ponieważ powoduje ona utworzenie nowego projektu oraz nowego rozwiązania (choć w tym przypadku okno dialogowe ma też opcję dodawania projektu do istniejącego rozwiązania).

W oknie dialogowym Dodawanie nowego projektu, na liście Ostatnie szablony projektów, wybierz pozycję Aplikacja konsoli [C#] i kliknij przycisk Dalej. W oknie dialogowym Konfiguruj nowy projekt, w polu Nazwa projektu, wpisz MojeSrodowisko, a w polu Lokalizacja pozostaw wartość C:\cs12dotnet8\ Rozdzial01 i kliknij przycisk Dalej. W oknie dialogowym Informacje dodatkowe wybierz z listy rozwijanej pozycję .NET 8.0 i zaznacz opcję Nie używaj instrukcji najwyższego poziomu.

Wskazówka

Ostrzeżenie! Upewnij się, że opcja Nie używaj instrukcji najwyższego poziomu jest zaznaczona, ponieważ chcemy tu zobaczyć starszy styl kodu w pliku Program.cs.

Kliknij przycisk Utwórz. W projekcie MojeSrodowisko, w pliku Program.cs, zwróć uwagę na instrukcje definiujące przestrzeń nazw, która jest tutaj zgodna z nazwą projektu, oraz na wewnętrzną klasę Program i metodę statyczną Main, która przyjmuje parametr args i nie zwraca żadnej wartości (void). Całość kodu możesz też zobaczyć poniżej:
namespace MojeSrodowisko
{
internal class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello, World!");
}
}
}
W pliku Program.cs, w metodzie Main zmień instrukcję Console.WriteLine tak, żeby wypisywała informacje o aktualnym katalogu, numer wersji systemu operacyjnego oraz nazwę przestrzeni nazw klasy Program:
Console.WriteLine(Environment.CurrentDirectory);
Console.WriteLine(Environment.OSVersion.VersionString);
Console.WriteLine("Przestrzeń nazw: {0}", typeof(Program).Namespace);
W okienku Eksplorator rozwiązań kliknij prawym przyciskiem myszy rozwiązanie Rozdzial01 i z menu kontekstowego wybierz pozycję Ustaw projekty startowe.... Otwartym oknie dialogowym wybierz opcję Bieżące zaznaczenie i kliknij przycisk OK. W okienku Eksplorator rozwiązań kliknij projekt MojeSrodowisko (albo jego dowolny folder lub plik) i zauważ, że Visual Studio pogrubia nazwę tego projektu, informując, że jest on teraz projektem startowym.

Wskazówka

Dobra praktyka: Polecam ten sposób ustawiania projektu startowego, ponieważ umożliwia on bardzo łatwe przełączanie się między uruchamianymi projektami poprzez proste kliknięcie projektu (lub dowolnego pliku w projekcie). Co prawda można kliknąć projekt prawym przyciskiem myszy i ustawić go jako projekt startowy, ale jeśli później chcielibyśmy uruchomić inny projekt, to konieczna byłaby ponowna ręczna zmiana ustawień. Prostsze jest zwykłe kliknięcie w dowolnym miejscu projektu. W większości rozdziałów będziemy uruchamiać tylko jeden projekt w danym momencie. W rozdziale 14., "Tworzenie i używanie serwisów sieciowych", pokażę, jak skonfigurować wiele projektów startowych.

Wybierz z menu pozycję Debuguj/Uruchom bez debugowania, aby uruchomić projekt MojeSrodowisko. Zwróć uwagę na podawane przez niego wyniki, przedstawione na poniższym wydruku i na rysunku 1.8.
C:\cs12dotnet8\Rozdzial01\MojeSrodowisko\bin\Debug\net8.0
Microsoft Windows NT 10.0.22631.0
Przestrzeń nazw: MojeSrodowisko

Rysunek 1.8. Uruchomienie programu najwyższego poziomu w rozwiązaniu składającym się z dwóch projektów

Uwaga

Windows 11 to tylko nazwa marketingowa. Oficjalny główny numer wersji systemu to nadal 10! O Windows 11 mówimy od numeru kompilacji 22000.

Naciśnij dowolny klawisz, aby zamknąć okno aplikacji konsoli i wrócić do Visual Studio.

Wskazówka

Gdy aplikację konsoli uruchamiasz w Visual Studio 2022, to jest ona uruchamiana z folderu <nazwaProjektu>\bin\Debug\net8.0. Warto o tym pamiętać, gdy w kolejnych rozdziałach będziemy pracować z systemem plików. Podczas używania Visual Studio Code (a dokładniej interfejsu konsoli dotnet) zauważysz inne zachowanie przy uruchamianiu aplikacji.

Tworzenie aplikacji konsoli za pomocą Visual Studio Code

Zadaniem tego podrozdziału jest zaprezentowanie procedury tworzenia aplikacji konsoli za pomocą Visual Studio Code oraz interfejsu wiersza poleceń dotnet.

Jeżeli nie chcesz korzystać z Visual Studio Code ani z interaktywnych notatników .NET, to możesz pominąć ten podrozdział i od razu przejść do podrozdziału "Wykorzystywanie repozytorium GitHuba w tej książce".

Wszystkie instrukcje i zrzuty ekranu pochodzą z systemu Windows, ale te same działania sprawdzą się w Visual Studio Code działającym w systemach macOS lub Linux.

Główną różnicą będą działania wykonywane w wierszu poleceń, takie jak usuwanie plików. Zarówno polecenia, jak i ścieżki będą zapewne wyglądały inaczej w każdym z systemów: Windows, macOS oraz Linux. Na szczęście polecenie dotnet działa tak samo we wszystkich systemach.

Pisanie kodu za pomocą Visual Studio Code

Zacznijmy zatem od pisania kodu!

Uruchom swoje ulubione narzędzie do pracy z systemem plików, takie jak Eksplorator plików w systemie Windows albo Finder w systemie Mac. W systemie Windows przejdź na dysk C:, a w systemach macOS lub Linux przejdź do swojego katalogu użytkownika (mój katalog nazywa się markjpricehome/markjprice). Możesz też przejść do dowolnego innego katalogu, w którym chcesz przechowywać swoje projekty. Utwórz nowy katalog o nazwie cs12dotnet8 (jeżeli wcześniej wykonano operacje z podrozdziału poświęconego Visual Studio, to ten katalog powinien już istnieć). W folderze cs12dotnet8 utwórz nowy folder, o nazwie Rozdzial01-vscode.

Uwaga

Jeżeli wcześniej nie zostały wykonane działania z podrozdziału poświęconego Visual Studio 2022, to można tu użyć nazwy Rozdzial01. Zakładam jednak, że będą wykonywane ćwiczenia z każdym edytorem kodu, dlatego lepiej jest wybrać nazwę inną dla każdego z nich.

W folderze Rozdzial01-vscode otwórz okno wiersza poleceń lub terminala. Na przykład w systemie Windows kliknij prawym przyciskiem myszy i z menu kontekstowego wybierz pozycję Otwórz w Terminalu. W oknie wiersza poleceń lub terminala skorzystaj z polecenia dotnet, aby utworzyć nowe rozwiązanie, o nazwie Rozdzial01:
dotnet new sln --name Rozdzial01

Uwaga

Możesz użyć opcji -n lub --name, aby zdefiniować nazwę. Domyślnie jest przyjmowana nazwa zgodna z nazwą folderu, czyli w tym przypadku Rozdzial01-vscode.

Przyjrzyj się wynikom, które powinny wyglądać tak:
Pomyślnie utworzono szablon "Plik rozwiązania".
W oknie wiersza poleceń lub terminala użyj polecenia dotnet, aby utworzyć nowy podkatalog, a w nim projekt aplikacji konsoli o nazwie WitajCS:
dotnet new console --output WitajCS

Uwaga

Możesz użyć opcji -o lub --output, aby zdefiniować nazwę folderu i projektu. Polecenie dotnet new console domyślnie skorzysta z najnowszej wersji .NET SDK. Aby użyć innej wersji, należy podać opcję -f lub --framework i w niej określić potrzebną wersję SDK. Na przykład chcąc użyć .NET 6, należy posłużyć się poleceniem dotnet new console -f net6.0.

W oknie wiersza poleceń lub terminala użyj polecenia dotnet, aby dodać nowo utworzony projekt do rozwiązania:
dotnet sln add WitajCS
Przyjrzyj się wynikom, które powinny wyglądać tak:
Dodano projekt "WitajCS\WitajCS.csproj" do rozwiązania.
W oknie wiersza poleceń lub terminala uruchom Visual Studio Code i otwórz w nim aktualny folder, określając go za pomocą pojedynczej kropki (.):
code .
Gdy pojawi się okno dialogowe z pytaniem, czy ufasz autorom plików w tym folderze, zaznacz opcję Zaufaj autorom wszystkich plików w folderze nadrzędnym "cs12dotnet8" i kliknij przycisk Tak, ufam autorom. W Visual Studio Code, w panelu EKSPLORATOR i w widoku folderu Rozdzial01-vscode, rozwiń folder WitajCS. Zobaczysz, że polecenie dotnet utworzyło już dwa pliki: WitajCS.csproj i Program.cs. Można je też zobaczyć na rysunku 1.9.

Rysunek 1.9. W panelu Eksplorator witać, że utworzono już dwa pliki i jeden folder

Wybierz z menu pozycję Wyświetl/Dane wyjściowe. W panelu Dane wyjściowe, z listy rozwijanej wybierz pozycję Zestaw deweloperski języka C# i zauważ, że narzędzie już rozpoznało i przeanalizowało całe rozwiązanie, tak jak na rysunku 1.10.

Rysunek 1.10. Rozszerzenie C# Dev Kit analizuje plik rozwiązania

W dolnej części panelu EXPLORATOR znajdź pozycję Eksplorator rozwiązań. Przeciągnij Eksplorator rozwiązań na górę panelu EXPLORER i rozwiń go. W Eksploratorze rozwiązań rozwiń projekt WitajCS, a następnie kliknij plik Program.cs, aby otworzyć go w oknie edytora. W pliku Program.cs zmień 2. wiersz kodu tak, żeby w konsoli wypisywany był tekst "Witaj, C#!".

Wskazówka

Dobra praktyka: Wybierz z menu pozycję Plik/Zapisz automatycznie. Dzięki temu nie trzeba będzie pamiętać o zapisywaniu zmian w plikach przed każdym kompilowaniem aplikacji.

Kompilowanie i uruchamianie kodu za pomocą polecenia dotnet

Następnym zadaniem jest skompilowanie i uruchomienie kodu.

W Eksploratorze rozwiązań kliknij prawym przyciskiem myszy dowolny plik w projekcie WitajCS i wybierz z menu kontekstowego pozycję Otwórz w zintegrowanym terminalu. W oknie Terminal wprowadź polecenie dotnet run. W panelu TERMINAL pojawią się wyniki pracy naszej aplikacji, takie jak na rysunku 1.11.

Rysunek 1.11. Wynik uruchomienia Twojej pierwszej aplikacji konsoli w Visual Studio Code

W pliku Program.cs, zaraz za instrukcją wypisującą ten komunikat, dopisz instrukcję pobierającą nazwę przestrzeni nazw klasy Program i wypisującą ją w konsoli, a za nią jeszcze jedną instrukcję, rzucającą nowy wyjątek:
string nazwa = typeof(Program).Namespace ?? "Brak!";
Console.WriteLine($"Przestrzeń nazw: {nazwa}");
throw new Exception();
W okienku Terminal wpisz polecenie dotnet run.

Wskazówka

W oknie TERMINAL możesz używać klawiszy strzałek w górę i w dół, aby wybrać poprzednio wydane polecenia, oraz klawisz strzałek w lewo i w prawo, aby wprowadzać poprawki do polecenia przed naciśnięciem klawisza Enter.

W oknie TERMINAL pojawią się wyniki pracy aplikacji, w tym informacja o ukrytej klasie Program, zdefiniowanej przez kompilator razem z metodą <Main>$, która przyjmuje parametr o nazwie args, jak również informacja o braku zdefiniowanej przestrzeni nazw, co widać na wydruku:
Witaj, C#!
Przestrzeń nazw: Brak!
Unhandled exception. System.Exception: Exception of type 'System.Exception' was thrown.
at Program.<Main>$(String[] args) in C:\cs12dotnet8\Rozdzial01-vscode\WitajCS\Program.cs:line 5

Dodawanie drugiego projektu w Visual Studio Code

Dodajmy teraz drugi projekt do naszego obszaru roboczego, aby sprawdzić, jak wygląda praca z wieloma projektami.

W panelu TERMINAL przejdź do katalogu Rozdzial01-vscode, używając tego polecenia:
cd ..
W panelu TERMINAL wpisz polecenie tworzące nową aplikację konsoli o nazwie MojeSrodowisko, w którym będzie stosowany starszy styl szablonu, nie korzystający z programu najwyższego poziomu:
dotnet new console -o MojeSrodowisko --use-program-main

Wskazówka

Dobra praktyka: Musisz uważać przy wprowadzaniu poleceń w okienku TERMINAL. Przed wprowadzeniem potencjalnie niszczycielskich poleceń upewnij się, że aktywny jest właściwy folder!

W panelu TERMINAL użyj polecenia dotnet, aby dodać nowo utworzony projekt do rozwiązania:
dotnet sln add MojeSrodowisko
Przyjrzyj się wynikom, które powinny wyglądać tak:
Dodano projekt "MojeSrodowisko\MojeSrodowisko.csproj" do rozwiązania.
W Eksploratorze rozwiązań, w folderze MojeSrodowisko, otwórz plik Program.cs, a następnie zmień instrukcje widoczne w metodzie Main tak, żeby wypisywały aktualny katalog, podawały numer wersji systemu operacyjnego oraz nazwę przestrzeni nazw klasy Program:
Console.WriteLine(Environment.CurrentDirectory);
Console.WriteLine(Environment.OSVersion.VersionString);
Console.WriteLine("Przestrzeń nazw: {0}", typeof(Program).Namespace);
W Eksploratorze rozwiązań kliknij prawym przyciskiem myszy projekt MojeSrodowisko i z menu kontekstowego wybierz pozycję Otwórz w zintegrowanym terminalu. W panelu TERMINAL wprowadź polecenie uruchamiające program: dotnet run. Zwróć uwagę na to, że wynik działania programu pojawia się w panelu TERMINAL, co widać na poniższym wydruku i na rysunku 1.12.
C:\cs12dotnet8\Rozdzial01-vscode\MojeSrodowisko
Microsoft Windows NT 10.0.22631.0
Przestrzeń nazw: MojeSrodowisko

Rysunek 1.12. Uruchomienie programu najwyższego poziomu w Visual Studio Code dwoma projektami

Uwaga

Po otwarciu wielu okien terminala możesz się między nimi przełączać, klikając ich nazwy w panelu po prawej stronie panelu TERMINAL. Domyślnie będzie wyświetlana nazwa jednej z popularnych powłok, takich jak pwsh, powershell, zsh lub bash. Kliknij prawym przyciskiem myszy i z menu kontekstowego wybierz pozycję Zmień nazwę, aby wprowadzić inną nazwę.

Wskazówka

Gdy używasz Visual Studio Code, a dokładniej polecenia dotnet, aby uruchomić aplikację konsoli, to aplikacja ta zostanie uruchomiona w folderze <nazwaprojektu>. W przypadku Visual Studio 2022 dla Windows ta sama aplikacja zostanie uruchomiona w folderze <nazwaprojektu>\bin\Debug\net8.0. Należy o tym pamiętać w kolejnych rozdziałach, gdy będziemy pracować z systemem plików.

Jeżeli spróbujesz uruchomić ten program w systemie macOS Ventura, to środowisko systemu operacyjnego będzie inne, co widać na poniższym wydruku:

Unix 13.5.2

Wskazówka

Dobra praktyka: Mimo że kod źródłowy, czyli pliki .csproj i .cs, ma taką samą zawartość, to automatycznie generowane przez kompilator foldery bin i obj mogą się różnić, co może prowadzić do błędów. Jeśli chcesz otwierać ten sam projekt zarówno w Visual Studio 2022, jak i Visual Studio Code, usuń tymczasowe foldery bin i obj przed otwarciem projektu w drugim edytorze kodu. To właśnie dlatego w tym podrozdziale poprosiłem Cię o utworzenie oddzielnego folderu dla projektów Visual Studio Code.

Podsumowanie kroków wykonanych w Visual Studio Code

Aby utworzyć rozwiązanie i projekty w Visual Studio Code, trzeba wykonać następujące kroki:

Utwórz folder rozwiązania, na przykład Rozdzial01. Utwórz plik rozwiązania, używając polecenia dotnet new sln. Utwórz folder i projekt, używając szablonu: dotnet new console -o WitajCS. Dodaj folder i umieszczony w nim projekt do rozwiązania: dotnet sln add WitajCS. Powtarzaj kroki 3. i 4., aby tworzyć i dodawać kolejne projekty. Otwórz folder zawierający rozwiązanie w Visual Studio Code: code ..

Podsumowanie innych typów projektów używanych w tej książce

Projekt Aplikacja konsoli (console) jest tylko jednym z wielu szablonów projektów. W tej książce będziemy tworzyć wiele projektów, używając szablonów wymienionych w tabeli 1.5.

Tabela 1.5. Nazwy szablonów projektów w różnych edytorach kodu

Visual Studio 2022

dotnet new

JetBrains Rider - Typ

Aplikacja konsoli

console

Console Application

Biblioteka klas

classlib

Class Library

Projekt testów xUnit

xunit

Unit Test Project - xUnit

ASP.NET Core - puste

web

ASP.NET Core Web Application - Empty

Biblioteka klas Razor

razorclasslib

ASP.NET Core Web Application - Razor Class Library

Aplikacja internetowa ASP.NET Core (Model-View-Controller)

mvc

ASP.NET Core Web Application - Web App (Model-View-Controller)

Internetowy interfejs API platformy ASP.NET Core

webapi

ASP.NET Core Web Application - Web API

Internetowy interfejs API platformy ASP.NET Core (native AOT)

webapiaot

ASP.NET Core Web Application - Web API (native AOT)

Blazor Web App

blazor

ASP.NET Core Web Application - Blazor Web App

Kroki, jakie należy wykonać, aby dodać nowy projekt do rozwiązania, są zawsze takie same. Zmienia się jedynie nazwa szablonu projektu i czasami wymagane są różne opcje wiersza poleceń. Zawsze będę podawał te niezbędne opcje, jeżeli będą się one różniły od wartości domyślnych.

Podsumowanie domyślnych ustawień, opcji i przełączników w różnych szablonach projektów znajdziesz pod adresem https://github.com/markjprice/cs12dotnet8/blob/main/docs/ch01-project-options.md.

Wykorzystywanie repozytorium GitHuba w tej książce

Git jest powszechnie używanym systemem kontroli wersji kodu źródłowego. GitHub to firma, witryna oraz aplikacja, które ułatwiają zarządzanie repozytoriami Gita. Firma Microsoft kupiła GitHub w 2018 roku, dzięki czemu dostępne funkcje są coraz mocniej integrowane w narzędzia Microsoftu.

Na potrzeby tej książki przygotowałem repozytorium GitHuba i wykorzystałem je do:

przechowywania kodu rozwiązań, które mogę aktualizować nawet po wydaniu książki; udostępniania dodatkowych materiałów do tej książki, takich jak poprawki, małe usprawnienia, listy przydatnych linków oraz dłuższe artykuły, które nie zmieściły się w książce.

Kod aplikacji tworzonych w tej książce

Kod rozwiązań, jakie będziemy tworzyć w tej książce, składa się z osobnych folderów dla poszczególnych rozdziałów, które można otwierać w następujących edytorach kodu:

Visual Studio 2022 i JetBrains Rider: Otwórz plik rozwiązania z rozszerzeniem .sln. Visual Studio Code: Otwórz folder zawierający plik rozwiązania.

Każdy z rozdziałów od 1. do 11. ma swój własny plik rozwiązania, o nazwie RozdzialXX.sln, gdzie XX oznacza numer rozdziału. W przypadku rozdziałów od 12. do 15. przygotowałem tylko jeden plik rozwiązania, o nazwie PraktyczneAplikacje.sln.

Kod wszystkich rozwiązań znajdziesz pod adresem https://ftp.helion.pl/przyklady/c12n88.zip, a oryginalne, angielskojęzyczne repozytorium GitHub - pod adresem https://github.com/markjprice/cs12dotnet8/tree/main/code.

Wskazówka

Dobra praktyka: W razie potrzeby wróć do tego rozdziału, aby przypomnieć sobie, jak tworzyć wiele projektów w wybranym edytorze kodu i nimi zarządzać. Repozytorium GitHub zawiera szczegółowe instrukcje dla trzech edytorów kodu (Visual Studio 2022, Visual Studio Code i JetBrains Rider) wraz z dodatkowymi zrzutami ekranu: https://github.com/markjprice/cs12dotnet8/tree/main/docs/code-editors/.

Pobieranie kodu rozwiązań z repozytorium GitHuba

Jeżeli jednak chcesz po prostu pobrać wszystkie pliki przy użyciu Gita, to kliknij zielony przycisk Code, a potem wybierz opcję Download ZIP, tak jak na rysunku 1.13.

Wskazówka

Dobra praktyka: Dobrze jest sklonować lub pobrać kod wszystkich rozwiązań dla tej książki, aby móc stosować krótsze ścieżki, takie jak C:\cs12dotnet8\ lub C:\Kod\. Pozwala to uniknąć sytuacji, w której nazwy plików generowanych przy kompilacji przekraczają dopuszczalną długość ścieżki. Należy też unikać stosowania znaków specjalnych (na przykład znaku #), czyli nie używać takich nazw folderów jak C:\Projekty C#\. Taka nazwa folderu może sprawdzać się przy prostych aplikacjach konsoli, ale gdy tylko zaczniesz korzystać z funkcji automatycznego generowania kodu, to na pewno natkniesz się na różne dziwne błędy. Nazwy folderów powinny być zatem krótkie i proste.

Rysunek 1.13. Pobieranie repozytorium jako pliku ZIP

Używanie systemu Git w Visual Studio Code

Visual Studio Code może używać systemu Git, ale wykorzystuje przy tym zainstalowany w systemie operacyjnym pakiet Git. Musisz zatem sam zainstalować pakiet Git 2.0 albo nowszy.

Pod tym adresem możesz pobrać niezbędny instalator: https://git-scm.com/download.

Jeżeli wolisz korzystać z programów z interfejsem graficznym, to pod tym adresem możesz pobrać program GitHub Desktop: https://desktop.github.com.

Klonowanie rozwiązań z tej książki z repozytorium kodu

Sklonujmy teraz z repozytorium kodu rozwiązanie przygotowane na potrzeby tej książki. W poniższych instrukcjach będę używał terminala z Visual Studio Code, ale te same polecenia możesz wpisać też w dowolnym innym wierszu poleceń lub oknie terminala.

W folderze Dokumenty utwórz folder o nazwie Repozytoria albo użyj dowolnej innej nazwy dla folderu przechowującego repozytoria Gita. W Visual Studio Code otwórz folder Repozytoria. Wybierz z menu pozycję Wyświetl/Terminal, a następnie wprowadź poniższe polecenie:
git clone https://github.com/markjprice/cs12dotnet8.git

Uwaga

Klonowanie wszystkich rozwiązań dla poszczególnych rozdziałów na lokalny dysk twardy może zająć kilka minut.

Gdzie znaleźć pomoc?

W tym podrozdziale dowiesz się, gdzie w sieci WWW można znaleźć wartościowe informacje o programowaniu.

Przeglądanie dokumentacji Microsoftu

Najlepszym miejscem do poszukiwania pomocy dotyczącej narzędzi programistycznych i platform firmy Microsoft są strony Microsoft Learn dostępne pod adresem https://learn.microsoft.com/pl-pl/docs.

Linki do dokumentacji używane w tej książce

Oficjalna dokumentacja Microsoft dla .NET musi obejmować wszystkie wersje. Domyślnie wyświetlana jest dokumentacja do najnowszej wersji GA (ogólnodostępna).

Na przykład od listopada 2023 r. do listopada 2024 r. domyślną wersją .NET prezentowaną na stronach dokumentacji będzie 8.0. Od listopada 2024 r. do listopada 2025 r. domyślną wersją .NET będzie 9.0. Poniższy link automatycznie przekieruje Cię do aktualnej wersji w zależności od bieżącej daty:

https://learn.microsoft.com/pl-pl/dotnet/api/system.diagnostics.codeanalysis.stringsyntaxattribute

Aby wyświetlić stronę dokumentacji związaną z .NET 7, na końcu adresu dodaj ?view=net-7.0:

https://learn.microsoft.com/pl-pl/dotnet/api/system.diagnostics.codeanalysis.stringsyntaxattribute?view=net-7.0

Linki do dokumentacji w tej książce nie zawierają określenia wersji, więc po listopadzie 2024 r. będą one pokazywać strony dokumentacji dla .NET 9.0. Jeśli chcesz wymusić wyświetlanie dokumentacji dla wersji .NET 8.0, dodaj ?view=net-8.0 na końcu adresu.

Możesz też sprawdzić listę wersji .NET, z jakimi powiązana jest dana funkcja. Wystarczy na końcu adresu dopisać #dotyczy:

https://learn.microsoft.com/pl-pl/dotnet/api/system.diagnostics.codeanalysis.stringsyntaxattribute#dotyczy

W ten sposób można się przekonać, że atrybut StringSyntax jest dostępny od wersji .NET 7.

Uzyskiwanie pomocy dla narzędzia dotnet

W wierszu poleceń można poprosić narzędzie dotnet o podanie informacji na temat dostępnych poleceń. W tym celu używa się następującej składni:

dotnet help <polecenie>

Spowoduje to otwarcie w przeglądarce strony z dokumentacją wybranego polecenia. Typowo używane polecenia dotnet to new, build, run i wiele innych.

Wskazówka

Ostrzeżenie! Polecenie dotnet help new działało poprawnie w .NET Core 3.1 i w .NET 6, ale w .NET 7 i nowszych wypisuje tylko komunikat o błędzie: Określone polecenie ("new") nie jest prawidłowym poleceniem zestawu SDK. Określ prawidłowe polecenie zestawu SDK. Aby uzyskać więcej informacji, uruchom polecenie dotnet help. Można mieć nadzieję, że wkrótce ten błąd zostanie poprawiony.

Istnieje też dokumentacja wyświetlana w oknie wiersza poleceń. Tutaj składnia wygląda następująco:

dotnet <polecenie> -?|-h|--help

Na przykład polecenie dotnet new -? lub dotnet new -h lub dotnet new --help wypisze dokumentację polecenia new w oknie wiersza poleceń.

Uwaga

Jak zapewne się domyślasz, polecenie dotnet help help otwiera okno przeglądarki i wyświetla w niej pomoc dla polecenia help, natomiast polecenie dotnet help -h wyświetla tę dokumentację w wierszu poleceń.

Zobaczmy teraz kilka przykładów:

Aby otworzyć w przeglądarce oficjalną dokumentację polecenia dotnet build, wprowadź poniższe polecenie w oknie wiersza poleceń albo w terminalu Visual Studio Code. Zwróć uwagę na otwarte okno przeglądarki, które powinno wyglądać tak jak na rysunku 1.14.
dotnet help build

Rysunek 1.14. Strona WWW z dokumentacją polecenia dotnet build

Aby uzyskać pomoc, w oknie wiersza poleceń użyj przełącznika -?, -h lub --help:
dotnet build -?
Zobaczysz wtedy poniższy tekst pomocy:
Opis:
Konstruktor platformy .NET
Użycie:
dotnet build [<PROJECT | SOLUTION>...] [options]
Argumenty:
<PROJECT | SOLUTION> Plik projektu lub rozwiązania, dla którego ma zostać wykonana operacja.
Jeśli plik nie zostanie podany, polecenie wyszuka go w bieżącym katalogu.
Opcje:
--ucr, --use-current-runtime Użyj bieżącego środowiska uruchomieniowego jako docelowego środowiska uruchomieniowego.
-f, --framework <FRAMEWORK> Platforma docelowa kompilacji. Platforma docelowa musi być również określona w pliku projektu.
...
-?, -h, --help Pokaż pomoc wiersza polecenia.
Użyj obu rodzajów pomocy dla takich poleceń jak add, help, list, new i run, pamiętając, że dla polecenia new może nie pojawić się strona pomocy z powodu błędu wprowadzonego w .NET 7.

Przeglądanie definicji typów i ich elementów

Bardzo przydatnym klawiszem w Visual Studio Code oraz Visual Studio 2022 jest klawisz F12, aktywujący funkcję Przejdź do definicji. Powoduje ona wyświetlenie publicznej definicji wybranego typu, która pochodzi z metadanych skompilowanego modułu albo została pobrana z linku źródłowego.

Niektóre narzędzia (takie jak dekompilator ILSpy) wykonują nawet działania inżynierii wstecznej, żeby odtworzyć kod C# na podstawie metadanych i kodu IL.

Bardzo podobne działanie ma funkcja Przejdź do implementacji (Ctrl+F12). Zamiast korzystać z metadanych lub dekompilowania, wyświetla ona oryginalny kod źródłowy, o ile jest on dostępny poprzez opcjonalną funkcję linku do źródła.

Wskazówka

Ostrzeżenie! Funkcja Przejdź do definicji powinna wyświetlać zdekompilowane metadane dla elementu klasy lub typu. Ale jeśli wcześniej otwierano link do źródła, to funkcja skorzysta z tego linku. Z kolei funkcja Przejdź do implementacji powinna wyświetlać kod implementacji w linku źródłowym dla elementu klasy lub typu. Jeżeli jednak funkcja linku źródłowego jest wyłączona, zostaną wyświetlone zdekompilowane metadane.

Sprawdźmy teraz, jak można w praktyce skorzystać z funkcji Przejdź do definicji.

W Visual Studio 2022 lub Visual Studio Code otwórz rozwiązanie lub folder o nazwie Rozdzial01.

Jeżeli używasz Visual Studio 2022:

Wybierz z menu pozycję Narzędzia/Opcje. W polu wyszukiwania wpisz do źródeł. Wybierz pozycję Edytor tekstu/C#/Zaawansowane. Wyłącz zaznaczenie opcji Włącz nawigację do źródeł linków źródłowych i osadzonych (rysunek 1.15), a następnie kliknij przycisk OK.

Rysunek 1.15. Wyłączanie nawigacji do źródeł dla funkcji Przejdź do definicji

Uwaga

Definicje mogą zostać albo odczytane z metadanych za pomocą inżynierii wstecznej, albo wczytane z oryginalnego kodu źródłowego, o ile taka opcja jest włączona. Uważam, że kod z metadanych jest bardziej przydatny, o czym zaraz się przekonasz. Na końcu tego podrozdziału spróbuj ponownie włączyć opcję Nawigacji do źródeł, aby zobaczyć różnicę.

W projekcie WitajCS, w pliku Program.cs, w metodzie Main, wprowadź poniższą instrukcję, deklarującą zmienną typu int o nazwie z:
int z;
Kliknij typ int, a w Visual Studio 2022 lub Visual Studio Code kliknij prawym przyciskiem myszy i wybierz z menu kontekstowego pozycję Przejdź do definicji. W JetBrains Rider wybierz z menu pozycję Go to/Go to Declaration or Usages. W nowo otwartym oknie z kodem możesz przejrzeć definicję typu int, której część jest widoczna na rysunku 1.16.

Rysunek 1.16. Metadane dla typu int

W ten sposób można się dowiedzieć, że typ int:

Został zdefiniowany za pomocą słowa kluczowego struct. Znajduje się w module System.Runtime. Znajduje się w przestrzeni nazw System. Nosi nazwę Int32. A to oznacza, że jest aliasem dla typu System.Int32. Implementuje interfejs IComparable. Definiuje stałe określające minimalną i maksymalną wartość. Udostępnia takie metody jak Parse.

Uwaga

Na razie funkcja Idź do definicji lub Go To Definition nie będzie szczególnie przydatna, ponieważ nie wiesz jeszcze, co oznaczają poszczególne pojęcia. Już w połowie tej książki, po przeczytaniu rozdziałów od 2. do 6., poznasz język C# na tyle, żeby móc często korzystać z tej funkcji.

W oknie edytora kodu przewiń zawartość do metody Parse przyjmującej jeden parametr typu string, taki jak w poniższym kodzie:
public static int Parse(string s)
Rozwiń ten kod i przyjrzyj się komentarzom będącym dokumentacją dla tej metody, przedstawionym na rysunku 1.17.

Rysunek 1.17. Komentarze do metody Parse z parametrem typu string

W komentarzach można zobaczyć, że Microsoft zapisał następujące informacje:

Podsumowanie opisujące działanie metody. Parametry przyjmowane przez metodę, w tym przypadku wartość typu string. Wartość zwracana przez metodę, z podaniem typu danych. Trzy wyjątki, które mogą zostać rzucone przy wywołaniu tej metody (ArgumentNullException, FormatException i OverflowException). Teraz już wiesz, że każde wywołanie metody Parse trzeba umieścić w bloku try, który przechwyci ewentualnie rzucone wyjątki.

Mam nadzieję, że już nie możesz się doczekać, żeby dowiedzieć się, co to wszystko oznacza!

Jeszcze chwilka cierpliwości. Już prawie zakończyliśmy ten rozdział, a w kolejnym zajmiemy się szczegółami języka C#. Najpierw jednak musimy sprawdzić, gdzie jeszcze można szukać pomocy.

Konfigurowanie wskazówek w tekście

W kodach prezentowanych w tej książce staram się przy każdym wywołaniu metody jawnie podawać nazwy parametrów, aby ułatwić czytanie i zrozumienie kodu. Na przykład w poniższym kodzie jawnie podaję nazwy parametrów format i arg0:

Console.WriteLine(format: "Wartość to {0}.", arg0: 19.8);

Funkcja wskazówek w tekście wyświetla nazwy parametrów, dzięki czemu nie musimy samodzielnie wprowadzać ich w kodzie. Na rysunku 1.18 prezentuję odpowiednie opcje w edytorach kodu.

Rysunek 1.18. Konfigurowanie wskazówek w tekście

W większości edytorów kodu ta funkcja może być włączona cały czas albo jedynie wtedy, gdy jest naciśnięta kombinacja klawiszy Alt+F1 lub Ctrl:

W Visual Studio 2022 wybierz z menu pozycję Narzędzia/Opcje..., w otwartym oknie przejdź do sekcji Edytor tekstu/C#/Zaawansowane, przewiń listę opcji do grupy Wskazówki w tekście i zaznacz pole wyboru Wyświetl wskazówki w tekście dla nazw parametrów. Na koniec kliknij przycisk OK. W Visual Studio Code wybierz z menu pozycję Plik/Preferencje/Ustawienia, w polu wyszukiwania wpisz inlay i zaznacz pole wyboru Display inline parameter name hints. W JetBrains Rider w oknie Settings przejdź do sekcji Editor/Inlay Hints/C#/Parameter Name Hints i zaznacz w niej odpowiednie opcje.

Poszukiwanie odpowiedzi na Stack Overflow

Stack Overflow to jedna z najpopularniejszych witryn WWW pozwalająca uzyskać odpowiedzi na trudne pytania dotyczące programowania. Przyjrzyjmy się przykładowi.

Uruchom swoją ulubioną przeglądarkę. Otwórz stronę stackoverflow.com i w polu wyszukiwania wpisz securestring. Zwróć uwagę na otrzymane wyniki, które widnieją również na rysunku 1.19.

Rysunek 1.19. Wyniki wyszukiwania słowa securestring w serwisie Stack Overflow

Poszukiwanie odpowiedzi za pomocą Google

Możesz też skorzystać z wyszukiwarki Google i użyć jej zaawansowanych opcji, żeby zwiększyć prawdopodobieństwo uzyskania właściwych odpowiedzi na swoje pytania.

Przejdź na stronę Google. Jeżeli szukasz informacji na temat oczyszczania pamięci, użyj pojęcia garbage collection, wpisując je do zapytania. W odpowiedzi zapewne zobaczysz wycinek strony Wikipedii z definicją tego pojęcia w naukach komputerowych, i to w kilku wersjach językowych, w tym polskiej. Możesz jednak poprawić to wyszukiwanie, ograniczając je do samych przydatnych witryn, np. StackOverflow. Można też wykluczyć nieinteresujące nas języki programowania, takie jak C++, Rust albo Python. Z drugiej strony, można wymóc poszukiwanie odpowiedzi dla języka C# i platformy .NET, tak jak w poniższym zapytaniu:
garbage colection site:stackoverflow +C# -Java

Przeszukiwanie kodu źródłowego .NET

Czasami wiele można się nauczyć, przeglądając implementację .NET przygotowaną przez zespoły Microsoftu. Kod źródłowy całego .NET jest dostępny w publicznych repozytoriach GitHub. Być może wiesz już, że w .NET istnieje specjalny atrybut przeznaczony do sprawdzania poprawności adresów e-mail. Możesz zatem poszukać w repozytorium słowa email i sprawdzić, czy uda się dowiedzieć, jak on działa:

Uruchom swoją ulubioną przeglądarkę i wejdź na stronę https://github.com/search. Kliknij opcję advanced search. W polu wyszukiwania wpisz email. W polu In these repositories wpisz dotnet/runtime. (Możesz też włączyć do wyszukiwania takie repozytoria jak dotnet/core, dotnet/aspnetcore, dotnet/wpf i dotnet/winforms). Z listy Written in this language wybierz pozycję C#. Zwróć uwagę na to, że w polu Advanced search zostało już przygotowane całe zapytanie. Kliknij przycisk Search, a następnie po lewej stronie wybierz filtr Code. Zwróć uwagę na to, że w wynikach wyszukiwania pojawia się też nazwa EmailAddressAttribute (rysunek 1.20).

Rysunek 1.20. Zaawansowane wyszukiwanie słowa "email" w repozytorium dotnet/runtime

Kliknij łącze do pliku źródłowego i przejrzyj go. Zwróć uwagę na to, że zawiera on implementację kontroli adresu e-mail polegającą na sprawdzeniu, czy w ciągu znaków znajduje się znak @, przy czym nie może on być pierwszym znakiem w ciągu:
// only return true if there is only 1 '@' character
// and it is neither the first nor the last character
int index = valueAsString.IndexOf('@');
return
index > 0 &&
index != valueAsString.Length - 1 &&
index == valueAsString.LastIndexOf('@');
Zamknij przeglądarkę.

Uwaga

Możesz też korzystać z poniższego adresu, aby wyszukiwać różne pojęcia. Wystarczy tylko zmienić w adresie słowo "email" na to, którego chcesz poszukać: https://github.com/search?q=%22email%22+repo%3Adotnet%2Fruntime+language%3AC%23&type=code&ref=advsearch.

Subskrybowanie blogów

Jeżeli chcesz być na bieżąco z rozwojem platformy .NET, to dobrze jest subskrybować oficjalnego bloga .NET Blog, prowadzonego przez zespoły inżynierów tworzących platformę (https://blogs.msdn.microsoft.com/dotnet/).

Filmy Scotta Hanselmana

Scot Hanselman z firmy Microsoft prowadzi doskonały kanał na YouTubie (http://computerstufftheydidntteachyou.com), gdzie opowiada o sprawach związanych z komputerami, o których nikt wcześniej Ci nie powiedział.

Polecam ten kanał każdemu, kto pracuje z komputerami.

Narzędzia AI, takie jak ChatGPT i GitHub Copilot

W ciągu ostatniego roku jedną z największych zmian w programowaniu jest pojawienie się narzędzi generatywnej sztucznej inteligencji (AI), które mogą pomóc w takich zadaniach jak uzupełnianie fragmentów kodu, implementacja całych funkcji, pisanie testów jednostkowych lub sugerowanie poprawek dla błędów w istniejącym kodzie.

Uwaga

Możesz przeczytać, co programiści sądzą o narzędziach AI w ankiecie deweloperów Stack Overflow z 2023 r.: https://stackoverflow.blog/2023/06/14/hype-or-not-developers-have-something-to-say-about-ai/. Okazuje się, że "44% z nich obecnie używa narzędzi AI w swojej pracy, a 26? planuje zacząć to robić wkrótce".

ChatGPT to jedna z popularnych platform wykorzystujących tego typu sztuczną inteligencję. Udostępnia dwa modele: 3.5 (darmowy) i 4.0 (20 dolarów miesięcznie).

Wyobraź sobie, że potrzebujesz napisać funkcję C# do sprawdzania poprawności adresu e-mail. Możesz otworzyć ChatGPT i wpisać taki prompt:

napisz w c# funkcję sprawdzającą poprawność adresu email

W odpowiedzi otrzymasz kompletny kod klasy z wszystkimi metodami (rysunek 1.21).

Rysunek 1.21. ChatGPT tworzy funkcję sprawdzającą adres e-mail

Następnie ChatGPT podaje wyjaśnienie kodu i przykład użycia tej funkcji:

// Testowanie funkcji IsValidEmail
string email1 = "example@example.com";
Console.WriteLine($"{email1} jest poprawnym adresem e-mail: {IsValidEmail(email1)}");

Czy jednak narzędzie generatywnej sztucznej inteligencji ogólnego przeznaczenia, takie jak ChatGPT, będzie dobrą pomocą dla programisty C#?

Microsoft udostępnia usługę przygotowaną specjalnie dla programistów - GitHub Copilot. Umożliwia ona automatyczne uzupełnianie kodu bezpośrednio w edytorze. Za wysoką inteligencję tej usługi odpowiada model GPT-4. Microsoft udostępnia też rozszerzenia dla wielu różnych edytorów, takich jak Visual Studio 2022, Visual Studio Code i JetBrains IntelliJ.

Uwaga

Bardzo lubię nazwę Copilot. Daje ona do zrozumienia, że to Ty znajdujesz się na miejscu pilota i odpowiadasz za "prowadzenie maszyny". Możesz jednak przekazać drugiemu pilotowi łatwe lub nudne zadania i w każdej chwili przejąć kontrolę, gdy zajdzie taka potrzeba.

GitHub Copilot jest bezpłatny dla studentów, nauczycieli i opiekunów niektórych projektów otwartoźródłowych. Dla pozostałych użytkowników dostępny jest bezpłatny okres próbny trwający 30 dni, po którym usługa kosztuje 10 dolarów miesięcznie lub 100 dolarów rocznie dla osób prywatnych. Po założeniu konta można zapisać się na listę oczekujących, aby uzyskać bardziej zaawansowane, eksperymentalne funkcje GitHub Copilot X.

Dobrze jest sprawdzić, które funkcje Copilota są dostępne w wybranym edytorze kodu (https://github.com/features/copilot). Jak można się domyślać, wszystko szybko się zmienia i wiele z tego, co napiszę w książce dzisiaj, będzie przestarzałe w momencie jej czytania.

Uwaga

Firma JetBrains ma podobną usługę, AI Assistant, o której możesz poczytać pod adresem https://blog.jetbrains.com/idea/2023/06/ai-assistant-in-jetbrains-ides/.

Co możemy zatem dzisiaj zrobić z pomocą Copilota?

Wyobraź sobie, że właśnie dodajesz nowy plik klasy o nazwie Product.cs. Klikasz wewnątrz klasy Product, naciskasz klawisz Enter, aby wstawić pusty wiersz, a następnie zatrzymujesz się na chwilę, zastanawiając się nad tym, co musisz wpisać... i wtedy GitHub Copilot generuje przykładowy kod, wyświetlając go w szarym kolorze (rysunek 1.22).

Rysunek 1.22. GitHub Copilot sugeruje, jak zdefiniować klasę Product

W tym momencie możesz przejrzeć kod i jeśli jest bliski temu, czego potrzebujesz, po prostu naciśnij klawisz Tab, aby wstawić go w całości, albo klawisze Alt+. (kropka), aby przełączać się między kolejnymi sugestiami.

Czasami proponowany kod jest zbyt odległy od tego, czego potrzebujemy. Wtedy lepiej będzie całkowicie zignorować podane sugestie i napisać kod samodzielnie. Zazwyczaj jest tam jednak coś użytecznego albo chociaż coś, co przypomni o składni, której należy użyć. A czasami wygląda to jak czary, bo dostajesz dziesiątki wierszy dokładnie takiego kodu, jakiego potrzebujesz.

Microsoft zasila swoje narzędzia sztucznej inteligencji kodem z publicznych repozytoriów GitHuba, czyli również wszystkimi repozytoriami, które stworzyłem od 2016 r. dla wszystkich wydań tej książki. Oznacza to, że może sugerować uzupełnienia kodu dla czytelników tej książki, które zaskakująco dokładnie odwzorowują jej zawartość, na przykład wykorzystując często pojawiające się w moim kodzie odwołania do kultury popularnej. To tak, jakbym ja, Mark J. Price, był "duchem w maszynie", który przygotowuje dla Ciebie kod.

Łatwo sobie wyobrazić zmodyfikowanego ChatGPT, który przyswoił całą oficjalną dokumentację Microsoft .NET, każdy publiczny artykuł blogowy napisany o .NET, a może nawet setki książek o .NET. Można wtedy prowadzić z nim rozmowy, próbując znaleźć błąd lub wymyślić inny sposób rozwiązania problemu programistycznego.

Uwaga

Aby korzystać z usługi GitHub Copilot, możesz się zarejestrować pod adresem https://github.com/github-copilot/signup/.

Wyłączanie narzędzi, gdy zaczynają przeszkadzać

Wszystkie te narzędzia są bardzo przydatne, ale zdarza im się przeszkadzać nam w pracy (szczególnie gdy się czegoś uczymy), ponieważ czasami wykonują dla nas jakieś zadanie, nie informując nas o tym. Jeżeli pewnych rzeczy nie wykonamy samodzielnie choć kilka razy, to nigdy się ich nie nauczymy.

Aby skonfigurować usługę IntelliSense w Visual Studio 2022, wykonaj poniższe czynności:

Wybierz z menu pozycję Narzędzia/Opcje. W oknie dialogowym Opcje z listy po lewej stronie wybierz pozycję Edytor tekstu/C#/IntelliSense. Kliknij przycisk ze znakiem zapytania w górnej części okna, aby przejrzeć dokumentację tych opcji.

Aby skonfigurować usługę GitHub Copilot X w Visual Studio 2022, wykonaj poniższe czynności:

Wybierz z menu pozycję Narzędzia/Opcje. W oknie dialogowym Opcje z listy po lewej stronie wybierz pozycję GitHub/Copilot. Opcji Enable Globally nadaj wartość true lub false i kliknij przycisk OK.

Aby skonfigurować usługę GitHub Copilot X w Visual Studio Code, wykonaj poniższe czynności:

Na pasku statusu, po jego prawej stronie, na lewo od ikony powiadomień, kliknij ikonę GitHub Copilot. W oknie dialogowym kliknij pozycję Wyłącz globalnie. Aby ponownie włączyć usługę Copilot, kliknij jeszcze raz ikonę na pasku statusu i w oknie dialogowym kliknij pozycję Włącz globalnie.

Uwaga

Informacje na temat sposobu pracy z JetBrains Rider IntelliSense znajdziesz pod adresem https://www.jetbrains.com/help/rider/Auto-Completing_Code.html.

Praktyka i ćwiczenia

Sprawdź swoją wiedzę i wiadomości, odpowiadając na kilka prostych pytań. Zyskaj trochę doświadczenia w zakresie tematów omawianych w tym rozdziale.

Ćwiczenie 1.1 - sprawdź swoją wiedzę

Spróbuj odpowiedzieć na poniższe pytania. Pamiętaj, że choć większość odpowiedzi można znaleźć w treści tego rozdziału, to jednak w niektórych przypadkach konieczne będzie poszukanie informacji w sieci albo napisanie kawałka kodu.

Czy Visual Studio 2022 jest lepsze od Visual Studio Code? Czy .NET 5 i nowsze są lepsze od .NET Framework? Czym jest .NET Standard i dlaczego nadal jest to tak ważne? Dlaczego programista może używać różnych języków (np. C# i F#) podczas pisania aplikacji działających w .NET? Czym jest program najwyższego poziomu i jak można w nim skorzystać z argumentów wiersza poleceń? Jak się nazywa metoda startowa w aplikacjach konsoli środowiska .NET i jak należy ją jawnie deklarować, jeżeli nie korzystamy z funkcji programu najwyższego poziomu? W jakiej przestrzeni nazw jest zdefiniowana klasa Program, jeżeli korzystamy z funkcji programu najwyższego poziomu? Gdzie należy szukać pomocy na temat wybranego słowa kluczowego języka C#? Gdzie należy szukać rozwiązań typowych programistycznych problemów? Co należy zrobić po tym, gdy narzędzie AI przygotuje dla Ciebie jakiś kod?

Uwaga

Odpowiedzi na wszystkie te pytania są dostępne w dodatku A.

Ćwiczenie 1.2 - ćwicz C# gdzie się da

Do ćwiczenia języka C# nie potrzebujesz Visual Studio 2022, Visual Studio for Mac ani Visual Studio Code. Wystarczy, że odwiedzisz jedną z poniższych stron:

Visual Studio Code for Web: https://vscode.dev/, SharpLab: https://sharplab.io/, C# Online Compiler | .NET Fiddle: https://dotnetfiddle.net/, W3Schools C# Online Compiler: https://www.w3schools.com/cs/cs_compiler.php.

Ćwiczenie 1.3 - dalsza lektura

Tematy do tej książki bardzo starannie dobrałem i starałem się uzyskać między nimi równowagę. Pozostałe przygotowane przeze mnie treści można znaleźć w repozytorium GitHuba utworzonym na potrzeby tej książki.

W niniejszej książce prezentuję najbardziej podstawowe informacje na temat języka C# i środowiska .NET, które są potrzebne wszystkim programistom. Zamiast większych przykładów lepiej było jednak podać linki do dokumentacji firmy Microsoft albo do wybranych artykułów publikowanych przez niezależnych autorów w sieci.

Skorzystaj z linków udostępnionych na poniższej stronie, aby dowiedzieć się więcej na tematy poruszane w tym rozdziale:

https://github.com/markjprice/cs12dotnet8/blob/main/book-links.md#chapter-1---hello-c-welcome-net

Ćwiczenie 1.4 - używanie notatników Polyglot

W poniższym artykule znajdziesz opis sposobów wykorzystania notatników Polyglot z interaktywnym .NET:

https://github.com/markjprice/cs12dotnet8/blob/main/docs/ch01-polyglot-notebooks.md

Ćwiczenie 1.5 - motywy kolorystyczne w nowoczesnym .NET

Firma Microsoft przygotowała w technologii Blazor stronę WWW, która prezentuje najważniejsze motywy kolorystyczne nowoczesnego .NET: https://themes.net/.

Ćwiczenie 1.6 - darmowa nauka C# i certyfikacja

Przez wiele lat firma Microsoft oferowała egzamin dla C# 5 o nazwie 70-483: Programowanie przy użyciu języka C#. Uczyłem setki programistów umiejętności potrzebnych do uzyskania kwalifikacji i zdania tego egzaminu. Niestety został on wycofany kilka lat temu.

W sierpniu 2023 r. Microsoft ogłosił nową podstawową certyfikację dla języka C# wraz z bezpłatnym 35-godzinnym kursem online. Więcej informacji na temat kwalifikacji do certyfikacji można znaleźć pod tym adresem:

https://www.freecodecamp.org/learn/foundational-c-sharp-with-microsoft

Ćwiczenie 1.7 - wersje alfa platformy .NET

Istnieje możliwość pobrania nadchodzących wersji platformy .NET, w tym wersji alfa (choć lepiej będzie tego jednak nie robić). Są one dostępne pod adresem https://github.com/dotnet/installer#table.

W sierpniu 2023 r. można było pobrać pakiet alfa .NET SDK 9, w którym znajdowała się wersja Release Candidate .NET 8 runtime. Mimo że ta wersja została pobrana przez zaledwie kilka osób, przeglądarka Edge wyświetlała ostrzeżenie widoczne na rysunku 1.23.

Rysunek 1.23. Strona pobierania wersji alfa platformy .NET

Wskazówka

Ostrzeżenie! Wersje alfa są przeznaczone wyłącznie do wewnętrznego użytku dla pracowników Microsoftu. Wersje beta (oficjalne wersje zapoznawcze) przeznaczone są do użytku zewnętrznego, co jest ogłaszane w artykułach na blogu Microsoftu. Nie pobierałbym wersji alfa .NET 9 do grudnia 2023 r., kiedy to mogą się w niej pojawić nowe względem .NET 8 funkcje. Natomiast od lutego 2024 r., kiedy to dostępne będą oficjalne wersje zapoznawcze .NET 9, polecam korzystanie właśnie z nich.

Więcej informacji związanych z tą książką na temat .NET 9 i .NET 10 znajdziesz pod adresem https://github.com/markjprice/cs12dotnet8/blob/main/docs/dotnet9.md.

Podsumowanie

W tym rozdziale wyjaśniłem następujące zagadnienia:

Jak przygotować środowisko programistyczne. W artykule dostępnym w repozytorium GitHuba wyjaśniłe, jakie są podobieństwa i różnice między platformami .NET, .NET Core, .NET Framework, Xamarin i .NET Standard. Jak za pomocą Visual Studio Code i .NET SDK oraz z Visual Studio 2022 przygotować proste aplikacje konsoli umieszczone w rozwiązaniu lub w obszarze roboczym. Jak pobrać przykładowe kody dla tej książki z repozytorium GitHub. Jak znaleźć pomoc. Można to zrobić tradycyjnie, za pomocą opcji dopisywanych w wierszu poleceń lub przeglądania dokumentacji i artykułów. Można też użyć nowoczesnych rozwiązań, rozmawiając na temat programowania ze sztuczną inteligencją albo wykorzystując ją do zrealizowania "podstawowych prac" w tworzeniu kodu.

W następnym rozdziale nauczysz się mówić w języku C#.