E-book details

C# 8.0. Programowanie. Tworzenie aplikacji Windows, internetowych oraz biurowych

C# 8.0. Programowanie. Tworzenie aplikacji Windows, internetowych oraz biurowych

Ian Griffiths

Ebook

Język C# wciąż cechuje prostota, przy czym jego możliwości rosną z każdą wersją. Od początku jest rozwijany z konsekwencją, a każda nowa funkcjonalność idealnie integruje się z resztą języka. W efekcie C# jest dojrzały, nowoczesny, wszechstronny i bezpieczny. Stanowi integralną część platformy Microsoft .NET Framework. Profesjonalni programiści, którzy dbają o wysoką jakość tworzonego kodu, uważają C# i .NET za swoje ulubione narzędzie pracy. Wersja 8.0 tego języka sprawia, że programowanie staje się jeszcze bardziej efektywne i satysfakcjonujące. Pełne wykorzystanie tych imponujących możliwości wymaga jednak mistrzowskiego opanowania subtelności poszczególnych narzędzi i niuansów samego języka.

Ta książka została napisana z myślą o doświadczonych programistach. Podstawowe zagadnienia, takie jak klasy, polimorfizm i kolekcje, znalazły się w kilku pierwszych rozdziałach, jednak zrozumienie treści całej publikacji wymaga umiejętności technicznych. Została poświęcona ważnym koncepcjom C# i tajnikom tego języka, które rzadko kiedy są opisywane w literaturze. Dokładnie omówiono tu typy ogólne, LINQ oraz techniki programowania asynchronicznego. Przedstawiono najnowsze możliwości platformy .NET Core i języka C# 8.0, takie jak strumienie asynchroniczne, referencje akceptujące wartości puste, dopasowywanie wzorców, domyślne implementacje interfejsów, zakresy, a także nową składnię indeksowania oraz zmiany w narzędziach platformy .NET. Liczne rozbudowane przykłady stanowią świetne uzupełnienie prezentowanych treści.

W tej książce między innymi:

  • możliwości języka C#: klasy, typy niestandardowe, kolekcje, obsługa błędów
  • optymalizacja kodu pod kątem wykorzystania pamięci
  • praca na strumieniach danych za pomocą technologii LINQ
  • platforma .NET i programowanie wielowątkowe
  • programowanie asynchroniczne a skalowalność aplikacji

Dla profesjonalistów najlepszy jest C#!

 

Wstęp 15

 

1. Prezentacja C# 19

  • Dlaczego C#? 20
  • Najważniejsze cechy C# 21
    • Kod zarządzany i CLR 22
    • Ogólność jest preferowana względem specjalizacji 24
  • Standardy oraz implementacje języka C# 25
    • Kilka .NET-ów (chwilowo) 26
    • Użycie .NET Standard w celu tworzenia projektów działających w różnych wersjach .NET 28
  • Visual Studio oraz Visual Studio Code 30
  • Anatomia prostego programu 33
    • Dodawanie projektu do istniejącego rozwiązania 36
    • Odwołania do innych projektów 37
    • Odwołania do bibliotek zewnętrznych 37
    • Pisanie testu jednostkowego 40
    • Przestrzenie nazw 43
    • Klasy 47
    • Punkt wejścia do programu 48
    • Testy jednostkowe 49
  • Podsumowanie 50

2. Podstawy stosowania języka C# 51

  • Zmienne lokalne 52
    • Zakres 57
  • Instrukcje i wyrażenia 61
    • Instrukcje 61
    • Wyrażenia 63
  • Komentarze i białe znaki 68
  • Dyrektywy preprocesora 70
    • Symbole kompilacji 70
    • Dyrektywy #error oraz #warning 72
    • Dyrektywa #line 72
    • Dyrektywa #pragma 73
    • Dyrektywa #nullable 74
    • Dyrektywy #region i #endregion 74
  • Podstawowe typy danych 75
    • Typy liczbowe 75
    • Wartości logiczne 86
    • Znaki i łańcuchy znaków 86
    • Krotki 92
    • Dynamic 95
    • Object 96
  • Operatory 96
  • Sterowanie przepływem 102
    • Decyzje logiczne przy użyciu instrukcji if 102
    • Wielokrotny wybór przy użyciu instrukcji switch 104
    • Pętle: while oraz do 106
    • Pętle znane z języka C 107
    • Przeglądanie kolekcji przy użyciu pętli foreach 109
  • Wzorce 110
    • Uzyskiwanie większej dokładności dzięki użyciu when 114
    • Wzorce w wyrażeniach 115
  • Podsumowanie 117

