Microsoft Visual C# 2022 Krok po kroku - John Sharp

Kup ebooka

149.00 zł
126.65 zł (126,65 zł najniższa cena z 30 dni)

-
Proszę czekać

John Sharp

Microsoft Visual C# 2022Krok po kroku

Przekład: Natalia Chounlamany, Janusz Machowski, Krzysztof Szkudlarek,Marek Włodarz

APN Promise, Warszawa 2022

Microsoft Visual C# 2022 Krok po kroku

Authorized Polish translation of the English language edition entitled: Microsoft Visual C# Step by Step, 10th Edition, ISBN 978-0-13-761983-2, by John Sharp, published by Pearson Education, Inc. with the authorization of Microsoft Corporation

Copyright ? 2022 by Agylia Group Ltd.

All rights reserved. No part of this book may be reproduced or transmitted in any form or by any means, electronic or mechanical, including photocopying, recording or by any information storage retrieval system, without permission from Pearson Education, Inc.

Polish language edition published by APN PROMISE SA Copyright ? 2022

Autoryzowany przekład z wydania w języku angielskim, zatytułowanego: Microsoft Visual C# Step by Step, 10th Edition, ISBN 978-0-13-761983-2, by John Sharp, opublikowanego przez Pearson Education, Inc. z autoryzacją Microsoft Corporation.

APN PROMISE SA, ul. Domaniewska 44a,02-672 Warszawa,tel. +48 22 35 51 600, fax +48 22 35 51 699,e-mail: wydawnictwo@promise.pl

Książka ta przedstawia poglądy i opinie autorów. Przykłady firm, produktów, osób i wydarzeń opisane w niniejszej książce są fikcyjne i nie odnoszą się do żadnych konkretnych firm, produktów, osób i wydarzeń, chyba że zostanie jednoznacznie stwierdzone, że jest inaczej. Ewentualne podobieństwo do jakiejkolwiek rzeczywistej firmy, organizacji, produktu, nazwy domeny, adresu poczty elektronicznej, logo, osoby, miejsca lub zdarzenia jest przypadkowe i niezamierzone.

Nazwa Microsoft oraz znaki towarowe wymienione na stronie https://www.microsoft.com/en-us/legal/intellectualproperty/trademarks są zastrzeżonymi znakami towarowymi grupy Microsoft. Wszystkie inne znaki towarowe są własnością ich odnośnych właścicieli.

APN PROMISE SA dołożyła wszelkich starań, aby zapewnić najwyższą jakość tej publikacji. Jednakże nikomu nie udziela się rękojmi ani gwarancji. APN PROMISE SA nie jest w żadnym wypadku odpowiedzialna za jakiekolwiek szkody będące następstwem korzystania z informacji zawartych w niniejszej publikacji, nawet jeśli APN PROMISE została powiadomiona o możliwości wystąpienia szkód.

ISBN: 978-83-7541-462-2 (druk), 978-83-7541-463-9 (ebook)

Przekład: Natalia Chounlamany, Janusz Machowski, Krzysztof Szkudlarek, Marek Włodarz

Redakcja: Marek Włodarz

Korekta: Ewa SwędrowskaSkład i łamanie: MAWart Marek Włodarz

Spis treści

Spis treści

Podziękowania

O autorze

Wstęp

Część i

Wprowadzenie do języka Visual C# i Microsoft Visual Studio 2022

Rozdział 1

Wprowadzenie do języka C#

Pisanie pierwszego programu w języku C#

Zaczynamy programować w środowisku Visual Studio 2022

Pisanie pierwszego programu przy użyciu Visual Studio 2022

Przestrzenie nazw

Przestrzenie nazw i asemblacje

Komentowanie kodu

Tworzenie aplikacji graficznej

Analiza aplikacji Universal Windows Platform

Dodawanie kodu do aplikacji graficznej

Podsumowanie

Krótki przegląd rozdziału 1

Rozdział 2

Zmienne, operatory i wyrażenia

Instrukcje

Identyfikatory

Identyfikowanie słów kluczowych

Zmienne

Nazywanie zmiennych

Deklarowanie zmiennych

Specyfikowanie wartości numerycznych

Podstawowe typy danych

Zmienne lokalne bez przypisanej wartości

Wyświetlanie wartości podstawowych typów danych

Posługiwanie się operatorami arytmetycznymi

Operatory i typy danych

Poznajemy operatory arytmetyczne

Kontrolowanie pierwszeństwa

Stosowanie zasad łączności przy wyznaczaniu wartości wyrażeń

Zasady łączności a operator przypisania

Inkrementacja i dekrementacja wartości zmiennych

Formy przyrostkowe i przedrostkowe

Deklarowanie zmiennych lokalnych o niejawnie określonym typie danych

Podsumowanie

Krótki przegląd rozdziału 2

Rozdział 3

Tworzenie metod i stosowanie zakresów zmiennych

Tworzenie metod

Deklarowanie metody

Zwracanie danych przez metodę

Stosowanie metod wcielających wyrażenie

Wywoływanie metod

Składnia wywołania metody

Zwracanie wielu wartości z metody

Stosowanie zakresu

Definiowanie zakresu lokalnego

Definiowanie zakresu klasy

Przeciążanie metod

Tworzenie metod

Używanie debugera Visual Studio do krokowego wykonywania metod

Refaktoryzowanie kodu

Zagnieżdżanie metod

Stosowanie parametrów opcjonalnych i nazwanych argumentów

Definiowanie parametrów opcjonalnych

Przekazywanie nazwanych argumentów

Rozwiązywanie niejednoznaczności związanych z parametrami opcjonalnymi i argumentami nazwanymi

Podsumowanie

Krótki przegląd rozdziału 3

Rozdział 4

Instrukcje wyboru

Deklarowanie zmiennych logicznych

Stosowanie operatorów logicznych

Operatory równościowe oraz operatory relacji

Warunkowe operatory logiczne

Skracanie działania

Podsumowanie informacji o pierwszeństwie oraz łączności operatorów

Dopasowywanie wzorców

Podejmowanie decyzji przy użyciu instrukcji if

Składnia instrukcji if

Grupowanie instrukcji w bloki

Kaskadowe łączenie instrukcji if

Stosowanie instrukcji switch

Składnia instrukcji switch

Reguły stosowania instrukcji switch

Używanie wyrażeń switch z dopasowywaniem wzorców

Podsumowanie

Krótki przegląd rozdziału 4

Rozdział 5

Złożone instrukcje przypisania oraz instrukcje iteracji

Złożone operatory przypisania

Instrukcja while

Instrukcja for

Instrukcja do

Podsumowanie

Krótki przegląd rozdziału 5

Rozdział 6

Obsługa błędów i wyjątków

Próbowanie kodu i przechwytywanie wyjątków

Nieobsłużone wyjątki

Stosowanie kilku bloków obsługi

Przechwytywanie wielu wyjątków

Filtrowanie wyjątków

Propagowanie wyjątków

Wykonywanie operacji arytmetycznych z kontrolą lub bez kontroli przepełnienia

Pisanie instrukcji z kontrolą przepełniania

