C# 8.0. Programowanie. Tworzenie aplikacji Windows, internetowych oraz biurowych - ebook
C# 8.0. Programowanie. Tworzenie aplikacji Windows, internetowych oraz biurowych - 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#!
Spis treści
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
- Klasa ImutableArray
- 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
- Pakowanie danych typu Nullable
- 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
- Interfejs IObserver
- 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
- Subject
- Dostosowanie 524
- IEnumerable
oraz IAsyncEnumerable 524 - Zdarzenia .NET 526
- API asynchroniczne 528
- IEnumerable
- 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
- Klasy Task oraz Task
- 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
Kategoria: | Programowanie |
Zabezpieczenie: |
Watermark
|
ISBN: | 978-83-283-6740-1 |
Rozmiar pliku: | 5,8 MB |