3. Typy 119

  • Klasy 119
    • Składowe statyczne 123
    • Klasy statyczne 124
    • Typy referencyjne 125
  • Struktury 136
    • Kiedy tworzyć typy wartościowe? 140
    • Gwarantowanie niezmienności 145
  • Składowe 147
    • Pola 147
    • Konstruktory 149
    • Dekonstruktory 159
    • Metody 160
    • Właściwości 177
    • Indeksatory 183
    • Składnia inicjalizatorów 185
    • Operatory 186
    • Zdarzenia 189
    • Typy zagnieżdżone 189
  • Interfejsy 190
    • Domyślne implementacje metod w interfejsach 192
  • Typy wyliczeniowe 194
  • Inne typy 197
    • Typy anonimowe 198
  • Typy i metody częściowe 200
  • Podsumowanie 202

4. Typy ogólne 203

  • Typy ogólne 204
  • Ograniczenia 206
    • Ograniczenia typu 207
    • Ograniczenia typu referencyjnego 209
    • Ograniczenia typu wartościowego 212
    • Wszystkie typy w hierarchii wartościowe dzięki ograniczeniu unmanaged 212
    • Ograniczenie notnull 213
    • Inne specjalne ograniczenia typów 213
    • Stosowanie wielu ograniczeń 213
  • Wartości przypominające zero 214
  • Metody ogólne 215
    • Wnioskowanie typu 216
  • Typy ogólne i krotki 217
  • Tajniki typów ogólnych 218
  • Podsumowanie 220

5. Kolekcje 221

  • Tablice 221
    • Inicjalizacja tablic 224
    • Przeszukiwanie i sortowanie 226
    • Tablice wielowymiarowe 233
    • Kopiowanie i zmiana wielkości 236
  • List 237
  • Interfejsy list i sekwencji 240
  • Implementacja list i sekwencji 246
    • Implementacja IEnumerable przy użyciu iteratorów 246
    • Klasa Collection 251
    • Klasa ReadOnlyCollection 252
  • Odwołania do elementów z użyciem indeksów i zakresów 253
    • System.Index 253
    • System.Range 256
    • Obsługa indeksów i zakresów we własnych typach danych 258
  • Słowniki 260
    • Słowniki posortowane 263
  • Zbiory 265
  • Kolejki i stosy 266
  • Listy połączone 267
  • Kolekcje współbieżne 268
  • Kolekcje niezmienne 269
    • Klasa ImutableArray 271
  • Podsumowanie 272

6. Dziedziczenie 273

  • Dziedziczenie i konwersje 274
  • Dziedziczenie interfejsów 278
  • Typy ogólne 279
    • Kowariancja i kontrawariancja 280
  • System.Object 285
    • Wszechobecne metody typu System.Object 285
  • Dostępność i dziedziczenie 287
  • Metody wirtualne 288
    • Metody abstrakcyjne 290
    • Dziedziczenie i wersje bibliotek 291
  • Metody i klasy ostateczne 297
  • Dostęp do składowych klas bazowych 299
  • Dziedziczenie i tworzenie obiektów 299
  • Specjalne typy bazowe 303
  • Podsumowanie 305

7. Cykl życia obiektów 307

  • Mechanizm odzyskiwania pamięci 308
    • Określanie osiągalności danych 310
    • Przypadkowe problemy mechanizmu odzyskiwania pamięci 312
    • Słabe referencje 315
    • Odzyskiwanie pamięci 318
    • Tryby odzyskiwania pamięci 324
    • Tymczasowe zawieszanie odzyskiwania pamięci 328
    • Przypadkowe utrudnianie scalania 329
    • Wymuszanie odzyskiwania pamięci 332
  • Destruktory i finalizacja 333
  • Interfejs IDisposable 337
    • Zwalnianie opcjonalne 343
  • Pakowanie 344
    • Pakowanie danych typu Nullable 349
  • Podsumowanie 350