Pisanie wyrażeń z kontrolą przepełniania

Zgłaszanie wyjątków

Używanie wyrażeń throw

Stosowanie bloku finally

Podsumowanie

Krótki przegląd rozdziału 6

Część Ii

Model obiektowy języka C#

Rozdział 7

Tworzenie i zarządzanie klasami oraz obiektami

Istota klasyfikacji

Cele hermetyzacji

Definiowanie i używanie klas

Kontrolowanie dostępności

Konstruktory

Przeciążanie konstruktorów

Dekonstrukcja obiektu

Metody i dane statyczne

Tworzenie pól współdzielonych

Tworzenie pól statycznych przy użyciu słowa kluczowego const

Klasy statyczne

Statyczne instrukcje using

Klasy anonimowe

Podsumowanie

Krótki przegląd rozdziału 7

Rozdział 8

Wartości i referencje

Kopiowanie klas oraz zmiennych typu wartościowego

Wartości null oraz typy danych dopuszczające stosowanie wartości null

Operatory warunkowe wartości null

Nullowalne typy danych

Właściwości typów nullowalnych

Używanie parametrów typu ref i out

Tworzenie parametrów typu ref

Tworzenie parametrów typu out

Organizacja pamięci komputera

Korzystanie ze stosu i ze sterty

Klasa System.Object

Opakowywanie typów danych

Rozpakowywanie typów danych

Bezpieczne rzutowanie danych

Operator is

Operator as

Ponowne odwiedziny instrukcji switch

Podsumowanie

Krótki przegląd rozdziału 8

Rozdział 9

Tworzenie typów wartościowych przy użyciu wyliczeń oraz struktur

Wyliczeniowe typy danych

Deklarowanie wyliczeniowego typu danych

Stosowanie wyliczeniowych typów danych

Wybór wartości literałów wyliczeniowych

Wybór typu danych używanego do wewnętrznego reprezentowania wartości wyliczeniowych

Struktury

Deklarowanie struktury

Różnice pomiędzy strukturami i klasami

Deklarowanie zmiennych strukturalnych

Inicjowanie struktur

Kopiowanie zmiennych strukturalnych

Podsumowanie

Krótki przegląd rozdziału 9

Rozdział 10

Tablice

Deklarowanie i tworzenie tablicy

Tworzenie instancji tablicy

Wypełnianie tablic danymi i ich używanie

Tworzenie tablic o niejawnie określonym typie elementów

Uzyskiwanie dostępu do elementów tablicy

Uzyskiwanie dostępu do serii elementów tablicy

Wykonywanie iteracji poprzez elementy tablicy

Przekazywanie tablic jako parametrów i zwracanie ich jako wartości metod

Kopiowanie tablic

Tablice wielowymiarowe

Tworzenie tablic nieregularnych

Dostęp do tablic zawierających typy wartościowe

Podsumowanie

Krótki przegląd rozdziału 10

Rozdział 11

Tablice parametrów

Przeciążanie: krótkie przypomnienie faktów

Używanie argumentów tablicowych

Deklarowanie tablicy params

Używanie parametru typu params object[ ]

Stosowanie tablicy parametrów typu params

Porównanie tablic parametrów z parametrami opcjonalnymi

Podsumowanie

Krótki przegląd rozdziału 11

Rozdział 12

Dziedziczenie

Czym jest dziedziczenie?

Używanie dziedziczenia

Powtórka informacji na temat klasy System.Object

Wywoływanie konstruktora klasy bazowej

Przypisywanie klas

Deklarowanie nowych metod

Deklarowanie metod wirtualnych

Deklarowanie metod przesłaniających

Dostęp chroniony

Tworzenie metod rozszerzających

Podsumowanie

Krótki przegląd rozdziału 12

Rozdział 13

Tworzenie interfejsów oraz definiowanie klas abstrakcyjnych

Interfejsy

Definiowanie interfejsu

Implementowanie interfejsu

Odwoływanie się do klasy za pomocą jej interfejsu

Praca z wieloma interfejsami

Jawne implementowanie interfejsu

Obsługa wersjonowania a interfejsy

Ograniczenia interfejsów

Definiowanie i używanie interfejsów

Klasy abstrakcyjne

Metody abstrakcyjne

Klasy zamknięte

Metody zamknięte

Implementowanie i używanie klas abstrakcyjnych

Podsumowanie

Krótki przegląd rozdziału 13

Rozdział 14

Oczyszczanie pamięci i zarządzanie zasobami

Żywot obiektów

Tworzenie finalizatorów

Dlaczego trzeba używać kolektorów śmieci?

Działanie procesu oczyszczania pamięci

Zalecenia

Zarządzanie zasobami

Metody sprzątające

Sprzątanie w sposób odporny na występowanie wyjątków

Instrukcja using oraz interfejs IDisposable

Wywoływanie metody Dispose z poziomu finalizatora

Implementacja metody sprzątającej odpornej na występowanie wyjątków

Obsługiwanie zwalniania asynchronicznego

Podsumowanie

Krótki przegląd rozdziału 14

Część IiI

Rozszerzalne typy danych w języku C#

Rozdział 15

Implementacja właściwości zapewniających dostęp do pól

Implementacja hermetyzacji przy użyciu metod

Czym są właściwości?

Używanie właściwości

Właściwości tylko do odczytu

Właściwości tylko do zapisu

Dostępność właściwości

Ograniczenia właściwości

Deklarowanie właściwości interfejsu

Zastępowanie metod właściwościami

Dopasowywanie wzorców we właściwościach

Generowanie automatycznych właściwości

Inicjowanie obiektów przy użyciu właściwości

Automatyczne właściwości i niezmienność

Używanie rekordów z właściwościami do implementowania lekkich struktur

Podsumowanie

Krótki przegląd rozdziału 15

Rozdział 16

Indeksatory i obsługa danych binarnych

Czym jest indeksator?

Przechowywanie danych binarnych

Wyświetlanie wartości dwójkowych

Manipulowanie wartościami dwójkowymi

Ten sam przykład z wykorzystaniem indeksatorów

Akcesory indeksatora

Porównanie indeksatorów i tablic

Indeksatory w interfejsach

Stosowanie indeksatorów w aplikacjach Windows

Podsumowanie

Krótki przegląd rozdziału 16

Rozdział 17

Typy generyczne

Problem niewłaściwego użycia typu object

Rozwiązanie z użyciem typów generycznych

Typy generyczne a klasy uogólnione

Typy generyczne i nakładanie ograniczeń

Tworzenie klasy generycznej

Teoria drzew binarnych

Budowanie klasy drzewa binarnego przy użyciu typu generycznego

Tworzenie metody generycznej

Definiowanie metody generycznej do budowy drzewa binarnego

Wariancja i interfejsy generyczne

Interfejsy kowariantne

Interfejsy kontrawariantne

Podsumowanie

Krótki przegląd rozdziału 17

Rozdział 18

Kolekcje

Czym są klasy kolekcji?

Klasa kolekcji List<T>

Klasa kolekcji LinkedList<T>

Klasa kolekcji Queue<T>

Klasa kolekcji PriorityQueue<TElement, TPriority>

