Szczegóły ebooka

C# 10. Programowanie. Tworzenie aplikacji Windows, internetowych i biurowych

C# 10. Programowanie. Tworzenie aplikacji Windows, internetowych i biurowych

Ian Griffiths

Ebook

Język C#, sztandarowe dzieło Microsoftu, jest rozwijany stopniowo i ze starannością. Wciąż cechuje go prostota, a jego możliwości konsekwentnie rosną. Każda nowa funkcjonalność idealnie integruje się z resztą języka. W efekcie C# jest dojrzały, nowoczesny, wszechstronny i bezpieczny. Jego kolejne wydanie, oznaczone numerem 10.0, różni się od poprzednich, więc aby programowanie w C# pozostało efektywne i satysfakcjonujące, trzeba opanować niuanse nowej wersji języka i narzędzi z nim związanych.

Ta książka jest uaktualnionym wydaniem wyczerpującego przewodnika dla doświadczonych programistów. Omawia ważne koncepcje języka C# i te jego tajniki, które rzadko kiedy są opisywane w poświęconych mu publikacjach. Uwzględnia najnowsze możliwości .NET 6 i C# w wersjach 9.0 i 10.0, z czego warto wymienić: rekordy, rozszerzone możliwości dopasowywania wzorców, a także nowe techniki upraszczania kodu w celu poprawy jego efektywności. Dokładnie opisano tu typy ogólne, LINQ i techniki programowania asynchronicznego. Wyjaśniono, jak w praktyce skorzystać z tych możliwości podczas tworzenia różnego rodzaju aplikacji: chmurowych, internetowych i klasycznych dla komputerów biurkowych.

W książce między innymi:

  • zmiany wprowadzone w ostatnich wersjach języka C#
  • zasady korzystania z nowych możliwości języka
  • zastosowanie nowych funkcjonalności C# w tworzeniu aplikacji
  • nowe możliwości bibliotek klas .NET
  • zastosowanie bibliotek klas .NET do praktycznych zadań programistycznych
  • zwiększanie siły ekspresji kodu w C#

Poznaj sekretne tajniki C# i zostań mistrzem dobrego kodu!

Wstęp

1. Prezentacja C#

  • Dlaczego C#?
    • Kod zarządzany i CLR
    • Ogólność jest preferowana względem specjalizacji
  • Standardy oraz implementacje języka C#
    • Wiele .NET-ów
    • Cykle wydawnicze i wsparcie długoterminowe
    • Użycie .NET Standard w celu tworzenia projektów działających
  • Visual Studio, Visual Studio Code oraz JetBrains Rider
  • Anatomia prostego programu
    • Pisanie testu jednostkowego
    • Przestrzenie nazw
    • Klasy
    • Testy jednostkowe
  • Podsumowanie

2. Podstawy stosowania języka C#

  • Zmienne lokalne
    • Zakres
    • Niejednoznaczności nazw zmiennych
    • Instancje zmiennych lokalnych
  • Instrukcje i wyrażenia
    • Instrukcje
    • Wyrażenia
  • Komentarze i białe znaki
  • Dyrektywy preprocesora
    • Symbole kompilacji
    • Dyrektywy #error oraz #warning
    • Dyrektywa #line
    • Dyrektywa #pragma
    • Dyrektywa #nullable
    • Dyrektywy #region i #endregion
  • Podstawowe typy danych
    • Typy liczbowe
    • Wartości logiczne
    • Znaki i łańcuchy znaków
    • Krotki
    • Dynamic
    • Object
  • Operatory
  • Sterowanie przepływem
    • Decyzje logiczne przy użyciu instrukcji if
    • Wielokrotny wybór przy użyciu instrukcji switch
    • Pętle: while i do
    • Pętle znane z języka C
    • Przeglądanie kolekcji przy użyciu pętli foreach
  • Wzorce
    • Łączenie i negacja wzorców
    • Wzorce relacyjne
    • Uzyskiwanie większej dokładności dzięki użyciu when
    • Wzorce w wyrażeniach
  • Podsumowanie