8. Wyjątki 351

  • Źródła wyjątków 353
    • Wyjątki zgłaszane przez API 354
    • Błędy wykrywane przez środowisko uruchomieniowe 356
  • Obsługa wyjątków 357
    • Obiekty wyjątków 358
    • Wiele bloków catch 360
    • Filtry wyjątków 361
    • Zagnieżdżone bloki try 362
    • Bloki finally 364
  • Zgłaszanie wyjątków 365
    • Powtórne zgłaszanie wyjątków 366
    • Sposób na szybkie zakończenie aplikacji 370
  • Typy wyjątków 370
    • Wyjątki niestandardowe 373
  • Wyjątki nieobsługiwane 375
  • Podsumowanie 377

9. Delegaty, wyrażenia lambda i zdarzenia 379

  • Typy delegatów 380
    • Tworzenie delegatów 381
    • MulticastDelegate - delegaty zbiorowe 384
    • Wywoływanie delegatów 386
    • Popularne typy delegatów 388
    • Zgodność typów 390
    • Więcej niż składnia 393
  • Funkcje anonimowe 395
    • Przechwytywane zmienne 398
    • Wyrażenia lambda oraz drzewa wyrażeń 405
  • Zdarzenia 407
    • Standardowy wzorzec delegatów zdarzeń 409
    • Niestandardowe metody dodające i usuwające zdarzenia 410
    • Zdarzenia i mechanizm odzyskiwania pamięci 413
    • Zdarzenia a delegaty 415
  • Delegaty a interfejsy 416
  • Podsumowanie 416

10. LINQ 419

  • Wyrażenia zapytań 420
    • Jak są rozwijane wyrażenia zapytań 423
    • Obsługa wyrażeń zapytań 425
  • Przetwarzanie opóźnione 429
  • LINQ, typy ogólne oraz interfejs IQueryable 432
  • Standardowe operatory LINQ 434
    • Filtrowanie 436
    • Selekcja 438
    • Operator SelectMany 441
    • Określanie porządku 444
    • Testy zawierania 446
    • Konkretne elementy i podzakresy 448
    • Agregacja 452
    • Operacje na zbiorach 457
    • Operatory działające na całych sekwencjach z zachowaniem kolejności 458
    • Grupowanie 459
    • Złączenia 464
    • Konwersje 467
  • Generowanie sekwencji 471
  • Inne implementacje LINQ 472
    • Entity Framework 472
    • Parallel LINQ (PLINQ) 473
    • LINQ to XML 473
    • Reactive Extensions 473
    • Tx (LINQ to Logs and Traces) 473
  • Podsumowanie 474

11. Reactive Extensions 475

  • Podstawowe interfejsy 477
    • Interfejs IObserver 478
    • Interfejs IObservable 479
  • Publikowanie i subskrypcja z wykorzystaniem delegatów 486
    • Tworzenie źródła przy wykorzystaniu delegatów 486
    • Subskrybowanie obserwowalnych źródeł przy użyciu delegatów 489
  • Generator sekwencji 491
    • Empty 491
    • Never 491
    • Return 492
    • Throw 492
    • Range 492
    • Repeat 492
    • Generate 492
  • Zapytania LINQ 493
    • Operatory grupowania 496
    • Operatory Join 497
    • Operator SelectMany 503
    • Agregacja oraz inne operatory zwracające jedną wartość 503
    • Operator Concat 504
  • Operatory biblioteki Rx 505
    • Merge 505
    • Operatory Buffer i Window 507
    • Operator Scan 514
    • Operator Amb 515
    • DistinctUntilChanged 516
  • Mechanizmy szeregujące 516
    • Określanie mechanizmów szeregujących 517
    • Wbudowane mechanizmy szeregujące 519
  • Tematy 520
    • Subject 521
    • BehaviorSubject 522
    • ReplaySubject 523
    • AsyncSubject 523
  • Dostosowanie 524
    • IEnumerableoraz IAsyncEnumerable 524
    • Zdarzenia .NET 526
    • API asynchroniczne 528
  • Operacje z uzależnieniami czasowymi 530
    • Interval 530
    • Timer 531
    • Timestamp 532
    • TimeInterval 533
    • Throttle 533
    • Sample 534
    • Timeout 534
    • Operatory okien czasowych 534
    • Delay 535
    • DelaySubscription 536
  • Podsumowanie 536

12. Podzespoły 537

  • Anatomia podzespołu 538
    • Metadane .NET 539
    • Zasoby 539
    • Podzespoły składające się z wielu plików 539
    • Inne możliwości formatu PE 540
  • Tożsamość typu 542
  • Wczytywanie podzespołów 545
    • Określanie podzespołów 546
    • Jawne wczytywanie podzespołów 550
    • Izolacja i obsługa wtyczek z użyciem typu AssemblyLoadContext 551
  • Nazwy podzespołów 553
    • Silne nazwy 553
    • Numer wersji 556
    • Identyfikator kulturowy 559
  • Zabezpieczenia 563
  • Podsumowanie 563