Klasa kolekcji Stack<T>

Klasa kolekcji Dictionary<TKey, TValue>

Klasa kolekcji SortedList<TKey, TValue>

Klasa kolekcji HashSet<T>

Używanie inicjalizatorów kolekcji

Metody Find, predykaty i wyrażenia lambda

Różne formy wyrażeń lambda

Wyrażenia lambda i metody anonimowe

Porównanie tablic i kolekcji

Podsumowanie

Krótki przegląd rozdziału 18

Rozdział 19

Wyliczanie kolekcji

Wyliczanie elementów kolekcji

Ręczna implementacja modułu wyliczającego

Implementowanie interfejsu IEnumerable

Implementowanie modułu wyliczającego przy użyciu iteratora

Prosty iterator

Definiowanie modułu wyliczającego dla klasy Tree<TItem> przy użyciu iteratora

Podsumowanie

Krótki przegląd rozdziału 19

Rozdział 20

Wydzielanie logiki aplikacji i obsługa zdarzeń

Czym są delegaty

Przykłady delegatów w bibliotece klas .NET

Scenariusz zautomatyzowanej fabryki

Deklarowanie i używanie delegatów

Delegaty i wyrażenia lambda

Włączanie powiadomień za pomocą zdarzeń

Deklarowanie zdarzenia

Subskrypcja zdarzenia

Anulowanie subskrypcji zdarzenia

Zgłaszanie zdarzenia

Zdarzenia interfejsu użytkownika

Używanie zdarzeń

Podsumowanie

Krótki przegląd rozdziału 20

Rozdział 21

Odpytywanie danych w pamięci przy użyciu wyrażeń w języku zapytań

Czym jest LINQ?

Używanie LINQ w aplikacjach C#

Wybieranie danych

Filtrowanie danych

Porządkowanie, grupowanie i agregowanie danych

Złączanie danych

Operatory zapytań

Odpytywanie danych w obiektach Tree<TItem>

LINQ i opóźnione przetwarzanie

Podsumowanie

Krótki przegląd rozdziału 21

Rozdział 22

Przeciążanie operatorów

Czym są operatory

Ograniczenia operatorów

Operatory przeciążone

Tworzenie operatorów symetrycznych

Przetwarzanie złożonych instrukcji przypisania

Deklarowanie operatorów inkrementujących i dekrementujących

Operatory porównań w strukturach i klasach

Definiowanie par operatorów

Implementowanie operatorów

Przesłanianie operatorów równościowych

Operatory konwersji

Wbudowane metody konwersji

Implementowanie własnych operatorów konwersji

Tworzenie operatorów symetrycznych - uzupełnienie

Tworzenie operatorów konwersji

Podsumowanie

Krótki przegląd rozdziału 22

Część IV

Tworzenie aplikacji Universal Windows Platform w języku C#

Rozdział 23

Przyśpieszanie działania za pomocą zadań

Dlaczego realizować wielozadaniowość przy użyciu przetwarzania równoległego?

Narodziny procesora wielordzeniowego

Implementowanie wielozadaniowości w .NET

Zadania, wątki i pula wątków

Tworzenie, uruchamianie i kontrolowanie zadań

Używanie klasy Task do implementacji równoległości

Tworzenie abstrakcji zadań za pomocą klasy Parallel

Kiedy nie używać klasy Parallel

Anulowanie zadań i obsługa wyjątków

Mechanizm anulowania kooperatywnego

Obsługiwanie wyjątków zadań za pomocą klasy AggregateException

Kontynuowanie w przypadku zadań anulowanych lub przerwanych z powodu wyjątku

Podsumowanie

Krótki przegląd rozdziału 23

Rozdział 24

Skracanie czasu reakcji za pomocą działań asynchronicznych

Implementowanie metod asynchronicznych

Definiowanie metod asynchronicznych: problem

Definiowanie metod asynchronicznych: rozwiązanie

Definiowanie metod asynchronicznych zwracających wartości

Pułapki metod asynchronicznych

Metody asynchroniczne i interfejsy API środowiska Windows Runtime

Zadania, alokacje pamięci i wydajność

Używanie PLINQ do zrównoleglania deklaratywnego dostępu do danych

Wykorzystanie PLINQ do poprawy wydajności przy wykonywaniu iteracji po elementach kolekcji

Anulowanie zapytania PLINQ

Synchronizowanie współbieżnych operacji dostępu do danych

Blokowanie danych

Elementarne narzędzia synchronizacji umożliwiające koordynowanie zadań

Anulowanie synchronizacji

Współbieżne klasy kolekcji

Wykorzystanie kolekcji współbieżnej i blokady do implementacji dostępu do danych przystosowanego do trybu wielowątkowego

Podsumowanie

Krótki przegląd rozdziału 24

Rozdział 25

Implementowanie interfejsu użytkownika aplikacji Universal Windows Platform

Cechy aplikacji Universal Windows Platform

Budowa aplikacji UWP przy użyciu szablonu Blank App

Implementowanie skalowalnego interfejsu użytkownika

Implementowanie układu tabelarycznego za pomocą kontrolki Grid

Dostosowywanie układu za pomocą menedżera stanów wizualnych

Stosowanie stylów do interfejsu użytkownika

Podsumowanie

Krótki przegląd rozdziału 25

Rozdział 26

Wyświetlanie i wyszukiwanie danych w aplikacjach Universal Windows Platform

Implementowanie wzorca projektowego Model-View-ViewModel

Wyświetlanie danych przy użyciu wiązania

Modyfikowanie danych przy użyciu wiązania danych

Stosowanie wiązania danych do kontrolki ComboBox

Tworzenie składnika ViewModel

Dodawanie poleceń do składnika ViewModel

Podsumowanie

Krótki przegląd rozdziału 26

Rozdział 27

Dostęp do zdalnej bazy danych z poziomu aplikacji Universal Windows Platform

Pobieranie informacji z bazy danych

Tworzenie modelu encji

Tworzenie i korzystanie z usługi web typu REST

Aktualizowanie aplikacji UWP, aby używała usługi web

Wyszukiwanie danych w aplikacji Customers

Wstawianie, aktualizacja i usuwanie danych za pośrednictwem usługi web typu REST

Podsumowanie

Krótki przegląd rozdziału 27

Polecamy także

Podziękowania

Witajcie ponownie! Zapraszam do 10 wydania. W podziękowaniach do poprzednich wydań wspominałem o malowaniu Forth Railway Bridge i o Syzyfie jako nigdy niekończących się zadaniach. Być może w przyszłości ktoś doda do tej legendarnej listy pracę polegającą na aktualizowaniu Microsoft C# Krok po kroku. Co powiedziawszy, pisanie i uaktualnianie książki jest jednak znacznie bardziej satysfakcjonujące, niż oskrobywanie rdzy lub codzienne wtaczanie kamienia na szczyt, a dodatkową zaletą jest to, że pewnego dnia będę mógł po prostu przejść na emeryturę.

