C# 8.0 w pigułce

Book description

To kolejne, przejrzane i zaktualizowane wydanie doskonałego podręcznika dla programistów. Znalazły się tu zwięzłe i dokładne informacje na temat języka C#, Common Language Runtime (CLR) oraz platformy .NET Core. Zaprezentowano precyzyjne opisy pojęć i konkretne przypadki użycia, a poszczególne zagadnienia potraktowano dogłębnie i od strony praktycznej. Sporo uwagi poświęcono dość trudnym tematom, jak współbieżność, bezpieczeństwo i dostęp do funkcji systemu operacyjnego, przy czym nie zaniedbano kwestii czytelności i nie spłycono informacji. Nowe składniki języka C# 8.0 i związanej z nim platformy specjalnie oznaczono, dzięki czemu to wydanie może też służyć jako podręcznik do C# 7.0.

Table of contents

  1. Wstęp
    1. Adresaci książki
    2. Struktura książki
    3. Co jest potrzebne
    4. Konwencje typograficzne
    5. Przykłady kodu
    6. Podziękowania
      1. Joseph Albahari
      2. Eric Johannsen
  2. 1 Wprowadzenie do C# i .NET Core
    1. Obiektowość
    2. Bezpieczeństwo typów
    3. Zarządzanie pamięcią
    4. Platformy
    5. C# i Common Language Runtime
    6. Frameworki i biblioteki klas bazowych
    7. Stare i niszowe środowiska
    8. Windows Runtime
    9. Historia C# w pigułce
      1. Co nowego w C# 8.0
        1. Indeksy i zakresy
        2. Przypisanie z uwzględnieniem null
        3. Deklaracje using
        4. Składowe tylko do odczytu
        5. Statyczne metody lokalne
        6. Domyślne składowe interfejsów
        7. Wyrażenia switch
        8. Wzorce krotki, pozycji i właściwości
        9. Typy referencyjne dopuszczające wartość null
        10. Asynchroniczne strumienie
      2. Co nowego w C# 7.x
        1. C# 7.3
        2. C# 7.2
        3. C# 7.1
        4. Ulepszenia w zakresie literałów liczbowych
        5. Zmienne wyjściowe i odrzucenia
        6. Wzorce typów i zmienne wzorcowe
        7. Metody lokalne
        8. Więcej składowych z wyrażeniami
        9. Dekonstruktory
        10. Krotki
        11. Wyrażenia throw
      3. Co nowego w C# 6.0
      4. Co nowego w C# 5.0
      5. Co nowego w C# 4.0
      6. Co nowego w C# 3.0
      7. Co nowego w C# 2.0
  3. 2 Podstawy języka C#
    1. Pierwszy program w języku C#
      1. Kompilacja
    2. Składnia
      1. Identyfikatory i słowa kluczowe
        1. Unikanie konfliktów nazw
        2. Kontekstowe słowa kluczowe
      2. Literały, znaki interpunkcyjne i operatory
      3. Komentarze
    3. Podstawy typów
      1. Przykłady typów predefiniowanych
      2. Przykłady definiowania typów przez programistę
        1. Składowe typu
        2. Symetria typów predefiniowanych i typy własne
        3. Konstruktory i tworzenie egzemplarzy
        4. Składowe egzemplarza a składowe statyczne
        5. Słowo kluczowe public
      3. Konwersje
      4. Typy wartościowe a typy referencyjne
        1. Typy wartościowe
        2. Typy referencyjne
        3. Wartość null
        4. Efektywność wykorzystania pamięci
      5. Systematyka typów predefiniowanych
    4. Typy liczbowe
      1. Literały liczbowe
        1. Inferencja typów literałów liczbowych
        2. Przyrostki literałów liczbowych
      2. Konwersje liczbowe
        1. Konwersje między typami całkowitoliczbowymi
        2. Konwersje między typami zmiennoprzecinkowymi
        3. Konwersja typów zmiennoprzecinkowych na całkowitoliczbowe
        4. Konwersje dziesiętne
      3. Operatory arytmetyczne
      4. Operatory inkrementacji i dekrementacji
      5. Specjalne działania całkowitoliczbowe
        1. Dzielenie całkowitoliczbowe
        2. Przepełnienie całkowitoliczbowe
        3. Operatory sprawdzania przepełnienia całkowitoliczbowego
        4. Sprawdzanie przepełnienia dla wyrażeń stałych
        5. Operatory bitowe
      6. 8- i 16-bitowe typy całkowitoliczbowe
      7. Specjalne wartości typów float i double
      8. Porównanie typów double i decimal
      9. Błędy zaokrąglania liczb rzeczywistych
    5. Typ logiczny i operatory
      1. Konwersje typu logicznego
      2. Operatory porównywania i równości
      3. Operatory warunkowe
        1. Operator warunkowy (trójargumentowy)
    6. Łańcuchy znaków i pojedyncze znaki
      1. Konwersje znaków
      2. Typ string
        1. Konkatenacja łańcuchów
        2. Interpolacja łańcuchów
        3. Porównywanie łańcuchów
    7. Tablice
      1. Domyślna inicjalizacja elementów
        1. Typy wartościowe a typy referencyjne
      2. Indeksy i zakresy (C# 8)
        1. Indeksy
        2. Zakresy
      3. Tablice wielowymiarowe
        1. Tablice prostokątne
        2. Tablice nieregularne
      4. Uproszczone wyrażenia inicjalizacji tablic
      5. Sprawdzanie granic
    8. Zmienne i parametry
      1. Stos i sterta
        1. Stos
        2. Sterta
      2. Pewność przypisania
      3. Wartości domyślne
      4. Parametry
        1. Przekazywanie argumentów przez wartość
        2. Modyfikator ref
        3. Modyfikator out
        4. Zmienne wyjściowe i odrzucenia
        5. Implikacje przekazywania przez referencję
        6. Modyfikator in
        7. Modyfikator params
        8. Parametry opcjonalne
        9. Argumenty nazwane
      5. Odwołania lokalne ref
      6. Typ zwrotny ref
      7. Słowo kluczowe var — niejawne określanie typów zmiennych lokalnych
    9. Wyrażenia i operatory
      1. Wyrażenia podstawowe
      2. Wyrażenia puste
      3. Wyrażenia przypisania
      4. Kolejność wykonywania działań i łączność operatorów
        1. Kolejność wykonywania
        2. Łączność lewostronna operatorów
        3. Łączność prawostronna operatorów
      5. Tabela operatorów
    10. Operatory null
      1. Operator łączący z kontrolą wartości null
      2. Operator przypisania łączącego z kontrolą wartości null (C#)
      3. Operator warunkowy z kontrolą wartości null
    11. Instrukcje
      1. Instrukcje deklaracji
        1. Zmienne lokalne
      2. Instrukcje wyrażeniowe
      3. Instrukcje wyboru
        1. Instrukcja if
        2. Klauzula else
        3. Zmienianie ścieżki wykonywania przy użyciu klamer
        4. Instrukcja switch
        5. Instrukcja switch z typami
        6. Wyrażenia switch (C# 8)
      4. Instrukcje iteracyjne
        1. Pętle while i do-while
        2. Pętla for
        3. Pętla foreach
      5. Instrukcje skoku
        1. Instrukcja break
        2. Instrukcja continue
        3. Instrukcja goto
        4. Instrukcja return
        5. Instrukcja throw
      6. Inne instrukcje
    12. Przestrzenie nazw
      1. Dyrektywa using
      2. Dyrektywa using static
      3. Reguły obowiązujące w przestrzeniach nazw
        1. Zakres przestrzeni nazw
        2. Ukrywanie nazw
        3. Powtarzanie przestrzeni nazw
        4. Zagnieżdżanie dyrektywy using
      4. Aliasy typów i przestrzeni nazw
      5. Zaawansowane właściwości przestrzeni nazw
        1. Słowo kluczowe extern
        2. Kwalifikatory aliasów przestrzeni nazw
  4. 3 Tworzenie typów w języku C#
    1. Klasy
      1. Pola
        1. Modyfikator readonly
        2. Inicjalizacja pól
        3. Deklarowanie wielu pól naraz
      2. Stałe
      3. Metody
        1. Metody wyrażeniowe
        2. Przeciążanie metod
        3. Przekazywanie przez wartość a przekazywanie przez referencję
        4. Metody lokalne
        5. Statyczne metody lokalne (C# 8)
      4. Konstruktory egzemplarzy
        1. Przeciążanie konstruktorów
        2. Niejawne konstruktory bez parametrów
        3. Konstruktor i kolejność inicjalizowania pól
        4. Konstruktory niepubliczne
      5. Dekonstruktory
      6. Inicjalizatory obiektów
      7. Referencja this
      8. Własności
        1. Własności tylko do odczytu i obliczane
        2. Własności wyrażeniowe
        3. Własności automatyczne
        4. Inicjalizatory własności
        5. Dostępność metod get i set
        6. Implementacja własności w CLR
      9. Indeksatory
        1. Implementowanie indeksatora
        2. Implementacja indeksatorów w CLR
        3. Używanie indeksów i zakresów z indeksatorami (C# 8)
      10. Konstruktory statyczne
        1. Konstruktory statyczne i kolejność inicjalizacji pól
      11. Klasy statyczne
      12. Finalizatory
      13. Metody i typy częściowe
        1. Metody częściowe
      14. Operator nameof
    2. Dziedziczenie
      1. Polimorfizm
      2. Rzutowanie i konwertowanie referencji
        1. Rzutowanie w górę
        2. Rzutowanie w dół
        3. Operator as
        4. Operator is
        5. Wprowadzanie zmiennej wzorcowej
      3. Wirtualne składowe funkcyjne
      4. Abstrakcyjne klasy i składowe
      5. Ukrywanie odziedziczonych składowych
        1. Słowa kluczowe new i override
      6. Pieczętowanie funkcji i klas
      7. Słowo kluczowe base
      8. Konstruktory i dziedziczenie
        1. Niejawne wywoływanie bezparametrowego konstruktora klasy bazowej
        2. Kolejność inicjalizacji pól
      9. Przeciążanie i rozpoznawanie
    3. Typ object
      1. Pakowanie i rozpakowywanie
        1. Semantyka kopiowana w pakowaniu i rozpakowywaniu
      2. Statyczna i dynamiczna kontrola typów
      3. Metoda GetType i operator typeof
      4. Metoda ToString
      5. Lista składowych klasy object
    4. Struktury
      1. Semantyka tworzenia struktur
      2. Struktury tylko do odczytu i funkcje
      3. Struktury referencyjne
    5. Modyfikatory dostępu
      1. Przykłady
      2. Zestawy zaprzyjaźnione
      3. Ograniczanie dostępności
      4. Ograniczenia dotyczące modyfikatorów dostępu
    6. Interfejsy
      1. Rozszerzanie interfejsu
      2. Jawna implementacja interfejsu
      3. Wirtualna implementacja składowych interfejsu
      4. Reimplementacja interfejsu w podklasie
        1. Alternatywy dla reimplementacji
      5. Interfejsy i pakowanie
      6. Domyślne składowe interfejsy (C# 8)
    7. Wyliczenia
      1. Konwersje wyliczeń
      2. Atrybut Flags
      3. Operatory wyliczeń
      4. Kwestia bezpieczeństwa typów
    8. Typy zagnieżdżone
    9. Typy generyczne
      1. Typy generyczne
      2. Po co są typy generyczne
      3. Metody generyczne
      4. Deklarowanie parametrów typów
      5. Operator typeof i niepowiązane typy generyczne
      6. Domyślna wartość generyczna
      7. Ograniczenia typów generycznych
      8. Tworzenie podklas typów generycznych
      9. Odwołania do samego siebie w deklaracjach generycznych
      10. Dane statyczne
      11. Parametry typów i konwersje
      12. Kowariancja
        1. Wariancja nie jest automatyczna
        2. Tablice
        3. Deklarowanie kowariantnego parametru typu
      13. Kontrawariancja
      14. Typy generyczne C# a szablony C++
  5. 4 Zaawansowane elementy języka C#
    1. Delegaty
      1. Pisanie metod wtyczek przy użyciu delegatów
      2. Delegaty multiemisji
        1. Przykład użycia delegatu multiemisji
      3. Metody egzemplarzy a metody statyczne jako cele delegatów
      4. Generyczne typy delegacyjne
      5. Delegaty Func i Action
      6. Delegaty a interfejsy
      7. Zgodność delegatów
        1. Zgodność typów
        2. Zgodność parametrów
        3. Zgodność typów zwrotnych
        4. Wariancja parametrów typów delegatów generycznych
    2. Zdarzenia
      1. Standardowy wzorzec zdarzeń
      2. Metody dostępowe zdarzeń
      3. Modyfikatory zdarzeń
    3. Wyrażenia lambda
      1. Jawne określanie typów parametrów lambdy
      2. Przechwytywanie zmiennych zewnętrznych
        1. Przechwytywanie zmiennych iteracyjnych
      3. Wyrażenia lambda a metody lokalne
    4. Metody anonimowe
    5. Instrukcje try i wyjątki
      1. Klauzula catch
        1. Filtry wyjątków
      2. Blok finally
        1. Instrukcja using
      3. Deklaracje using (C# 8)
      4. Zgłaszanie wyjątków
        1. Wyrażenia throw
        2. Ponawianie zgłoszenia wyjątku
      5. Najważniejsze własności klasy System.Exception
      6. Najczęściej używane typy wyjątków
      7. Wzorzec metod TryXXX
      8. Alternatywy dla wyjątków
    6. Wyliczenia i iteratory
      1. Wyliczenia
      2. Inicjalizatory kolekcji
      3. Iteratory
      4. Semantyka iteratorów
        1. Instrukcja yield break
        2. Iteratory i bloki try-catch-finally
      5. Komponowanie sekwencji
    7. Typy wartościowe dopuszczające wartość null
      1. Struktura Nullable<T>
      2. Jawne i niejawne konwersje typów dopuszczających wartość null
      3. Pakowanie i rozpakowywanie wartości typów dopuszczających wartość null
      4. Pożyczanie operatorów
        1. Operatory równości (== i !=)
        2. Operatory relacyjne (<, <=, >=, >)
        3. Pozostałe operatory (+, −, *, /, %, &, |, ^, <<, >>, +, ++, --, !, ~)
        4. Mieszanie operatorów dopuszczających wartość null ze zwykłymi
      5. Operatory & i | z typem bool?
      6. Typy wartościowe dopuszczające wartość null i operatory null
      7. Zastosowania typów wartościowych dopuszczających wartość null
      8. Alternatywa dla typów wartościowych dopuszczających wartość null
    8. Typy referencyjne dopuszczające wartość null (C# 8)
      1. Operator ignorowania null
      2. Rozdzielanie kontekstów adnotacji i ostrzeżeń
      3. Traktowanie ostrzeżeń dotyczących null jako błędów
    9. Metody rozszerzające
      1. Łańcuchowe wywoływanie metod rozszerzających
      2. Postępowanie w niejednoznacznych przypadkach
        1. Przestrzenie nazw
        2. Metody rozszerzające a metody egzemplarzowe
        3. Metody rozszerzające kontra metody rozszerzające
    10. Typy anonimowe
    11. Krotki
      1. Nadawanie nazw elementom krotek
        1. Wymazywanie typów
      2. ValueTuple.Create
      3. Dekonstruowanie krotek
      4. Porównywanie
      5. Klasy System.Tuple
    12. Wzorce
      1. Wzorce własności (C# 8)
      2. Wzorce krotek (C# 8)
      3. Wzorce pozycyjne (C# 8)
      4. Wzorzec var
      5. Wzorzec stałej
    13. Atrybuty
      1. Klasy atrybutów
      2. Atrybuty nazwane i pozycyjne
      3. Stosowanie atrybutów do zestawów i pól pomocniczych
      4. Przypisywanie wielu atrybutów
    14. Atrybuty informacji wywołującego
    15. Wiązanie dynamiczne
      1. Wiązanie statyczne a wiązanie dynamiczne
      2. Wiązanie niestandardowe
      3. Wiązanie językowe
      4. RuntimeBinderException
      5. Reprezentacja typu dynamic w czasie działania programu
      6. Konwersje dynamiczne
      7. Typy var i dynamic
      8. Wyrażenia dynamiczne
      9. Wywołania dynamiczne bez dynamicznych odbiorców
      10. Typy statyczne w wyrażeniach dynamicznych
      11. Funkcje, których nie da się wywołać
    16. Przeciążanie operatorów
      1. Funkcje operatorowe
      2. Przeciążanie operatorów równości i porównywania
      3. Niestandardowe konwersje jawne i niejawne
      4. Przeciążanie true i false
    17. Niebezpieczny kod i wskaźniki
      1. Podstawowe wiadomości o wskaźnikach
      2. Kod niebezpieczny
      3. Instrukcja fixed
      4. Operator wskaźnika do składowej
      5. Słowo kluczowe stackalloc
      6. Bufory o stałym rozmiarze
      7. Wskaźnik pusty
      8. Wskaźniki do kodu niezarządzanego
    18. Dyrektywy preprocesora
      1. Atrybuty warunkowe
      2. Ostrzeżenia pragma
    19. Dokumentacja XML
      1. Standardowe znaczniki dokumentacyjne XML
      2. Znaczniki niestandardowe
      3. Odwołania do typów i składowych
  6. 5 Ogólny zarys platformy
    1. .NET Standard
      1. .NET Standard 2.0
      2. NET Standard 2.1
      3. Starsze standardy .NET Standard
      4. Zgodność .NET Framework i .NET Core
    2. Wersje środowiska i C#
    3. Zestawy referencyjne
    4. CLR i BCL
      1. Typy systemowe
      2. Przetwarzanie tekstu
      3. Kolekcje
      4. Zapytania
      5. XML i JSON
      6. Diagnostyka
      7. Współbieżność i asynchroniczność
      8. Strumienie oraz operacje wejścia i wyjścia
      9. Sieć
      10. Serializacja
      11. Zestawy, refleksja i atrybuty
      12. Programowanie dynamiczne
      13. Kryptografia
      14. Zaawansowane techniki pracy z wątkami
      15. Programowanie równoległe
      16. Span<T> i Memory<T>
      17. Interoperacyjność macierzysta i COM
      18. Wyrażenia regularne
      19. Kompilator Roslyn
    5. Frameworki aplikacji
      1. ASP.NET Core
      2. Windows Desktop
        1. WPF
        2. Windows Forms
        3. UWP
        4. Xamarin
  7. 6 Podstawowe wiadomości o platformie
    1. Obsługa łańcuchów i tekstu
      1. Typ char
      2. Typ string
        1. Tworzenie łańcuchów
        2. Łańcuchy null i puste
        3. Pobieranie znaków z łańcucha
        4. Przeszukiwanie łańcuchów
        5. Modyfikowanie łańcuchów
        6. Dzielenie i łączenie łańcuchów
        7. Metoda string.Format i złożone łańcuchy formatu
      3. Porównywanie łańcuchów
        1. Porównywanie porządkowe a kulturowe
        2. Porównywanie łańcuchów pod względem równości
        3. Porównywanie łańcuchów pod względem kolejności
      4. Klasa StringBuilder
      5. Rodzaje kodowania tekstu i Unicode
        1. Sprawdzanie sposobu kodowania
        2. Obiekty klasy Encoding dla plików i strumieni
        3. Obiekty klasy Encoding i tablice bajtów
        4. UTF-16 i pary zastępcze
    2. Data i godzina
      1. Struktura TimeSpan
      2. Struktury DateTime i DateTimeOffset
        1. Wybór między DateTime a DateTimeOffset
        2. Tworzenie obiektów typu DateTime
        3. Tworzenie obiektów typu DateTimeOffset
        4. Bieżący czas w strukturach DateTime i DateTimeOffset
        5. Praca z datami i godzinami
        6. String.Format i złożone łańcuchy formatu
        7. Wartości null obiektów typu DateTime i DateTimeOffset
    3. Daty i strefy czasowe
      1. Struktura DateTime i strefy czasowe
      2. Struktura DateTimeOffset i strefy czasowe
      3. Klasy TimeZone i TimeZoneInfo
        1. Klasa TimeZone
        2. TimeZoneInfo
      4. Czas letni i struktura DateTime
    4. Formatowanie i parsowanie obiektów DateTime
      1. Metody ToString i Parse
      2. Dostawcy formatu
        1. Dostawcy formatu i typ CultureInfo
        2. Typy NumberFormatInfo i DateTimeFormatInfo
        3. Formatowanie złożone
        4. Parsowanie przy użyciu dostawców formatu
        5. Interfejsy IFormatProvider i ICustomFormatter
    5. Standardowe łańcuchy formatu i flagi parsowania
      1. Numeryczne łańcuchy formatu
      2. Argument NumberStyles
      3. Łańcuchy formatowania daty i godziny
        1. Parsowanie i błędy parsowania
      4. Wyliczenie DateTimeStyles
      5. Łańcuchy formatowania wyliczeń
    6. Inne mechanizmy konwersji
      1. Klasa Convert
        1. Konwersje liczb rzeczywistych na całkowite z zaokrąglaniem
        2. Parsowanie liczb o podstawie 2, 8 i 16
        3. Konwersje dynamiczne
        4. Konwersje na format base64
      2. Klasa XmlConvert
      3. Konwertery typów
      4. Klasa BitConverter
    7. Globalizacja
      1. Podsumowanie zagadnień globalizacji
      2. Testowanie
    8. Praca z liczbami
      1. Konwersje
      2. Klasa Math
      3. Struktura BigInteger
      4. Struktura Complex
      5. Klasa Random
    9. Wyliczenia
      1. Konwersje wyliczeń
        1. Konwersje wyliczeń na typy całkowitoliczbowe
        2. Konwersje liczb całkowitych na wyliczenia
        3. Konwersje łańcuchowe
      2. Pobieranie wszystkich wartości wyliczenia
      3. Jak działają wyliczenia
    10. Struktura Guid
    11. Sprawdzanie równości
      1. Równość wartościowa i równość referencyjna
      2. Standardowe protokoły równości
        1. Operatory == i !=
        2. Wirtualna metoda Object.Equals
        3. Statyczna metoda object.Equals
        4. Statyczna metoda object.ReferenceEquals
        5. Interfejs IEquatable<T>
        6. Kiedy metoda Equals i operator == nie są sobie równe?
      3. Równość i typy definiowane przez programistę
        1. Zmienianie definicji równości
        2. Przyspieszanie sprawdzania równości za pomocą struktur
        3. Jak przesłonić semantykę równości?
        4. Przesłanianie metody GetHashCode
        5. Przesłanianie metody Equals
        6. Przeciążanie operatorów == i !=
        7. Implementowanie interfejsu IEquatable<T>
        8. Przykład — struktura Area
        9. Dołączane komparatory
    12. Określanie kolejności
      1. Interfejsy IComparable
        1. Interfejsy IComparable a metoda Equals
      2. Operatory < i >
      3. Implementowanie interfejsów IComparable
    13. Klasy pomocnicze
      1. Klasa Console
      2. Klasa Environment
      3. Klasa Process
        1. Przekierowywanie strumieni wyjścia i błędów
        2. Flaga UseShellExecute
      4. Klasa AppContext
  8. 7 Kolekcje
    1. Przeliczalność
      1. Interfejsy IEnumerable i IEnumerator
      2. Interfejsy IEnumerable<T> i IEnumerator<T>
        1. Interfejsy IEnumerable<T> i IDisposable
      3. Implementowanie interfejsów przeliczeniowych
    2. Interfejsy ICollection i IList
      1. Interfejsy ICollection<T> i ICollection
      2. Interfejsy IList<T> i IList
      3. Interfejsy IReadOnlyCollection<T> i IReadOnlyList<T>
    3. Klasa Array
      1. Tworzenie i indeksowanie tablic
      2. Przeglądanie zawartości tablicy
      3. Długość i liczba wymiarów tablicy
      4. Przeszukiwanie tablic
      5. Sortowanie
      6. Odwracanie kolejności elementów
      7. Kopiowanie
      8. Konwertowanie i zmienianie rozmiarów tablic
    4. Listy, kolejki, stosy i zbiory
      1. Klasy List<T> i ArrayList
      2. Klasa LinkedList<T>
      3. Klasy Queue<T> i Queue
      4. Klasy Stack<T> i Stack
      5. Klasa BitArray
      6. Klasy HashSet<T> i SortedSet<T>
    5. Słowniki
      1. Interfejs IDictionary<TKey,TValue>
      2. Interfejs IDictionary
      3. Klasy Dictionary<TKey,TValue> i Hashtable
      4. Klasa OrderedDictionary
      5. Klasy ListDictionary i HybridDictionary
      6. Słowniki sortowane
    6. Kolekcje i pośredniki z możliwością dostosowywania
      1. Klasy Collection<T> i CollectionBase
        1. Klasa CollectionBase
      2. Klasy KeyedCollection<TKey,TItem> i DictionaryBase
        1. DictionaryBase
      3. Klasa ReadOnlyCollection<T>
    7. Niezmienne kolekcje
      1. Tworzenie niezmiennych kolekcji
      2. Praca z niezmiennymi kolekcjami
      3. Klasy konstrukcyjne
      4. Niezmienne kolekcje a wydajność
    8. Dołączanie protokołów równości i porządkowania
      1. IEqualityComparer i EqualityComparer
        1. Metoda EqualityComparer<T>.Default
      2. IComparer i Comparer
      3. Klasa StringComparer
      4. Interfejsy IStructuralEquatable i IStructuralComparable
  9. 8 Zapytania LINQ
    1. Podstawy
    2. Składnia płynna
      1. Łączenie operatorów zapytań w łańcuchy
        1. Dlaczego metody rozszerzeń są ważne
      2. Tworzenie wyrażeń lambda
        1. Wyrażenia lambda i sygnatury Func
        2. Wyrażenia lambda i typizowanie elementów
      3. Porządkowanie naturalne
      4. Inne operatory
    3. Wyrażenia zapytań
      1. Zmienne zakresowe
      2. Składnia zapytaniowa a składnia SQL
      3. Składnia zapytaniowa a składnia płynna
      4. Zapytania o składni mieszanej
    4. Wykonywanie opóźnione
      1. Ponowne obliczanie
      2. Przechwytywanie zmiennych
      3. Jak odbywa się wykonywanie opóźnione
      4. Łączenie dekoratorów w łańcuchy
      5. Jak są wykonywane zapytania
    5. Podzapytania
      1. Podzapytania i wykonywanie opóźnione
    6. Tworzenie zapytań złożonych
      1. Progresywne budowanie zapytań
      2. Słowo kluczowe into
        1. Reguły ustalania zakresu dostępności
      3. Opakowywanie zapytań
    7. Strategie projekcji
      1. Inicjalizatory obiektów
      2. Typy anonimowe
      3. Słowo kluczowe let
    8. Zapytania interpretowane
      1. Jak działają zapytania interpretowane
        1. Wykonywanie
      2. Kombinacje zapytań interpretowanych i lokalnych
      3. Operator AsEnumerable
    9. EF Core
      1. Klasy jednostek EF Core
      2. Klasa DbContext
        1. Konfiguracja połączenia
        2. Konfiguracja modelu
        3. Tworzenie bazy danych
        4. Używanie klasy DbContext
      3. Śledzenie obiektów
      4. Śledzenie zmian
      5. Własności nawigacyjne
        1. Dodawanie i usuwanie jednostek z kolekcji nawigacyjnych
        2. Ładowanie własności nawigacyjnych
        3. Leniwe ładowanie
      6. Wykonywanie opóźnione
    10. Budowanie wyrażeń zapytań
      1. Delegaty a drzewa wyrażeń
        1. Kompilowanie drzew wyrażeń
        2. Operator AsQueryable
      2. Drzewa wyrażeń
        1. Struktura DOM wyrażenia
  10. 9 Operatory LINQ
    1. Informacje ogólne
      1. Sekwencja do sekwencji
        1. Filtrowanie
        2. Projekcja
        3. Łączenie
        4. Porządkowanie
        5. Grupowanie
        6. Operatory zbiorów
        7. Metody konwersji — import
        8. Metody konwersji — eksport
      2. Sekwencja → element lub wartość
        1. Operatory elementów
        2. Metody agregacji
        3. Kwantyfikatory
      3. Void → sekwencja
        1. Metody generujące
    2. Filtrowanie
      1. Metoda Where
        1. Składnia zapytaniowa
        2. Implementacja metody Enumerable.Where
        3. Informacje ogólne
        4. Filtrowanie z indeksowaniem
        5. Porównania SQL LIKE w EF Core
        6. Porównania łańcuchów za pomocą operatorów < i > w EF Core
        7. WHERE x IN (..., ..., ...) w EF Core
      2. Metody Take i Skip
      3. Metody TakeWhile i SkipWhile
      4. Metoda Distinct
    3. Projekcja
      1. Metoda Select
        1. Składnia zapytaniowa
        2. Implementacja w klasie Enumerable
        3. Informacje ogólne
        4. Projekcja z indeksowaniem
        5. Podzapytania select i hierarchie obiektów
        6. Podzapytania i złączenia w EF Core
        7. Projekcja do typów konkretnych
      2. Metoda SelectMany
        1. Składnia zapytaniowa
        2. Implementacja w klasie Enumerable
        3. Informacje ogólne
        4. Liczne zmienne zakresowe
        5. Myślenie w składni zapytaniowej
        6. Łączenie za pomocą metody SelectMany
        7. Metoda SelectMany w EF Core
        8. Złączenia zewnętrzne za pomocą metody SelectMany
    4. Łączenie
      1. Join i GroupJoin
        1. Argumenty metody Join
        2. Argumenty metody GroupJoin
        3. Składnia zapytaniowa
        4. Informacje ogólne
        5. Join
        6. Łączenie według wielu kluczy
        7. Złączenia w składni płynnej
        8. Metoda GroupJoin
        9. Płaskie złączenia zewnętrzne
        10. Złączenia z widokami wyszukiwania
        11. Implementacje w klasie Enumerable
      2. Operator Zip
    5. Porządkowanie
      1. Operatory OrderBy, OrderByDescending, ThenBy i ThenByDescending
        1. Argumenty operatorów OrderBy i OrderByDescending
        2. Argumenty operatorów ThenBy i ThenByDescending
        3. Składnia zapytaniowa
        4. Informacje ogólne
        5. Komparatory i sortowanie
        6. Interfejsy IOrderedEnumerable i IOrderedQueryable
    6. Grupowanie
      1. Metoda GroupBy
        1. Składnia zapytaniowa
        2. Informacje ogólne
        3. GroupBy w EF Core
        4. Grupowanie według wielu kluczy
        5. Niestandardowe komparatory równości
    7. Operatory zbiorów
      1. Metody Concat i Union
      2. Metody Intersect i Except
    8. Metody konwersji
      1. Metody OfType i Cast
      2. Metody ToArray, ToList, ToDictionary, ToHashSet i ToLookup
      3. Metody AsEnumerable i AsQueryable
    9. Operatory elementów
      1. Metody First, Last i Single
      2. Metoda ElementAt
      3. Metoda DefaultIfEmpty
    10. Metody agregacyjne
      1. Metody Count i LongCount
      2. Metody Min i Max
      3. Metody Sum i Average
      4. Metoda Aggregate
        1. Agregacje bez ziarna
        2. Pułapki związane z agregacjami bez ziarna
    11. Kwantyfikatory
      1. Metody Contains i Any
      2. Metody All i SequenceEqual
    12. Metody generujące
      1. Metoda Empty
      2. Metody Range i Repeat
  11. 10 LINQ to XML
    1. Przegląd architektury
      1. Czym jest DOM
      2. DOM w technologii LINQ to XML
    2. Informacje ogólne o X-DOM
      1. Ładowanie i parsowanie
      2. Zapisywanie i serializacja
    3. Tworzenie drzewa X-DOM
      1. Konstrukcja funkcyjna
      2. Definiowanie treści
      3. Automatyczne głębokie klonowanie
    4. Nawigowanie i wysyłanie zapytań
      1. Nawigacja po węzłach potomnych
        1. Metody FirstNode, LastNode i Nodes
        2. Pobieranie elementów
        3. Pobieranie jednego elementu
        4. Pobieranie elementów potomnych
      2. Nawigacja do rodzica
      3. Nawigacja na tym samym poziomie
      4. Nawigacja po atrybutach
    5. Modyfikowanie drzewa X-DOM
      1. Proste modyfikacje wartości
      2. Modyfikowanie węzłów potomnych i atrybutów
      3. Aktualizowanie danych przez rodzica
        1. Usuwanie sekwencji węzłów lub atrybutów
    6. Praca z wartościami
      1. Ustawianie wartości
      2. Pobieranie wartości
      3. Wartości i węzły z treścią mieszaną
      4. Automatyczna konkatenacja węzłów XText
    7. Dokumenty i deklaracje
      1. XDocument
      2. Deklaracje XML
        1. Zapisywanie deklaracji w łańcuchu
    8. Nazwy i przestrzenie nazw
      1. Przestrzenie nazw w XML
        1. Przedrostki
        2. Atrybuty
      2. Definiowanie przestrzeni nazw w X-DOM
      3. X-DOM i domyślne przestrzenie nazw
      4. Przedrostki
    9. Adnotacje
    10. Projekcja do X-DOM
      1. Eliminowanie pustych elementów
      2. Strumieniowanie projekcji
  12. 11 Inne technologie XML i JSON
    1. Klasa XmlReader
      1. Wczytywanie węzłów
      2. Odczytywanie elementów
        1. Elementy opcjonalne
        2. Losowa kolejność elementów
        3. Elementy puste
        4. Inne metody z rodziny ReadXXX
      3. Wczytywanie atrybutów
        1. Węzły atrybutów
      4. Przestrzenie nazw i przedrostki
    2. Klasa XmlWriter
      1. Wpisywanie atrybutów
      2. Wpisywanie innych typów węzłów
      3. Przestrzenie nazw i przedrostki
    3. Typowe zastosowania klas XmlReader i XmlWriter
      1. Praca z danymi hierarchicznymi
      2. Klasy XmlReader i XmlWriter z X-DOM
        1. Wykorzystanie klasy XmlReader w połączeniu z XElement
        2. Użycie klasy XmlWriter z klasą XElement
    4. Praca z formatem JSON
      1. Struktura Utf8JsonReader
        1. JsonReaderOptions
      2. Struktura Utf8JsonWriter
      3. Klasa JsonDocument
        1. Odczyt prostych wartości
        2. Odczyt tablic JSON
        3. Odczyt obiektów JSON
        4. Klasa JsonDocument i LINQ
        5. Modyfikacje danych JSON
  13. 11a XSD i XSLT
    1. XSD i sprawdzanie poprawności schematów
      1. Sprawdzanie poprawności dokumentu wg schematu
        1. Sprawdzanie poprawności przy użyciu obiektu klasy XmlReader
        2. Sprawdzanie poprawności drzewa X-DOM
    2. XSLT
  14. 12 Zwalnianie zasobów i mechanizm usuwania nieużytków
    1. IDisposable, Dispose i Close
      1. Standardowa semantyka zwalniania zasobów
        1. Metody Close() i Stop()
      2. Kiedy należy zwalniać zasoby?
      3. Usuwanie elementów składowych za pomocą metody Dispose()
      4. Anonimowe usuwanie
    2. Automatyczne usuwanie nieużytków
      1. Element główny
      2. Mechanizm usuwania nieużytków i WinRT
    3. Finalizatory
      1. Wywołanie metody Dispose() z poziomu finalizatora
      2. Wskrzeszenie
        1. GC.ReRegisterForFinalize()
    4. Jak działa mechanizm usuwania nieużytków?
      1. Techniki optymalizacji
        1. Kolekcja pokoleniowa
        2. Sterta ogromnych obiektów
        3. Usuwanie nieużytków w trybie stacji roboczej i serwera
        4. Usuwanie nieużytków w tle
        5. Powiadomienia mechanizmu usuwania nieużytków
      2. Wymuszenie działania mechanizmu usuwania nieużytków
      3. Dostrajanie mechanizmu usuwania nieużytków w czasie działania programu
      4. Nacisk na pamięć
      5. Pule tablic
    5. Wycieki pamięci zarządzanej
      1. Zegar
      2. Diagnozowanie wycieku pamięci
    6. Słabe odwołania
      1. Słabe odwołania i buforowanie
      2. Słabe odwołania i zdarzenia
  15. 13 Diagnostyka
    1. Kompilacja warunkowa
      1. Kompilacja warunkowa kontra opcje zmiennej statycznej
      2. Atrybut [Conditional]
        1. Alternatywy dla atrybutu [Conditional]
    2. Debugowanie i klasy monitorowania
      1. Niepowodzenie i asercja
      2. Klasa TraceListener
      3. Czyszczenie i zamykanie egzemplarzy nasłuchujących
    3. Integracja z debuggerem
      1. Dołączanie debuggera i używanie punktów kontrolnych
      2. Atrybuty debuggera
    4. Procesy i wątki procesów
      1. Analiza działających procesów
      2. Analiza wątków w procesie
    5. Klasy StackTrace i StackFrame
    6. Dziennik zdarzeń Windows
      1. Zapis danych w dzienniku zdarzeń
      2. Odczyt dziennika zdarzeń
      3. Monitorowanie dziennika zdarzeń
    7. Liczniki wydajności
      1. Sprawdzenie dostępnych liczników
      2. Odczyt danych licznika wydajności
      3. Utworzenie liczników i zapis danych dotyczących wydajności
    8. Klasa Stopwatch
    9. Międzyplatformowe narzędzia diagnostyczne
      1. dotnet-counters
      2. dotnet-trace
        1. Śledzenie zdarzeń niestandardowych
      3. dotnet-dump
  16. 14 Współbieżność i asynchroniczność
    1. Wprowadzenie
    2. Wątki
      1. Tworzenie wątku
      2. Dołączanie i usypianie
      3. Blokowanie
        1. Powiązanie z wejściem-wyjściem kontra powiązanie z obliczeniami
        2. Blokowanie kontra spinning
      4. Stan lokalny kontra współdzielony
      5. Nakładanie blokad i zapewnianie bezpieczeństwa wątków
      6. Przekazywanie danych do wątku
        1. Wyrażenia lambda i przechwytywane zmienne
      7. Obsługa wyjątków
        1. Centralna procedura obsługi wyjątków
      8. Wątki aktywne kontra działające w tle
      9. Priorytet wątku
      10. Sygnalizowanie
      11. Wątki w bogatych aplikacjach klientów
      12. Kontekst synchronizacji
      13. Pula wątków
        1. Wejście do puli wątków
        2. Higiena w puli wątków
    3. Zadania
      1. Uruchomienie zadania
        1. Wait()
        2. Długo wykonywane zadania
      2. Wartość zwrotna
      3. Wyjątki
        1. Wyjątki i autonomiczne zadania
      4. Kontynuacje
      5. Klasa TaskCompletionSource
      6. Task.Delay()
    4. Reguły asynchroniczności
      1. Operacje synchroniczne kontra asynchroniczne
      2. Czym jest programowanie asynchroniczne?
      3. Programowanie asynchroniczne i kontynuacje
      4. Dlaczego obsługa ze strony języka jest ważna?
    5. Funkcje asynchroniczne w języku C#
      1. Oczekiwanie
        1. Przechwycenie stanu lokalnego
        2. Oczekiwanie na interfejs użytkownika
        3. Porównanie do współbieżności gruboziarnistej
      2. Tworzenie funkcji asynchronicznych
        1. Zwrot egzemplarza Task<TResult>
        2. Drzewo wywołań asynchronicznych
        3. Równoległość
      3. Asynchroniczne wyrażenia lambda
      4. Strumienie asynchroniczne (C# 8)
        1. Wysyłanie zapytań do obiektów typu IAsyncEnumerable<T>
        2. IAsyncEnumerable<T> w ASP.Net Core
      5. Metody asynchroniczne w WinRT
      6. Konteksty asynchroniczności i synchronizacji
        1. Przekazywanie wyjątku
        2. Metody OperationStarted() i OperationCompleted()
      7. Optymalizacje
        1. Ukończenie synchroniczne
        2. ValueTask<T>
        3. Na co należy uważać podczas używania struktury ValueTask<T>
        4. Uniknięcie nadmiernego przekazywania
    6. Wzorce asynchroniczności
      1. Przerwanie operacji
      2. Informacje o postępie
        1. IProgress<T> i Progress<T>
      3. Wzorzec asynchroniczny oparty na zadaniu
      4. Łącznik zadań
        1. WhenAny()
        2. WhenAll()
        3. Własne łączniki zadań
      5. Blokowanie asynchroniczne
    7. Przestarzałe wzorce
      1. Model programowania asynchronicznego
      2. Wzorzec asynchroniczności opartej na zdarzeniach
      3. BackgroundWorker
  17. 15 Strumienie i wejście-wyjście
    1. Architektura strumienia
    2. Użycie strumieni
      1. Odczyt i zapis
      2. Wyszukiwanie
      3. Zamknięcie i opróżnienie
      4. Limit czasu
      5. Zapewnienie bezpieczeństwa wątków
      6. Magazyn danych strumieni
      7. FileStream
        1. Utworzenie FileStream
        2. Określenie nazwy pliku
        3. Określenie trybu pliku
        4. Zaawansowane funkcje klasy FileStream
      8. MemoryStream
      9. PipeStream
        1. Potoki nazwane
        2. Potoki anonimowe
      10. BufferedStream
    3. Adapter strumienia
      1. Adaptery tekstowe
        1. StreamReader i StreamWriter
        2. Kodowanie znaków
        3. StringReader i StringWriter
      2. Adaptery binarne
      3. Zamykanie i pozbywanie się adapterów strumieni
    4. Kompresja strumienia
      1. Kompresja w pamięci
      2. Kompresja plików gzip w Uniksie
    5. Praca z plikami w postaci archiwum ZIP
    6. Operacje na plikach i katalogach
      1. Klasa File
        1. Atrybuty kompresji i szyfrowania
        2. Bezpieczeństwo pliku
      2. Klasa Directory
      3. Klasy FileInfo i DirectoryInfo
      4. Klasa Path
      5. Katalogi specjalne
      6. Sprawdzanie informacji o woluminie
      7. Przechwytywanie zdarzeń systemu plików
    7. Plikowe operacje wejścia-wyjścia w UWP
      1. Praca z katalogami
      2. Praca z plikami
      3. Uzyskiwanie dostępu do katalogów i plików
        1. Magazyn prywatny
        2. Folder aplikacji
        3. Klasa KnownFolders
        4. Urządzenia wymienne
        5. Folder pobranych plików
        6. Pliki i foldery wybierane przez użytkownika
    8. Bezpieczeństwo systemu operacyjnego
      1. Działanie pod kontrolą standardowego konta użytkownika
      2. Przydzielanie uprawnień administratora i wirtualizacja
    9. Mapowanie plików w pamięci
      1. Mapowanie plików w pamięci i losowe plikowe operacje wejścia-wyjścia
      2. Mapowanie plików w pamięci i pamięć współdzielona (Windows)
      3. Międzyplatformowa pamięć współdzielona procesów
      4. Praca z akcesorami widoku
  18. 16 Sieć
    1. Architektura sieci
    2. Adresy i porty
    3. Adresy URI
    4. Klasy po stronie klienta
      1. Klasa WebClient
      2. Klasy WebRequest i WebResponse
      3. Klasa HttpClient
        1. GetAsync() i komunikaty odpowiedzi
        2. Metoda SendAsync() i komunikaty żądania
        3. Przekazanie danych i HttpContent
        4. Klasa HttpMessageHandler
        5. Testy jednostkowe i atrapy
        6. Łączenie procedur obsługi za pomocą DelegatingHandler
      4. Proxy
      5. Uwierzytelnienie
        1. CredentialCache
        2. Uwierzytelnienie za pomocą nagłówków i HttpClient
      6. Obsługa wyjątków
    5. Praca z HTTP
      1. Nagłówki
      2. Ciąg tekstowy zapytania
      3. Przekazanie danych formularza
      4. Mechanizm cookies
    6. Tworzenie serwera HTTP
    7. Użycie FTP
    8. Użycie DNS
    9. Wysyłanie poczty elektronicznej za pomocą SmtpClient
    10. Użycie TCP
      1. Współbieżność w TCP
    11. Otrzymywanie poczty elektronicznej POP3 za pomocą TCP
    12. TCP w UWP
  19. 17 Serializacja
    1. Koncepcje serializacji
      1. Mechanizmy serializacji
        1. Dlaczego istnieją cztery mechanizmy?
        2. XmlSerializer
        3. JsonSerializer
        4. Serializacja kontraktu danych
        5. Serializator binarny
        6. IXmlSerializable
      2. Formatery
      3. Serializacja jawna kontra serializacja niejawna
    2. Serializator XML
      1. Podstawy serializacji na podstawie atrybutów
        1. Atrybuty, nazwy i przestrzenie nazw
        2. Kolejność elementów XML
      2. Podklasy i obiekty potomne
        1. Podklasy typu głównego
        2. Serializacja obiektów potomnych
        3. Podklasy obiektów potomnych
      3. Serializacja kolekcji
        1. Praca z elementami podklas kolekcji
      4. Interfejs IXmlSerializable
    3. Serializator JSON
      1. Podstawy
      2. Serializacja obiektów potomnych
      3. Serializacja kolekcji
      4. Kontrolowanie serializacji za pomocą atrybutów
        1. JsonIgnoreAttribute
        2. JsonPropertyNameAttribute
        3. JsonExtensionDataAttribute
        4. JsonConverterAttribute
      5. Dostosowywanie parametrów konwersji danych
      6. Opcje serializacji JSON
        1. WriteIndented
        2. AllowTrailingCommas
        3. ReadCommentHandling
        4. PropertyNameCaseInsensitive
        5. PropertyNamingPolicy
        6. DictionaryKeyPolicy
        7. Koder
        8. IgnoreNullValues
        9. IgnoreReadOnlyProperties
    4. Serializator binarny
      1. Podstawy
    5. Atrybuty serializacji binarnej
      1. Atrybut [NonSerialized]
      2. Atrybut [OnDeserializing]
      3. Atrybut [OnDeserialized]
      4. Atrybuty [OnSerializing] i [OnSerialized]
      5. Atrybut [OptionalField] i wersjonowanie
    6. Serializacja binarna przy użyciu interfejsu ISerializable
      1. Tworzenie podklas klasy pozwalającej na serializację
  20. 17a Serializacja kontraktu danych
    1. Serializacja kontraktu danych
      1. Wybór serializatora
      2. Użycie serializatorów
        1. Określenie formatera binarnego
      3. Serializacja podklas
      4. Odwołania do obiektu
        1. Zachowanie odwołań do obiektu
      5. Tolerancja wersji
        1. Wymagane elementy składowe
      6. Kolejność elementów składowych
      7. Wartości null i wartości puste
    2. Kontrakty danych i kolekcje
      1. Elementy podklasy kolekcji
      2. Dostosowanie kolekcji i nazw elementów do własnych potrzeb
    3. Rozszerzenie kontraktu danych
      1. Zaczepy serializacji i deserializacji
      2. Współpraca z atrybutem [Serializable]
      3. Interoperacyjność z IXmlSerializable
  21. 18 Zestawy
    1. Co znajduje się w zestawie?
      1. Manifest zestawu
        1. Określanie atrybutów zestawu
      2. Manifest aplikacji (Windows)
        1. Wdrożenie manifestu aplikacji .NET
      3. Moduły
      4. Klasa Assembly
    2. Silne nazwy i podpisywanie zestawu
      1. Jak nadać zestawowi silną nazwę?
    3. Nazwy zestawów
      1. W pełni kwalifikowana nazwa
      2. Klasa AssemblyName
      3. Wersja informacyjna zestawu i wersja pliku
    4. Technologia Authenticode
      1. Jak podpisać zestaw z użyciem Authenticode?
        1. Uzyskanie i instalacja certyfikatu
        2. Podpisywanie za pomocą signtool.exe
        3. Znakowanie czasowe
        4. Sprawdzenie, czy program został podpisany
    5. Zasoby i zestawy satelickie
      1. Bezpośrednie osadzanie zasobów
      2. Pliki .resources
      3. Pliki .resx
        1. Odczyt plików .resources
        2. Utworzenie zasobu pack URI w Visual Studio
      4. Zestawy satelickie
        1. Utworzenie zestawu satelickiego
        2. Testowanie zestawów satelickich
        3. Obsługa oferowana przez narzędzia Visual Studio
      5. Kultury i subkultury
    6. Ładowanie, znajdowanie i izolowanie zestawów
      1. Konteksty ładowania zestawów
        1. Ładowanie zestawów
        2. Metoda LoadFromAssemblyName
        3. Znajdowanie zestawów
      2. Domyślny kontekst ALC
        1. Domyślne sondowanie
      3. Bieżący kontekst ALC
      4. Metoda Assembly.Load i kontekstowe ALC
        1. Metoda EnterContextualReflection
      5. Ładowanie i znajdowanie bibliotek niezarządzanych
      6. Klasa AssemblyDependencyResolver
      7. Usuwanie załadowanych kontekstów ALC
      8. Stare metody ładujące
        1. Metoda LoadFrom
        2. Metody LoadFile i Load(byte[])
      9. Tworzenie systemu wtyczek
        1. Plugin.Common
        2. Capitalizer (wtyczka)
        3. Plugin.Host
        4. Dodawanie zależności
  22. 19 Refleksja i metadane
    1. Refleksja i aktywacja typów
      1. Pobranie typu
        1. TypeInfo
        2. Pobieranie typów tablicowych
        3. Pobieranie typów osadzonych
      2. Nazwy typów
        1. Nazwy typów osadzonych
        2. Nazwy typów generycznych
        3. Nazwy typów tablic i wskaźników
        4. Nazwy typów parametrów ref i out
      3. Typy bazowe i interfejsy
      4. Tworzenie instancji typów
      5. Typy generyczne
    2. Refleksja i wywoływanie składowych
      1. Typy składowych
      2. Składowe C# i składowe CLR
      3. Składowe typów generycznych
      4. Dynamiczne wywoływanie składowej
      5. Parametry metod
        1. Radzenie sobie z parametrami ref i out
        2. Pobieranie i wywoływanie metod generycznych
      6. Wykorzystanie delegatów do poprawy wydajności
      7. Dostęp do składowych niepublicznych
        1. Wyliczenia BindingFlags
      8. Metody generyczne
      9. Anonimowe wywoływanie składowych interfejsu generycznego
    3. Refleksja dla zestawów
      1. Moduły
    4. Praca z atrybutami
      1. Podstawy atrybutów
      2. Atrybut AttributeUsage
      3. Definiowanie własnych atrybutów
      4. Pobieranie atrybutów w czasie działania
    5. Generowanie dynamicznego kodu
      1. Generowanie IL za pomocą DynamicMethod
      2. Stos ewaluacji
      3. Parsowanie argumentów dla metody dynamicznej
      4. Generowanie zmiennych lokalnych
      5. Rozgałęzianie
      6. Tworzenie instancji obiektów i wywoływanie metod instancji
      7. Obsługiwanie wyjątków
    6. Emitowanie zestawów i typów
      1. Model obiektowy Reflection.Emit
    7. Emitowanie składowych typów
      1. Emitowanie metod
        1. Generowanie metod instancji
        2. Przysłanianie metod
        3. HideBySig
      2. Emitowanie pól i właściwości
      3. Emitowanie konstruktorów
        1. Wywoływanie konstruktorów bazowych
      4. Przypisywanie atrybutów
    8. Emitowanie generycznych typów i klas
      1. Definiowanie metod generycznych
      2. Definiowanie typów generycznych
    9. Kłopotliwe cele emisji
      1. Niestworzone zamknięte typy generyczne
      2. Zależności cykliczne
    10. Parsowanie IL
      1. Tworzenie deasemblera
  23. 20 Programowanie dynamiczne
    1. Dynamiczny system wykonawczy języka
    2. Unifikacja typów liczbowych
    3. Dynamiczne wybieranie przeciążonych składowych
      1. Upraszczanie wzorca Wizytator
        1. Inne rozwiązania
      2. Anonimowe wywoływanie składowych typu generycznego
    4. Implementowanie obiektów dynamicznych
      1. Klasa DynamicObject
      2. Klasa ExpandoObject
    5. Współpraca z językami dynamicznymi
      1. Przekazywanie stanu między C# a skryptem
  24. 21 Kryptografia
    1. Informacje ogólne
    2. Windows Data Protection
    3. Obliczanie skrótów
      1. Algorytmy obliczania skrótów na platformie .NET Core
      2. Obliczanie skrótów haseł
    4. Szyfrowanie symetryczne
      1. Szyfrowanie w pamięci
      2. Tworzenie łańcuchów strumieni szyfrowania
      3. Likwidacja obiektów szyfrowania
      4. Zarządzanie kluczami
    5. Szyfrowanie kluczem publicznym i podpisywanie
      1. Klasa RSA
      2. Podpisy cyfrowe
  25. 22 Zaawansowane techniki wielowątkowości
    1. Przegląd technik synchronizacji
    2. Blokowanie wykluczające
      1. Instrukcja lock
      2. Metody Monitor.Enter i Monitor.Exit
        1. Przeciążone wersje z parametrem lockTaken
        2. Metoda TryEnter
      3. Wybór obiektu synchronizacji
      4. Kiedy stosować blokadę
      5. Blokowanie i atomowość
      6. Zagnieżdżanie blokad
      7. Zakleszczenia
      8. Wydajność
      9. Klasa Mutex
    3. Blokady i bezpieczeństwo ze względu na wątki
      1. Bezpieczeństwo wątkowe i typy platformy .NET Framework
        1. Blokowanie wokół obiektów bezpiecznych wątkowo
        2. Składowe statyczne
        3. Bezpieczeństwo wątkowe przy odczycie
      2. Bezpieczeństwo wątkowe w serwerach aplikacji
      3. Obiekty niezmienne
    4. Blokowanie bez wykluczania
      1. Semafory
        1. Semafory i blokady asynchroniczne
        2. Tworzenie metody rozszerzającej EnterAsync
      2. Blokady odczytu i zapisu
        1. Blokady z możliwością uaktualnienia
        2. Rekurencja blokowania
    5. Sygnalizacja przy użyciu uchwytów zdarzeń oczekiwania
      1. Klasa AutoResetEvent
        1. Sygnały dwustronne
      2. Klasa ManualResetEvent
      3. Klasa CountdownEvent
      4. Tworzenie międzyprocesowego uchwytu EventWaitHandle
      5. Uchwyty oczekiwania i kontynuacje
      6. Metody WaitAny, WaitAll i SignalAndWait
        1. Co zamiast metod WaitAll i SignalAndWait?
    6. Klasa Barrier
    7. Leniwa inicjalizacja
      1. Klasa Lazy<T>
      2. Klasa LazyInitializer
    8. Pamięć lokalna wątku
      1. Atrybut [ThreadStatic]
      2. Klasa ThreadLocal<T>
        1. Klasa ThreadLocal<T> i pola egzemplarzowe
      3. Metody GetData i SetData
      4. AsyncLocal<T>
    9. Zegary
      1. Zegary wielowątkowe
      2. Zegary jednowątkowe
  26. 23 Programowanie równoległe
    1. Dlaczego PFX?
      1. Pojęcia dotyczące bibliotek PFX
      2. Komponenty bibliotek PFX
      3. Kiedy używać biblioteki PFX
    2. PLINQ
      1. Balistyka wykonywania równoległego
      2. PLINQ i kolejność elementów
      3. Ograniczenia PLINQ
      4. Przykład — równoległy moduł sprawdzania pisowni
        1. Klasa ThreadLocal<T>
      5. Czystość funkcyjna
      6. Ustawianie stopnia zrównoleglenia
        1. Zmienianie stopnia zrównoleglenia
      7. Anulowanie
      8. Optymalizacja PLINQ
        1. Optymalizacja na wyjściu
        2. Optymalizacja od strony wejściowej
        3. Optymalizacja własnych agregacji
    3. Klasa Parallel
      1. Metoda Parallel.Invoke
      2. Metody Parallel.For i Parallel.ForEach
        1. Pętle zewnętrzne a pętle wewnętrzne
        2. Indeksowana metoda Parallel.ForEach
        3. ParallelLoopState — wychodzenie z pętli przed jej zakończeniem
        4. Optymalizacja z wartościami lokalnymi
    4. Równoległe wykonywanie zadań
      1. Tworzenie i uruchamianie zadań
        1. Określanie obiektu stanu
        2. Wyliczenie TaskCreationOptions
        3. Zadania potomne
      2. Czekanie na kilka zadań
      3. Anulowanie zadań
      4. Kontynuacje
        1. Kontynuacje i Task<TResult>
        2. Kontynuacje i wyjątki
        3. Kontynuacje i zadania potomne
        4. Kontynuacje warunkowe
        5. Kontynuacje z wieloma przodkami
        6. Wiele kontynuacji na jednym przodku
      5. Planowanie zadań
      6. Klasa TaskFactory
        1. Tworzenie własnych fabryk zadań
    5. Klasa AggregateException
      1. Metody Flatten i Handle
        1. Metoda Flatten
        2. Metoda Handle
    6. Kolekcje współbieżne
      1. Interfejs IProducerConsumerCollection<T>
      2. ConcurrentBag<T>
    7. Klasa BlockingCollection<T>
      1. Pisanie kolejki typu producent-konsument
        1. Sposób wykorzystania zadań
  27. 24 Struktury Span<T> i Memory<T>
    1. Struktura Span i plasterkowanie
      1. Metody CopyTo i TryCopyTo
      2. Praca z tekstem
    2. Struktura Memory<T>
    3. Enumeratory działające tylko do przodu
    4. Praca z pamięcią alokowaną na stosie i niezarządzaną
  28. 25 Współdziałanie macierzyste i poprzez COM
    1. Odwołania do natywnych bibliotek DLL
    2. Szeregowanie
      1. Szeregowanie typów wspólnych
      2. Szeregowanie klas i struktur
      3. Szeregowanie In i Out
    3. Wywołania zwrotne z kodu niezarządzanego
    4. Symulowanie unii C
    5. Pamięć współdzielona
    6. Mapowanie struktury na pamięć niezarządzaną
      1. fixed i fixed {...}
    7. Współpraca COM
      1. Przeznaczenie COM
      2. Podstawy systemu typów COM
        1. IUnknown i IDispatch
    8. Wywołanie komponentu COM z C#
      1. Parametry opcjonalne i argumenty nazwane
      2. Niejawne parametry ref
      3. Indeksatory
      4. Wiązanie dynamiczne
    9. Osadzanie typów współpracujących
      1. Równoważność typów
    10. Udostępnianie obiektów C# COM
      1. COM bez użycia rejestru
  29. 26 Wyrażenia regularne
    1. Podstawy wyrażeń regularnych
      1. Kompilowane wyrażenia regularne
      2. Typ wyliczeniowy RegexOptions
      3. Znaki sterujące
      4. Zestawy znaków
    2. Kwantyfikatory
      1. Kwantyfikator zachłanny kontra leniwy
    3. Asercje o zerowej wielkości
      1. Przewidywanie i przewidywanie wsteczne
      2. Kotwice
      3. Granica słowa
    4. Grupy
      1. Nazwane grupy
    5. Zastępowanie i dzielenie tekstu
      1. Delegat MatchEvaluator
      2. Podział tekstu
    6. Receptury wyrażeń regularnych
      1. Przepisy
        1. Dopasowanie numeru ubezpieczenia społecznego i numeru telefonu
        2. Wyodrębnienie par nazwa=wartość (po jednej dla każdego wiersza)
        3. Weryfikacja silnego hasła
        4. Wiersze o długości co najmniej 80 znaków
        5. Przetwarzanie daty i godziny (N/N/N H:M:S AM/PM)
        6. Dopasowanie liczb rzymskich
        7. Usunięcie powtórzonych słów
        8. Licznik słów
        9. Dopasowanie wartości GUID
        10. Przetwarzanie znacznika XML/HTML
        11. Podział słowa w stylu camelCase
        12. Pobranie prawidłowej nazwy pliku
        13. Kodowanie znaków Unicode dla HTML
        14. Dekodowanie znaków w ciągu tekstowym zapytania HTTP
        15. Przetwarzanie wyrażeń szukanych w Google pobranych z dziennika zdarzeń serwera
    7. Leksykon języka wyrażeń regularnych
  30. 27 Kompilator Roslyn
    1. Architektura Roslyn
      1. Przestrzenie robocze
      2. Skrypty
    2. Drzewa składni
      1. Struktura SyntaxTree
        1. Najczęściej używane właściwości i metody
      2. Uzyskanie drzewa składni
      3. Poruszanie się po drzewie i jego przeszukiwanie
        1. Poruszanie się po elementach potomnych
        2. Poruszanie się po elementach nadrzędnych
        3. Wyszukiwanie elementu potomnego na podstawie jego położenia
        4. Klasa CSharpSyntaxWalker
      4. Drobiazgi
        1. Dyrektywy preprocesora
        2. Strukturalne drobiazgi
      5. Transformacja drzewa składni
        1. Obsługa zmian kodu źródłowego
        2. Tworzenie nowych węzłów, tokenów i drobiazgów za pomocą SyntaxFactory
        3. Klasa CSharpSyntaxRewriter
    3. Kompilacja i model semantyczny
      1. Utworzenie kompilacji
        1. Diagnostyka
      2. Emisja zestawu
      3. Sprawdzanie modelu semantycznego
        1. Symbole
        2. Klasa SymbolInfo
        3. Dostępność symbolu
        4. Zadeklarowane symbole
        5. Klasa TypeInfo
        6. Wyszukiwanie symboli
      4. Przykład zmiany nazwy symbolu
      5. O autorach
      6. Kolofon

Product information

  • Title: C# 8.0 w pigułce
  • Author(s): Eric Johannsen Joseph Albahari
  • Release date: February 2021
  • Publisher(s): Helion
  • ISBN: 9788328372818