3. Typy

  • Klasy
    • Składowe statyczne
    • Klasy statyczne
  • Rekordy
  • Typy referencyjne i wartość null
    • Eliminacja wartości pustych przy użyciu referencji, które ich nie akceptują
  • Struktury
    • Kiedy tworzyć typy wartościowe?
    • Gwarantowanie niezmienności
    • Typy record struct
  • Klasy, struktury, rekordy czy krotki?
  • Składowe
    • Dostępność
    • Pola
    • Konstruktory
    • Dekonstruktory
    • Metody
    • Właściwości
    • Operatory
    • Zdarzenia
    • Typy zagnieżdżone
  • Interfejsy
    • Domyślne implementacje metod w interfejsach
  • Typy wyliczeniowe
  • Inne typy
  • Typy anonimowe
  • Typy i metody częściowe
  • Podsumowanie

4. Typy ogólne

  • Typy ogólne
  • Ograniczenia
    • Ograniczenia typu
    • Ograniczenia typu referencyjnego
    • Ograniczenia typu wartościowego
    • Wszystkie typy w hierarchii wartościowe dzięki ograniczeniu unmanaged
    • Ograniczenie notnull
    • Inne specjalne ograniczenia typów
    • Stosowanie wielu ograniczeń
  • Wartości przypominające zero
  • Metody ogólne
    • Wnioskowanie typu
  • Typy ogólne i krotki
  • Tajniki typów ogólnych
  • Podsumowanie

5. Kolekcje

  • Tablice
    • Inicjalizacja tablic
    • Przeszukiwanie i sortowanie
    • Tablice wielowymiarowe
    • Kopiowanie i zmiana wielkości
  • List
  • Interfejsy list i sekwencji
  • Implementacja list i sekwencji
    • Implementacja IEnumerable przy użyciu iteratorów
    • Klasa Collection
    • Klasa ReadOnlyCollection
  • Odwołania do elementów z użyciem indeksów i zakresów
    • System.Index
    • System.Range
    • Obsługa indeksów i zakresów we własnych typach danych
  • Słowniki
    • Słowniki posortowane
  • Zbiory
  • Kolejki i stosy
  • Listy połączone
  • Kolekcje współbieżne
  • Kolekcje niezmienne
  • Podsumowanie

6. Dziedziczenie

  • Dziedziczenie i konwersje
  • Dziedziczenie interfejsów
  • Typy ogólne
    • Kowariancja i kontrawariancja
  • System.Object
    • Wszechobecne metody typu System.Object
  • Dostępność i dziedziczenie
  • Metody wirtualne
    • Metody abstrakcyjne
    • Dziedziczenie i wersje bibliotek
  • Metody i klasy ostateczne
  • Dostęp do składowych klas bazowych
  • Dziedziczenie i tworzenie obiektów
  • Rekordy
    • Rekordy, dziedziczenie i słowo kluczowe with
  • Specjalne typy bazowe
  • Podsumowanie

7. Cykl życia obiektów

  • Mechanizm odzyskiwania pamięci
    • Określanie osiągalności danych
    • Przypadkowe problemy mechanizmu odzyskiwania pamięci
    • Słabe referencje
    • Odzyskiwanie pamięci
    • Tryby odzyskiwania pamięci
    • Tymczasowe zawieszanie odzyskiwania pamięci
    • Przypadkowe utrudnianie scalania
    • Wymuszanie odzyskiwania pamięci
  • Destruktory i finalizacja
  • Interfejs IDisposable
    • Zwalnianie opcjonalne
  • Pakowanie
    • Pakowanie danych typu Nullable
  • Podsumowanie

8. Wyjątki

  • Źródła wyjątków
    • Wyjątki zgłaszane przez API
    • Błędy wykrywane przez środowisko uruchomieniowe
  • Obsługa wyjątków
    • Obiekty wyjątków
    • Wiele bloków catch
    • Filtry wyjątków
    • Zagnieżdżone bloki try
    • Bloki finally
  • Zgłaszanie wyjątków
    • Powtórne zgłaszanie wyjątków
    • Sposób na szybkie zakończenie aplikacji
  • Typy wyjątków
  • Wyjątki niestandardowe
  • Wyjątki nieobsługiwane
  • Podsumowanie