Pomimo faktu, że na okładce figuruje moje nazwisko, to stworzenie tego rodzaju książki z pewnością nie jest zadaniem dla jednego człowieka. Chciałbym w tym miejscu podziękować wymienionym poniżej osobom za ich bezgraniczne wsparcie i pomoc w realizacji tego zadania.

Po pierwsze, Loretta Yates z Pearson Education, która przyjęła rolę nadzorcy popychającego mnie do działania, i choć uprzejmie, to bezwzględnie przypominała mi dobrze zdefiniowane terminy realizacji poszczególnych etapów. Bez jej energii i uporu projekt ten nigdy by nie wystartował.

Następnie Rick Kughen, niestrudzony redaktor, który zadbał o to, aby moja pisanina była choć połowicznie zrozumiała, wyszukując brakujące słowa i bezsensowne frazy w tekście.

Dalej wkracza Charvi Arora i jej niestrudzony zespół redakcyjny, a w szczególności Kate Shoup i Dan Foster, którzy zadbali o to, aby moja gramatyka była przynajmniej akceptowalna i wyłapali wszystkie pominięte słowa lub nonsensowne frazy w tekście. Następnie David Fransen, który miał zadanie przejrzenia i przetestowania kodu przykładów i ćwiczeń. Wiem z własnego doświadczenia, że jest to niewdzięczne i frustrujące zadanie, ale poświęcony czas i niezliczone uwagi są jedynym sposobem, aby książka stała się lepsza. Oczywiście dowolne błędy, które pozostały, są wyłącznie moją winą i będę szczęśliwy, gdy czytelnicy powiadomią mnie o tych, które dostrzegą.

Jak zwykle muszę podziękować Dianie, mojej lepszej połowie, która dbała o stałe dostawy gorących napojów (złożonych głównie z kofeiny), gdy zbliżały się końcowe terminy. W czasie lockdownu Covid-19 uznała, że nasz dom nie jest dostatecznie zapełniony, zatem wprowadziła do naszej rodziny dwa raczej szalone kociaki. Psy są teraz w ciągłym strachu, ale mamy w zamian nieskończone godziny zabaw z podnoszeniem i opuszczanie zasłon i graniem w "polowanie na mysz/żabę/pająka" lub cokolwiek innego, co udało im się złapać i przynieść do domu. Nie wiem, jak mogłem do tej pory żyć bez nich.

Wreszcie na koniec muszę wspomnieć o naszych dzieciach, Jamesie i Frankie, którzy oboje już wyfrunęli z rodzinnego gniazda. James spędził ostatnich kilka lat w Manilii, pracując (jak twierdzi) dla rządu brytyjskiego. Sądząc po fotografiach, wygląda to raczej na niekończące się wakacje na plażach południowo-wschodniej Azji. Frankie pozostała bliżej domu, dzięki czemu od czasu do czasu wpada i bierze udział w łapaniu myszy/żab/pająków. Przy okazji uwaga do tych deweloperów, którymi kieruje w swojej pracy - najwyższy czas, abyście zrobili jej filiżankę herbaty!

O autorze

john Sharp jest głównym technologiem w CM Group Ltd. części Civica Group, brytyjskiej firmy programistycznej i konsultingowej. Jest szeroko znanym programistą, konsultantem, projektantem i autorem wielu materiałów szkoleniowych, poradników i książek. Jego przeszło 35-letnie doświadczenie zawodowe obejmuje szeroki zakres różnych technologii, poczynając od programowania w Pascalu dla systemów CP/M i tworzenia aplikacji C/Oracle na różnych wersjach systemów UNIX, aż po projektowanie rozproszonych aplikacji w C# i JavaScript i programowanie dla Windows 11 i Microsoft Azure. Swój czas poświęca również na tworzenie kursów szkoleniowych dla firmy Microsoft, koncentrując się na takich obszarach, jak danetyka z wykorzystaniem języków R i Python, przetwarzanie Big Data przy użyciu Spark i CosmosDB, SQL Server i NoSQL, usługi web, Blazor, a także programowanie międzyplatformowe przy użyciu takich frameworków, jak Xamari i MAUI oraz skalowalne architektury aplikacji oparte na Azure.

Wstęp

Wiele zmieniło się w ciągu ostatnich 20 lat. Czasami dla poprawy nastroju sięgam po swój egzemplarz pierwszego wydania Microsoft C# Krok po kroku, który ukazał się w 2001 roku i wzdycham wyrozumiale nad swoją naiwnością i niewinnością w tamtym czasie. Bez wątpienia C# stanowił w tym czasie szczyt perfekcji wśród języków programowania. C# oraz .NET Framework przebojem zdobyły świat deweloperów i echa tych wydarzeń rozbrzmiewają do tej pory. Jednak nie wygasają z czasem, ale mają coraz większy wpływ na powstawanie oprogramowania. Zamiast podejścia jednoplatformowego, co krytykowali przeciwnicy .NET w roku 2001, C# i .NET stają się stopniowo kompletnym, wieloplatformowym rozwiązaniem, które pozwala budować aplikacje dla Windows, macOS, Linuksa lub Androida. Dodatkowo C# i .NET pokazały już, że są wybierane jako środowisko wykonawcze wielu systemów chmurowych. Czymże Azure byłoby bez nich?

W przeszłości większość powszechnych języków programowania od czasu do czasu przechodziło okazjonalne aktualizacje, często rozciągające się na wiele lat. Dla przykładu, jeśli spojrzymy na Fortran, zauważymy standardy o nazwach Fortran 66, Fortran 77, Fortran 90, Fortran 95, Fortran 2003, Fortran 2008 oraz Fortran 2018. Mamy więc siedem aktualizacji w ciągu 55 lat. Choć taki względnie powolny cykl zmian promuje stabilność, prowadzi również do stagnacji. Problem leży w tym, że natura problemów, z którymi deweloperzy muszą sobie radzić, zmienia się błyskawicznie, zaś narzędzia, na których się opierają, powinny dotrzymywać kroku tym zmianom, aby możliwe było tworzenie efektywnych rozwiązań. Microsoft .NET zapewnia ciągle ewoluujący framework, zaś C# podlega częstym uaktualnienim, aby zapewnić najlepsze wykorzystanie platformy. Tak więc w przeciwieństwie do Fortranu, C# podlegał bardzo szybkiej ewolucji od pierwszego wydania - sześć wersji w ostatnich pięciu latach, przy czym kolejna zmiana jest zaplanowana na rok 2022. Język C# nadal wspiera kod napisany ponad 20 lat temu, ale dzisiejsze dodatki i rozszerzenia języka pozwalają tworzyć rozwiązania używające bardziej eleganckiego kodu i bardziej zwięzłych konstrukcji. Z tych powodów dokonuję okresowych aktualizacji tej książki i tak doszliśmy do bieżącego, dzisiątego wydania!

Poniższa lista przedstawia krótką historę C#:

C# 1.0 miał swój publiczny debiut w roku 2001. C# 2.0 wraz z programem Visual Studio 2005 udostępniał kilka ważnych i nowych funkcji, takich jak ogólne typy wyliczeniowe i metody anonimowe. C# 3.0, która pojawiła się wraz z opublikowaniem programu Visual Studio 2008, dodał obsługę metod rozszerzających, wyrażeń lambda oraz najważniejszej ze wszystkich nowości - obsługi zapytań w języku LINQ (Language Integrated Query). Wprowadzona w roku 2010 wersja C# 4.0 zaoferowała kolejne udoskonalenia w zakresie polepszenia możliwości współdziałania z innymi technologiami i językami programowania. Funkcje te obejmowały obsługę argumentów nazwanych i opcjonalnych, typ dynamic, którego użycie wskazywało, że środowisko uruchomieniowe powinno zastosować dla danego obiektu późne wiązanie (late binding). Bardzo ważną zmianą wprowadzoną do wersji platformy .NET Framework, opublikowanej w tym samym czasie co wersja C# 4.0, były klasy i typy danych składające się na nową bibliotekę równoległego realizowania zadań - TPL (Task Parallel Library). Korzystając z biblioteki TPL można tworzyć wysoko skalowalne aplikacje, które będą w pełni wykorzystywać możliwości wielordzeniowych procesorów. W C# 5.0 dodano natywną obsługę dla przetwarzania zadań w sposób asynchroniczny poprzez użycie modyfikatora metody async oraz operatora await. C# 6.0 była kolejnym ulepszeniem zaprojektowanym z myślą o ułatwianiu życia programistom. Te udoskonalenia to między innymi interpolacja łańcuchów (już nigdy nie będziemy musieli korzystać z String.Format!), ulepszone sposoby implementacji właściwości czy metody wcielające wyrażenia. W C# 7.0 do 7.3 pojawiły się dalsze ulepszenia poprawiające produktywność i usuwające pewne anachronizmy. Na przykład od tych wersji możemy implementować akcesory właściwości jako elementy wcielające wyrażenia, metody mogą zwraca wiele wartości (w formie krotek), uproszczone zostało użycie parametrów out, a instrukcje switch zostały rozszerzone o obsługę dopasowywania wzorców i typów. Te wersje języka zawierały również wiele innych, drobnieszych poprawek, rozwiązujących problemy zgłaszane przez deweloperów, takie jak dopuszczenie asynchroniczności metody Main. C# 8.0, C# 9.0 i C# 10.0 kontynuują te ulepszanie języka w celu poprawy czytelności kodu i zwiększenia produktywności programistów. Niektóre z głównych uzupełnień obejmują rekordy, których możemy używać do budowania niezmiennych typów referencyjnych; rozszerzenia dopasowywania wzorców, pozwalające na używanie tej funkcjonalności w całym języku, a nie jedynie w instrukcjach switch; instrukcje najwyższego poziomu, które pozwalają używać C# jako języka skryptowego (nie musimy już zawsze pisać metody Main); domyślne metody interfejsu; statyczne funkcje lokalne; asynchroniczne typy odrzucalne i wiele innych funkcji omówionych w tej książce.

Nie da się zaprzeczyć, że Microsoft Windows jest ważną platformą dla aplikacji tworzonych w C#, ale teraz możemy uruchamiać kod zaprojektowany w C# również w innych systemach operacyjnych, takich jak Linux, dzięki środowisku .NET Runtime. Otwiera to możliwości tworzenia kodu, który może działać w wielu środowiskach. Dodatkowo Windows wspiera aplikacje o wysokim stopniu interaktywności, które mogą współdzielić pomiędzy sobą dane i współpracować ze sobą nawzajem lub łączyć się z usługami działającymi w chmurze. Kluczowym pojęciem w Windows są aplikacje Universal Windows Platform (UWP) - zaprojektowane tak, aby mogły być uruchamiane na dowolnym urządzeniu Windows 10 lub 11, począwszy od bogato wyposażonego komputera, po laptop, tablet, smartfon, a nawet urządzenia IoT (Internet of Things) z ograniczonymi zasobami. Po opanowaniu podstawowych funkcji języka C#, ważne jest zdobycie umiejętności budowania aplikacji, które mogą być uruchamiane na wszystkich wspomnianych platformach.

Chmura stała się tak ważnym elementem architektury wielu systemów - od wielkoskalowych aplikacji dla przedsiębiorstw, po apki mobilne działające na urządzeniach przenośnych - że zdecydowałem skupić się na tym aspekcie wytwarzania oprogramowania w finalnym rozdziale książki.

Środowisko programowania oferowane przez pakiet Visual Studio sprawia, że korzystanie ze wszystkich tych nowych i potężnych funkcji jest bardzo łatwe, a wiele nowych kreatorów i ulepszeń wprowadzonych do najnowszej wersji Visual Studio pozwala znacząco podnieść produktywność programistów. Mamy nadzieję, że korzystanie z tej książki będzie równie przyjemne, jak jej pisanie!

Dla kogo przeznaczona jest ta książka

Książka ta powstała przy założeniu, że Czytelnik ma już pewne doświadczenie w programowaniu i pragnie poznać podstawy programowania w języku C# przy wykorzystaniu środowiska Visual Studio 2022 oraz platformy .NET Framework w wersji 6 lub późniejszej. Po przeczytaniu tej książki jej Czytelnicy powinni dysponować dobrą znajomością języka C# i powinni umieć używać tego języka do tworzenia szybkich i skalowalnych aplikacji dla systemu operacyjnego Windows.

Dla kogo nie jest przeznaczona ta książka

Niniejsza książka skierowana jest do osób, które dopiero uczą się języka C#, ale nie są nowicjuszami w programowaniu jako takim. Dlatego koncentruje się ona głównie na kwestiach związanych z samym językiem C#. Celem tej książki nie jest dostarczenie wyczerpującego omówienia rozlicznych technologii pozwalających na tworzenie aplikacji przeznaczonych do użytku w dużych przedsiębiorstwach, takich jak ADO.NET, ASP.NET, Azure lub Windows Communication Foundation. Czytelnicy oczekujący większej ilości informacji na temat jednej z tych technologii powinni rozważyć lekturę kilku innych tytułów wydanych przez Microsoft Press.

Określenie najlepszego miejsca, od którego należy rozpocząć lekturę tej książki

Niniejsza książka ma za zadanie ułatwić jej Czytelnikom podniesienie swoich umiejętności w kilku podstawowych obszarach. Z książki tej mogą korzystać zarówno początkujący programiści, jak również programiści mający już pewne doświadczenie w innych językach programowania, takich jak C, C++, Java lub Visual Basic. Zamieszczona dalej tabela powinna ułatwić każdemu określenie najlepszego miejsca, od którego należy rozpocząć lekturę tej książki.

Jeżeli jesteś

Wykonaj następujące kroki

Programistą początkującym w dziedzinie programowania obiektowego

1. Zainstaluj pliki używane w opisywanych w tej książce ćwiczeniach, zgodnie z opisem podanym w dalszej części, zatytułowanej "Przykładowe kody źródłowe".

2. Przeczytaj po kolei wszystkie rozdziały od 1 do 22.

3. Przeczytaj rozdziały 23 do 27 w miarę podnoszenia poziomu doświadczenia oraz potrzeb.

Programistą dobrze obeznanym z proceduralnymi językami programowania, takimi jak np. język C, ale nowicjuszem w C#