13. Odzwierciedlanie 565

  • Typy odzwierciedlania 566
    • Assembly 567
    • Module 570
    • MemberInfo 572
    • Type oraz TypeInfo 574
    • MethodBase, ConstructorInfo oraz MethodInfo 580
    • ParameterInfo 581
    • FieldInfo 581
    • PropertyInfo 582
    • EventInfo 582
  • Konteksty odzwierciedlania 583
  • Podsumowanie 585

14. Atrybuty 587

  • Stosowanie atrybutów 587
    • Cele atrybutów 589
    • Atrybuty obsługiwane przez kompilator 591
    • Atrybuty obsługiwane przez CLR 596
  • Definiowanie i stosowanie atrybutów niestandardowych 603
    • Typ atrybutu 604
    • Pobieranie atrybutów 606
  • Podsumowanie 609

15. Pliki i strumienie 611

  • Klasa Stream 612
    • Położenie i poruszanie się w strumieniu 614
    • Opróżnianie strumienia 615
    • Kopiowanie 616
    • Length 616
    • Zwalnianie strumieni 617
    • Operacje asynchroniczne 618
    • Konkretne typy strumieni 619
    • Jeden typ, wiele zachowań 620
  • Typy operujące na tekstach 622
    • TextReader oraz TextWriter 622
    • Konkretne typy do odczytu i zapisu łańcuchów znaków 624
    • Kodowanie 627
  • Pliki i katalogi 631
    • Klasa FileStream 631
    • Klasa File 634
    • Klasa Directory 638
    • Klasa Path 639
    • Klasy FileInfo, DirectoryInfo oraz FileSystemInfo 641
    • Znane katalogi 642
  • Serializacja 643
    • Klasy BinaryReader oraz BinaryWriter 644
    • Serializacja CLR 645
    • JSON.NET 647
  • Podsumowanie 652

16. Wielowątkowość 653

  • Wątki 653
    • Wątki, zmienne i wspólny stan 655
    • Klasa Thread 661
    • Pula wątków 663
    • Powinowactwo do wątku oraz klasa SynchronizationContext 666
  • Synchronizacja 670
    • Monitory oraz słowo kluczowe lock 671
    • Klasa SpinLock 677
    • Blokady odczytu i zapisu 680
    • Obiekty zdarzeń 681
    • Klasa Barrier 684
    • Klasa CountdownEvent 685
    • Semafory 685
    • Muteksy 686
    • Klasa Interlocked 686
    • Leniwa inicjalizacja 689
    • Pozostałe klasy obsługujące działania współbieżne 691
  • Zadania 693
    • Klasy Task oraz Task 693
    • Kontynuacje 699
    • Mechanizmy szeregujące 701
    • Obsługa błędów 703
    • Niestandardowe zadania bezwątkowe 703
    • Związki zadanie nadrzędne - zadanie podrzędne 705
    • Zadania złożone 705
  • Inne wzorce asynchroniczne 706
  • Anulowanie 707
  • Równoległość 708
    • Klasa Parallel 708
    • Parallel LINQ 709
    • TPL Dataflow 710
  • Podsumowanie 710

17. Asynchroniczne cechy języka 711

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

18. Wydajne użytkowanie pamięci 739

  • (Nie) kopiować! 740
  • Reprezentacja elementów sekwencyjnych przy użyciu Span 744
    • Metody pomocnicze 747
    • Tylko na stosie 747
  • Reprezentacja elementów sekwencyjnych przy użyciu Memory 748
  • ReadOnlySequence 748
  • Przetwarzanie strumieni danych przy użyciu potoków 749
    • Przetwarzanie danych JSON w ASP.NET Core 751
  • Podsumowanie 757
  • Title: C# 8.0. Programowanie. Tworzenie aplikacji Windows, internetowych oraz biurowych
  • Author: Ian Griffiths
  • Original title: Programming C# 8.0: Build Windows, Web, and Desktop Applications
  • Translation: Piotr Rajca
  • ISBN: 978-83-283-6740-1, 9788328367401
  • Date of issue: 2020-10-30
  • Format: Ebook
  • Item ID: ch8pro
  • Publisher: Helion