9. Delegaty, wyrażenia lambda i zdarzenia

  • Typy delegatów
    • Tworzenie delegatów
    • MulticastDelegate - delegaty zbiorowe
    • Wywoływanie delegatów
    • Popularne typy delegatów
    • Zgodność typów
    • Więcej niż składnia
  • Funkcje anonimowe
    • Przechwytywane zmienne
    • Wyrażenia lambda oraz drzewa wyrażeń
  • Zdarzenia
    • Standardowy wzorzec delegatów zdarzeń
    • Niestandardowe metody dodające i usuwające zdarzenia
    • Zdarzenia i mechanizm odzyskiwania pamięci
    • Zdarzenia a delegaty
  • Delegaty a interfejsy
  • Podsumowanie

10. LINQ

  • Wyrażenia zapytań
    • Jak są rozwijane wyrażenia zapytań
    • Obsługa wyrażeń zapytań
  • Przetwarzanie opóźnione
  • LINQ, typy ogólne oraz interfejs IQueryable
  • Standardowe operatory LINQ
    • Filtrowanie
    • Selekcja
    • Operator SelectMany
    • Podział na części
    • Określanie porządku
    • Testy zawierania
    • Asynchroniczne przetwarzanie natychmiastowe
    • Agregacja
    • Operacje na zbiorach
    • Operatory działające na całych sekwencjach z zachowaniem kolejności
    • Grupowanie
    • Złączenia
    • Konwersje
  • Generowanie sekwencji
  • Inne implementacje LINQ
    • Entity Framework Core
    • Parallel LINQ (PLINQ)
    • LINQ to XML
    • IAsyncEnumerable
    • Reactive Extensions
  • Podsumowanie

11. Reactive Extensions

  • Podstawowe interfejsy
    • Interfejs IObserver
    • Interfejs IObservable
  • Publikowanie i subskrypcja z wykorzystaniem delegatów
    • Tworzenie źródła przy wykorzystaniu delegatów
    • Subskrybowanie obserwowalnych źródeł przy użyciu delegatów
  • Generator sekwencji
    • Empty
    • Never
    • Return
    • Throw
    • Range
    • Repeat
    • Generate
  • Zapytania LINQ
    • Operatory grupowania
    • Operatory Join
    • Operator SelectMany
    • Agregacja oraz inne operatory zwracające jedną wartość
    • Operator Concat
  • Operatory biblioteki Rx
    • Merge
    • Operatory Buffer i Window
    • Operator Scan
    • Operator Amb
    • DistinctUntilChanged
  • Mechanizmy szeregujące
    • Określanie mechanizmów szeregujących
    • Wbudowane mechanizmy szeregujące
  • Tematy
    • Subject
    • BehaviorSubject
    • ReplaySubject
    • AsyncSubject
  • Dostosowanie
    • IEnumerable i IAsyncEnumerable
    • Zdarzenia .NET
    • API asynchroniczne
  • Operacje z uzależnieniami czasowymi
    • Interval
    • Timer
    • Timestamp
    • TimeInterval
    • Throttle
    • Sample
    • Timeout
    • Operatory okien czasowych
    • Delay
    • DelaySubscription
  • Reaqtor - Rx jako usługa
  • Podsumowanie

12. Podzespoły

  • Anatomia podzespołu
    • Metadane .NET
    • Zasoby
    • Podzespoły składające się z wielu plików
    • Inne możliwości formatu PE
  • Tożsamość typu
  • Wczytywanie podzespołów
    • Określanie podzespołów
    • Jawne wczytywanie podzespołów
    • Izolacja i obsługa wtyczek z użyciem typu AssemblyLoadContext
  • Nazwy podzespołów
    • Silne nazwy
    • Numer wersji
    • Numery wersji a wczytywanie podzespołów
    • Identyfikator kulturowy
  • Zabezpieczenia
  • Platformy docelowe i .NET Standard
  • Podsumowanie

13. Odzwierciedlanie

  • Typy odzwierciedlania
    • Assembly
    • Module
    • MemberInfo
    • Type i TypeInfo
    • MethodBase, ConstructorInfo oraz MethodInfo
    • ParameterInfo
    • FieldInfo
    • PropertyInfo
    • EventInfo
  • Konteksty odzwierciedlania
  • Podsumowanie