1. Zainstaluj pliki używane w opisywanych w tej książce ćwiczeniach, zgodnie z opisem podanym w dalszej części, zatytułowanej "Przykładowe kody źródłowe".

2. Zapoznaj się pobieżnie z treścią pierwszych pięciu rozdziałów, aby uzyskać ogólny obraz języka C# oraz możliwości programu Visual Studio 2022, a następnie skoncentruj się na rozdziałach od 6 do 22.

3. Przeczytaj rozdziały 23 do 27 w miarę podnoszenia poziomu doświadczenia oraz potrzeb.

Programistą mającym już doświadczenie w innych obiektowych językach programowania, takich jak np. C++ lub Java, i pragnącym nauczyć się języka C#

1. Zainstaluj pliki używane w opisywanych w tej książce ćwiczeniach, zgodnie z opisem podanym w dalszej części, zatytułowanej "Przykładowe kody źródłowe".

2. Zapoznaj się pobieżnie z treścią pierwszych siedmiu rozdziałów, aby uzyskać ogólny obraz języka C# oraz możliwości programu Visual Studio 2022, a następnie skoncentruj się na rozdziałach od 7 do 22.

3. Przeczytaj rozdziały 23 do 27 w miarę podnoszenia poziomu doświadczenia oraz potrzeb.

Programistą znającym język Visual Basic, pragnącym nauczyć się języka C#

1. Zainstaluj pliki używane w opisywanych w tej książce ćwiczeniach, zgodnie z opisem podanym w dalszej części, zatytułowanej "Przykładowe kody źródłowe".

2. Przeczytaj po kolei wszystkie rozdziały od 1 do 22.

3. Przeczytaj rozdziały 23 do 27 w miarę podnoszenia poziomu doświadczenia oraz potrzeb.

4. Przeczytaj krótkie powtórzenia, znajdujące się na końcu każdego rozdziału, aby szybko uzyskać potrzebne informacje na temat konkretnych konstrukcji języka C# oraz funkcji programu Visual Studio 2022.

Zainteresowany znalezieniem potrzebnych informacji związanych z prezentowanymi w tej książce ćwiczeniami

1. Skorzystaj z indeksu lub spisu treści, aby znaleźć potrzebne informacje na konkretny temat.

2. Przeczytaj krótkie powtórzenia, znajdujące się na końcu każdego rozdziału, aby szybko zapoznać się z omawianymi w danym rozdziale technikami oraz elementami składni.

Większość rozdziałów tej książki zawiera użyteczne przykłady ułatwiające zrozumienie omawianych koncepcji i pojęć. Każdy Czytelnik, niezależnie od tego, które części tej książki będą dla niego najbardziej interesujące, powinien koniecznie pobrać i zainstalować na swoim komputerze omawiane aplikacje przykładowe.

Konwencje stosowane w tej książce

Zawarte w tej książce informacje są prezentowane przy użyciu konwencji poprawiających czytelność uraz ułatwiających śledzenie toku narracji.

Każde ćwiczenie składa się z szeregu czynności prezentowanych jako seria ponumerowanych kroków (1, 2, itd.), zawierających opis wszystkich działań niezbędnych do ukończenia danego ćwiczenia. Elementy umieszczone w ramkach z ikoną na marginesie i etykietą, taką jak np. "Uwaga", "Wskazówka", zawierają dodatkowe informacje lub opis alternatywnego sposobu wykonania danego kroku. Tekst, który powinien zostać wpisany przez Czytelnika, wyróżniany jest wytłuszczoną czcionką. Znak plus pomiędzy oznaczeniem dwóch klawiszy oznacza, że należy klawisze te nacisnąć jednocześnie, np. Alt+Tab oznacza, że trzeba przytrzymać klawisz Alt w chwili naciśnięcia klawisza Tab.

Wymagania systemowe

Do wykonania prezentowanych w tej książce ćwiczeń potrzebny będzie komputer spełniający następujące wymagania sprzętowe i programowe:

System operacyjny Windows 10 albo Windows 11 (Home, Professional, Education lub Enterprise). Najnowsze wydanie Visual Studio Community 2022, Visual Studio Professional 2022 lub Visual Studio Enterprise 2022*. Jako minimum należy podczas instalacji wybrać następujące środowiska:Projektowanie dla Universal Windows PlatformProjektowanie .NETProjektowanie ASP.NET i WebProjektowanie AzurePrzechowywanie i przetwarzanie danychProjektowanie międzyplatformowe .NET Core

Uwaga Wszystkie ćwiczenia i przykłady kodu z tej książki zostały opracowane i przetestowane przy użyciu Visual Studio Community 2022. Powinny wszystkie działać bez modyfikacji w Visual Studio Professional 2022 oraz Visual Studio Enterprise 2022.

Komputer z 64-bitowym procesorem 1.8 GHz lub szybszym, zalecany procesor czterodzeniowy lub lepszy. Procesory ARM nie są obsługiwane. 4 GB pamięci RAM (zalecane 8 GB lub więcej). Miejsce na dysku twardym: od 850 MB w konfiguracji minimalnej do 210 GB wolnego miejsca, zależnie od zainstalowanych funkcji. Typowa instalacja wymaga od 20 do 50 GB. Karta graficzna obsługująca rozdzielczość minimum 720p (1280 × 720). Visual Studio najlepiej działa w rozdzielczości WXGA (1366x768) lub wyższej. Połączenie z publiczną siecią Internet, wymagane do pobrania oprogramowania lub przykładów dla poszczególnych rozdziałów.

W zależności od konfiguracji używanego systemu Windows, zainstalowanie i skonfigurowanie oprogramowania Visual Studio 2022 może wymagać posiadania uprawnień lokalnego administratora.

Ponadto trzeba włączyć na komputerze tryb dewelopera, aby móc tworzyć i uruchamiać aplikacje UWP. Dodatkowe informacje dotyczące osiągania tego celu znaleźć można w artykule "Enable Your Device for Development" (w jęz. angielskim) pod adresem https://msdn.microsoft.com/library/windows/apps/dn706236.aspx.

Przykłady kodu

Większość rozdziałów tej książki zawiera ćwiczenia pozwalające na interaktywne wypróbowanie nowych umiejętności, nabytych podczas lektury danego rozdziału. Wszystkie te przykładowe projekty można pobrać w wersji wyjściowej (tj. takiej, od której rozpoczyna się dane ćwiczenie) oraz w wersji końcowej (tj. takiej, jaką otrzymalibyśmy po starannym wykonaniu całego ćwiczenia) z następującej strony:

https://MicrosoftPressStore.com/VisualCsharp10e/downloads

Instalowanie przykładowych kodów źródłowych

Aby zainstalować na komputerze przykładowe kody źródłowe, które umożliwią praktyczne wykonywanie opisywanych w tej książce ćwiczeń, należy wykonać następujące kroki.

1. Rozpakuj plik CSharpSBS.zip pobrany z powyższej strony web do swojego katalogu Dokumenty.

2. Zaakceptuj postanowienia licencyjne w wyświetlonym monicie.

Uwaga Jeśli tekst umowy licencyjnej nie zostanie wyświetlony, z treścią tej umowy można zapoznać się na tej samej stronie web, z której pobrany został plik z przykładowymi kodami źródłowymi.

Korzystanie z przykładowych kodów źródłowych

Każdy rozdział tej książki wyjaśnia, kiedy i jak należy korzystać z przykładowych kodów źródłowych dla danego rozdziału. Gdy nadejdzie pora użycia kolejnego przykładu, podane zostaną dokładne instrukcje, jak należy otworzyć odpowiednie pliki.

Ważne Wiele przykładowych projektów jest zależnych od pakietów NuGet, które nie zostały dołączone do przykładów kodu. Te pakiety zostaną automatycznie pobrane w trakcie pierwszej kompilacji projektu. W konsekwencji, jeśli Czytelnik otworzy projekt i zacznie go analizować przed kompilacją, Visual Studio może zgłaszać wiele błędów spowodowanych nierozwiązanymi odwołaniami. Po skompilowaniu projektu problemy powinny zostać rozwiązane i błędy powinny zniknąć.

Dla tych Czytelników, którzy chcieliby poznać więcej szczegółów, poniżej zamieszczona została lista wszystkich przykładowych projektów i rozwiązań programu Visual Studio 2022, pogrupowanych według katalogów, w których się one znajdują. W wielu przypadkach przykładowe projekty dostępne są w wersji z plikami w stanie początkowym, umożliwiającym samodzielne przeprowadzenie danego ćwiczenia zgodnie z podanym opisem oraz w wersji końcowej, której można używać jako punktu odniesienia. Finalne wersje projektów z każdego rozdziału znajdują się w folderach o nazwie uzupełnionej przyrostkiem "- Complete" (Gotowe).

Projekt

Opis

Chapter 1

HelloWorld

Projekt ten pozwala rozpocząć naukę. Prowadzi Czytelnika poprzez tworzenie prostego programu za pomocą edytora tekstu (Notatnika). Program ten wyświetla tekstowe pozdrowienia.

HelloWorld2

Ten projekt demonstruje wykorzystanie interfejsu CLI (Command Level Interface) środowiska .NET do zbudowania i uruchomienia prostej aplikacji C#.

TextHello

Projekt Visual Studio wyświetlający tekst pozdrowienia.

HelloUWP

Ten projekt otwiera okno, które prosi użytkownika o podanie imienia, a następnie wyświetla spersonalizowane powitanie.

Chapter 2

PrimitiveDataTypes

Projekt demonstrujący sposób deklarowania zmiennych każdego z podstawowych typów danych, sposób przypisywania tym zmiennym wartości oraz sposób wyświetlania wartości tych zmiennych w oknie programu.

MathsOperators

Projekt wprowadzający operatory arytmetyczne (+ - * / %).

Chapter 3

Methods

W tym projekcie ponownie przeanalizujemy kod poprzedniego projektu MathsOperators i zbadamy wykorzystanie metod do uporządkowania kodu źródłowego.

DailyRate

Projekt demonstrujący proces pisania własnych metod, ich uruchamiania oraz krokowego śledzenia przy pomocy debugera z programu Visual Studio 2022.

DailyRate Using Optional Parameters

Projekt demonstrujący sposób definiowania metod akceptujących parametry opcjonalne oraz wywoływania tych metod przy użyciu nazwanych argumentów.

Factorial

Projekt ten demonstruje metodę rekurencyjną obliczającą silnię.

Chapter 4

Selection

Projekt demonstrujący kaskadowe użycie instrukcji if do zaimplementowania złożonej logiki, polegającej np. na porównywaniu dwóch dat.

SwitchStatement

Prosty program wykorzystujący instrukcję switch do przekształcania znaków na ich reprezentację w formacie XML.

SwitchStatement using Pattern Matching

Jest to rozszerzona wersja projektu SwitchStatement, która wykorzystuje dopasowywanie wzorców w celu uproszczenia logiki instrukcji switch.

Chapter 5

WhileStatement

Projekt demonstrujący użycie instrukcji while do odczytywania kolejnych linii z pliku źródłowego i wyświetlania każdej z nich w umieszczonym na formularzu, osobnym polu tekstowym.

DoStatement

Projekt wykorzystujący instrukcję do do przekształcenia liczby dziesiętnej na jej reprezentację ósemkową.

Chapter 6

MathsOperators

Projekt pokazujący na przykładzie projektu Maths­Operators z rozdziału 2, jak różne nieobsłużone wyjątki mogą doprowadzić do przer­wania działania programu. Stabilność działania aplikacji zostanie poprawiona poprzez użycie słów kluczowych try i catch.

Chapter 7

Classes

Projekt demonstrujący podstawy definiowania własnych klas, uzupełniania ich o publiczne konstruktory, metody oraz pola prywatne. Projekt ten demonstruje również sposób tworzenia nowych instancji klasy za pomocą słowa kluczowego new oraz sposób definiowania statycznych pól i metod.

Chapter 8

Parameters

Program wyjaśniający różnicę pomiędzy parametrami typu wartościowego a parametrami typu referencyjnego. Program ten demonstruje także użycie słów kluczowych ref i out.

Chapter 9

StructsAndEnums

Projekt definiujący strukturalny typ danych (przy użyciu słowa kluczowego struct), służący do reprezentowania daty kalendarzowej.

Chapter 10

Cards

Projekt demonstrujący zastosowanie tablic do zamodelowania puli kart w grze karcianej.

Chapter 11

ParamsArray

Projekt demonstrujący użycie słowa kluczowego params do tworzenia pojedynczej metody mogącej akceptować dowolną liczbę argumentów typu int.

Chapter 12

Vehicles

Projekt wykorzystujący interfejsy do utworzenia prostej hierarchii klas pojazdów. Projekt ten demonstruje także sposób definiowania metod wirtualnych.

ExtensionMethod

Projekt demonstrujący sposób tworzenia metody rozszerzającej dla typu int, której zadaniem będzie przekształcanie dziesiętnej liczby całkowitej w jej reprezentację w innym systemie liczenia.

Chapter 13

Drawing

Projekt implementujący część pakietu graficznego. Projekt ten wykorzystuje interfejsy do zdefiniowania metod udostępnianych i implementowanych przez różne figury geometryczne.

Chapter 14

GarbageCollectionDemo

Projekt demonstrujący sposób bezpiecznego zwalniania zasobów w środowisku wielowątkowym poprzez odpowiednie używanie wzorca Dispose.

Chapter 15

Drawing Using Properties

Projekt rozszerzający aplikację w projekcie Drawing opracowanym w rozdziale 13 poprzez hermetyzację wybranych danych wewnątrz klasy przy użyciu właściwości.

AutomaticProperties

Projekt demonstrujący sposób tworzenia automatycznych właściwości klas oraz wykorzystywania ich do inicjalizowania nowych instancji klasy.

Student enrollment

Projekt demonstrujący użycie rekordów do modelowania strukturalnych typów niezmiennych.

Chapter 16

Indexers