14. Atrybuty

  • Stosowanie atrybutów
    • Cele atrybutów
    • Atrybuty obsługiwane przez kompilator
    • Atrybuty obsługiwane przez CLR
  • Definiowanie i stosowanie atrybutów niestandardowych
    • Typy atrybutów
    • Pobieranie atrybutów
    • Wczytywanie jedynie metadanych
  • Podsumowanie

15. Pliki i strumienie

  • Klasa Stream
    • Położenie i poruszanie się w strumieniu
    • Opróżnianie strumienia
    • Kopiowanie
    • Length
    • Zwalnianie strumieni
    • Operacje asynchroniczne
    • Konkretne typy strumieni
    • Jeden typ, wiele zachowań
  • Dostęp swobodny i rozproszone/zebrane operacje wejścia-wyjścia bez klasy Stream
  • Typy operujące na tekstach
    • TextReader oraz TextWriter
    • Konkretne typy do odczytu i zapisu łańcuchów znaków
    • Kodowanie
  • Pliki i katalogi
    • Klasa FileStream
    • Klasa File
    • Klasa Directory
    • Klasa Path
    • Klasy FileInfo, DirectoryInfo oraz FileSystemInfo
    • Znane katalogi
  • Serializacja
    • Klasy BinaryReader i BinaryWriter
    • Serializacja CLR
    • JSON
  • Podsumowanie

16. Wielowątkowość

  • Wątki
    • Wątki, zmienne i wspólny stan
    • Pamięć lokalna wątku
    • Klasa Thread
    • Pula wątków
    • Powinowactwo do wątku oraz klasa SynchronizationContext
    • Klasa ExecutionContext
  • Synchronizacja
    • Monitory oraz słowo kluczowe lock
    • Klasa SpinLock
    • Blokady odczytu i zapisu
    • Obiekty zdarzeń
    • Klasa Barrier
    • Klasa CountdownEvent
    • Semafory
    • Muteksy
    • Klasa Interlocked
    • Leniwa inicjalizacja
    • Pozostałe klasy obsługujące działania współbieżne
  • Zadania
    • Klasy Task i Task
    • Kontynuacje
    • Mechanizmy szeregujące
    • Obsługa błędów
    • Niestandardowe zadania bezwątkowe
    • Związki zadanie nadrzędne - zadanie podrzędne
    • Zadania złożone
  • Inne wzorce asynchroniczne
  • Anulowanie
  • Równoległość
    • Klasa Parallel
    • Parallel LINQ
    • TPL Dataflow
  • Podsumowanie

17. Asynchroniczne cechy języka

  • Nowe słowa kluczowe: async i await
    • Konteksty wykonania i synchronizacji
    • Wykonywanie wielu operacji i pętli
    • Zwracanie obiektu Task
    • Stosowanie async w metodach zagnieżdżonych
  • Wzorzec słowa kluczowego await
  • Obsługa błędów
    • Weryfikacja poprawności argumentów
    • Wyjątki pojedyncze oraz grupy wyjątków
    • Operacje równoległe i nieobsłużone wyjątki
  • Podsumowanie

18. Wydajne użytkowanie pamięci

  • (Nie) kopiować!
  • Reprezentacja elementów sekwencyjnych przy użyciu Span
    • Metody pomocnicze
    • Tylko na stosie
  • Reprezentacja elementów sekwencyjnych przy użyciu Memory
  • ReadOnlySequence
  • Przetwarzanie strumieni danych przy użyciu potoków
    • Przetwarzanie danych JSON w ASP.NET Core
  • Podsumowanie

Skorowidz

  • Tytuł: C# 10. Programowanie. Tworzenie aplikacji Windows, internetowych i biurowych
  • Autor: Ian Griffiths
  • Tytuł oryginału: Programming C# 10: Build Cloud, Web, and Desktop Applications
  • Tłumaczenie: Piotr Rajca
  • ISBN: 978-83-8322-207-3, 9788383222073
  • Data wydania: 2023-03-14
  • Format: Ebook
  • Identyfikator pozycji: c10pro
  • Wydawca: Helion