Projekt demonstrujący zastosowanie dwóch obiektów indeksujących (indeksatorów): jednego służącego do wyszukiwania numeru telefonu osoby o podanym nazwisku i drugiego służącego do wyszukiwania nazwiska osoby o podanym numerze telefonu.

Chapter 17

BinaryTree

Rozwiązanie demonstrujące sposób używania ogólnych typów danych do utworzenia struktury bezpiecznej pod względem typu, mogącej zawierać elementy dowolnego typu.

BuildTree

Projekt demonstrujący sposób użycia ogólnych typów danych do zaimplementowania metody bezpiecznej pod względem typu, mogącej akceptować parametry dowolnego typu.

Chapter 18

Cards

Projekt zawierający zmodyfikowaną wersję kodu z rozdziału 10, demonstrujący sposób użycia kolekcji do modelowania puli kart rozdanych pomiędzy graczy w grze karcianej.

Chapter 19

BinaryTree

Projekt demonstrujący sposób zaimplementowania ogólnego interfejsu typu IEnumerator<T>, który umożliwia utworzenie obiektu wyliczeniowego dla ogólnej klasy Tree.

IteratorBinaryTree

Rozwiązanie wykorzystujące iterator do wygenerowania typu wyliczeniowego dla ogólnej klasy Tree.

Chapter 20

Delegates

Projekt demonstrujący sposób wykorzystania delegacji do oddzielenia metody od logiki korzystającej z tej metody aplikacji. Następnie projekt zostaje rozszerzony, aby zademonstrować sposób wykorzystania zdarzeń do powiadamiania obiektów o ważnych wydarzeniach oraz sposób przechwytywania tego typu zdarzeń i wykonywania związanych z nimi akcji.

Chapter 21

QueryBinaryTree

Projekt demonstrujący sposób pobierania danych z obiektu typu drzewo binarne, przy użyciu zapytań w języku LINQ.

Chapter 22

ComplexNumbers

Projekt definiujący nowy typ danych, modelujący liczby zespolone i implementujący klika typowych operatorów dla tego typu.

Chapter 23

GraphDemo

Projekt generujący skomplikowany wykres i wyświetlający go na formularzu UWP. W tym projekcie niezbędne obliczenia wykonywane są przez jeden wątek.

Parallel GraphDemo

Jest to wersja projektu GraphDemo, w którym do wyodrębnienia procesu tworzenia i zarządzania zadaniami użyta została klasa Parallel.

GraphDemo With Cancellation

Projekt pokazujący, jak zaimplementować możliwość zatrzymywania zadań w kontrolowany sposób, zanim same zakończą swoje działanie.

ParallelLoop

Przykładowa aplikacja pokazująca, kiedy nie należy używać klasy Parallel do tworzenia i uruchamiania kilku zadań równocześnie.

Chapter 24

GraphDemo

Jest to wersja projektu GraphDemo z rozdziału 23, w której w celu asynchronicznego wykonania obliczeń potrzebnych do wygenerowania wykresu zastosowano słowo kluczowe async oraz operator await.

PLINQ

Projekt demonstrujący kilka przykładów wykorzystywania technologii PLINQ do pobierania danych, przy użyciu zadań równoległych.

CalculatePI

Projekt wykorzystujący algorytm próbkowania statystycznego do obliczenia przybliżonej wartości liczby pi. Projekt ten wykorzystuje zadania równoległe.

ParallelTest

Program ilustrujące zagrożenia wynikające z pozwalania na niekontrolowany dostęp do współdzielonych danych przez równoległe wątki.

Chapter 25

Customers

Ten projekt implementuje skalowalny interfejs użytkownika, który poddaje się skalowaniu dla różnych rozdzielczości ekranu i różnych kształtów formularza. Interfejs użytkownika wykorzystuje style XAML do zmiany czcionki oraz wyświetlanego przez aplikację obrazu tła.

Chapter 26

DataBinding

Ta wersja projektu Customers wyświetla informacje o klientach, pobierając je ze źródła danych przy użyciu mechanizmu wiązania danych. Projekt ten demonstruje również sposób implementacji interfejsu INotifyPropertyChanged, pozwalającego na aktualizowanie informacji o kliencie z poziomu interfejsu użytkownika i odsyłanie wykonanych zmian z powrotem do źródła danych.

ViewModel

W tej wersji projektu Customers zaimplementowano metodologię programowania MVVM (Model-View-ViewModel), co pozwoliło na oddzielenie interfejsu użytkownika od logiki pobierającej dane ze źródła danych.

Chapter 27

Web Service

Rozwiązanie obejmujące aplikację web dostarczającą usługi typu ASP.NET Web Service, używanej przez aplikację Customers do pobierania danych klientów z bazy danych serwera SQL Server. Podczas dostępu do bazy danych usługa web używa modelu encji utworzonego przy użyciu technologii Entity Framework.

Customers with insert and update features

To rozwiązanie zawiera uaktualnioną wersję projektu Customers, wykorzystującego usługę web typu REST do tworzenia rekordów nowych klientów i modyfikowania szczegółów istniejących klientów.

Errata i wsparcie techniczne

Dołożono wszelkich starań, mających na celu zapewnienie dokładności tej książki oraz towarzyszących jej treści. Informacje o wszelkich błędach, które zostały dostrzeżone i zgłoszone już po opublikowaniu tej książki, dostępne są na stronie wydawnictwa Microsoft Press:

https://MicrosoftPressStore.com/VisualCsharp10e/errata

W przypadku wykrycia nowego błędu można go zgłosić za pomocą tej samej, wymienionej powyżej strony.

W razie potrzeby uzyskania dodatkowej pomocy technicznej związanej z tą książką prosimy o skontaktowanie się z działem pomocy technicznej wydawnictwa Microsoft Press Book Support poprzez wysłanie wiadomości email na adres:

mspinput@microsoft.com.

Prosimy pamiętać, że pod podanymi adresami nie jest oferowana pomoc techniczna dla oprogramowania firmy Microsoft. Jeśli ktoś potrzebuje pomocy dotyczącej oprogramowania lub sprzętu firmy Microsoft, powinien skorzystać z informacji na poniższej stronie:

https://support.microsoft.com

* Podczas przygotowywania polskiego wydania książki przyjęliśmy założenie, że Czytelnik posługuje się systemem Windows w polskiej wersji językowej i że używa Visual Studio z zainstalowanym polskim pakietem językowym. Nazwy poleceń menu i elementów programu występujące w tekście są podawane w wersji polskiej - przy pierwszym użyciu w nawiasie podawana jest nazwa angielska. Natomiast kod przykładowy opracowany przez autora nie był modyfikowany - przetłumaczone zostały jedynie komentarze występujące w tym kodzie. Wszystkie zrzuty ekranowe zostały wykonane na komputerze systemu Windows 10 w Visual Studio Community 2022 wersja 17.2.6. Oprogramowanie Visual Studio podlega ciągłemu rozwojowi, zatem nie jest wykluczone, że w chwili, gdy książka trafi do rąk Czytelników, pewne elementy interfejsu użytkownika będą wyglądały inaczej, niż w tej publikacji (przyp. red. wydania polskiego).