C# 7.0 w pigułce
C# jest uważany za flagowy projekt firmy Microsoft. Język ten charakteryzuje się
niezwykłą elastycznością i wszechstronnością. Udostępnia wysokopoziomowe
abstrakcje, takie jak wyrażenia, zapytania i kontynuacje asynchroniczne, ale też pozwala
na korzystanie z mechanizmów niskopoziomowych. W efekcie dzięki takim konstrukcjom, jak
własne typy wartościowe programisty czy opcjonalne wskaźniki, można znacząco
zwiększyć wydajność aplikacji. Wersja 7.0 jest kolejną poważną aktualizacją
języka. Zapoznanie się z tymi zmianami będzie bardzo ważne dla każdego programisty
piszącego w C#.
Niniejsza książka jest kolejnym, uzupełnionym i zaktualizowanym wydaniem cenionego
kompendium wiedzy o C#, CLR oraz o związanej z C# platformie.
Napisano ją z myślą o programistach na co najmniej średnim poziomie zaawansowania.
W zrozumiały, a równocześnie dogłębny sposób wyjaśniono takie trudne kwestie, jak
współbieżność, bezpieczeństwo i domeny aplikacji. Informacje o nowych składnikach
języka C# 6.0 i 7.0, a także o związanej z nim platformie zostały oznaczone. Szczególnie
istotny z punktu widzenia programisty może okazać się rozdział o nowym kompilatorze
Roslyn, zwanym kompilatorem usługowym.
Najważniejsze zagadnienia ujęte w książce:
składnia, typy oraz zmienne C#
wskaźniki, przeciążanie operatorów i wiązanie dynamiczne
programowanie współbieżne i asynchroniczne, praca z wątkami i programowanie równoległe
rdzenne technologie i techniki platformy .NET Framework, w tym LINQ, XML, kolekcje,
kontrakty kodu, zarządzanie pamięcią, refleksja, programowanie dynamiczne
kompilator Roslyn, w tym jego architektura, struktura drzewa składni i model
semantyczny
Wstęp (11)
1. Wprowadzenie do C# i .NET Framework (15)
- Obiektowość (15)
- Bezpieczeństwo typów (16)
- Zarządzanie pamięcią (17)
- Platformy (17)
- Powiązania C# z CLR (17)
- CLR i .NET Framework (18)
- Inne platformy (18)
- Historia C# w pigułce (22)
2. Podstawy języka C# (29)
- Pierwszy program w języku C# (29)
- Składnia (32)
- Podstawy typów (34)
- Typy liczbowe (42)
- Typ logiczny i operatory (50)
- Łańcuchy znaków i pojedyncze znaki (52)
- Tablice (54)
- Zmienne i parametry (58)
- Wyrażenia i operatory (67)
- Operatory null (72)
- Instrukcje (73)
- Przestrzenie nazw (82)
3. Tworzenie typów w języku C# (89)
- Klasy (89)
- Dziedziczenie (104)
- Typ object (113)
- Struktury (117)
- Modyfikatory dostępu (118)
- Interfejsy (120)
- Wyliczenia (125)
- Typy zagnieżdżone (128)
- Typy generyczne (130)
4. Zaawansowane elementy języka C# (143)
- Delegaty (143)
- Zdarzenia (151)
- Wyrażenia lambda (158)
- Metody anonimowe (162)
- Instrukcje try i wyjątki (163)
- Wyliczanie i iteratory (171)
- Typy wartościowe dopuszczające wartość null (176)
- Metody rozszerzające (181)
- Typy anonimowe (184)
- Krotki (C# 7) (185)
- Atrybuty (188)
- Atrybuty informacji wywołującego (190)
- Wiązanie dynamiczne (192)
- Przeciążanie operatorów (199)
- Niebezpieczny kod i wskaźniki (202)
- Dyrektywy preprocesora (206)
- Dokumentacja XML (208)
5. Ogólny zarys platformy (213)
- .NET Standard 2.0 (215)
- CLR i rdzeń platformy (217)
- Technologie praktyczne (221)
6. Podstawowe wiadomości o platformie (229)
- Obsługa łańcuchów i tekstu (229)
- Data i godzina (242)
- Daty i strefy czasowe (249)
- Formatowanie i parsowanie (255)
- Standardowe łańcuchy formatu i flagi parsowania (260)
- Inne mechanizmy konwersji (267)
- Globalizacja (271)
- Praca z liczbami (272)
- Wyliczenia (276)
- Struktura Guid (279)
- Sprawdzanie równości (280)
- Określanie kolejności (289)
- Klasy pomocnicze (293)
7. Kolekcje (297)
- Przeliczalność (297)
- Interfejsy ICollection i IList (304)
- Klasa Array (308)
- Listy, kolejki, stosy i zbiory (316)
- Słowniki (324)
- Kolekcje i pośredniki z możliwością dostosowywania (330)
- Dołączanie protokołów równości i porządkowania (336)
8. Zapytania LINQ (343)
- Podstawy (343)
- Składnia płynna (345)
- Wyrażenia zapytań (351)
- Wykonywanie opóźnione (355)
- Podzapytania (361)
- Tworzenie zapytań złożonych (364)
- Strategie projekcji (368)
- Zapytania interpretowane (370)
- LINQ to SQL i Entity Framework (376)
- Budowanie wyrażeń zapytań (389)
9. Operatory LINQ (395)
- Informacje ogólne (396)
- Filtrowanie (399)
- Projekcja (403)
- Łączenie (414)
- Porządkowanie (421)
- Grupowanie (424)
- Operatory zbiorów (427)
- Metody konwersji (428)
- Operatory elementów (431)
- Metody agregacyjne (433)
- Kwantyfikatory (437)
- Metody generujące (438)
10. LINQ to XML (441)
- Przegląd architektury (441)
- Informacje ogólne o X-DOM (442)
- Tworzenie drzewa X-DOM (445)
- Nawigowanie i wysyłanie zapytań (448)
- Modyfikowanie drzewa X-DOM (452)
- Praca z wartościami (455)
- Dokumenty i deklaracje (458)
- Nazwy i przestrzenie nazw (461)
- Adnotacje (466)
- Projekcja do X-DOM (467)
11. Inne technologie XML (473)
- Klasa XmlReader (474)
- Klasa XmlWriter (482)
- Typowe zastosowania klas XmlReader i XmlWriter (484)
- XSD i sprawdzanie poprawności schematów (488)
- XSLT (491)
12. Zwalnianie zasobów i mechanizm usuwania nieużytków (493)
- IDisposable, Dispose i Close (493)
- Automatyczne usuwanie nieużytków (499)
- Finalizatory (501)
- Jak działa mechanizm usuwania nieużytków? (506)
- Wycieki pamięci zarządzanej (511)
- Słabe odwołania (515)
13. Diagnostyka i kontrakty kodu (519)
- Kompilacja warunkowa (520)
- Debugowanie i klasy monitorowania (523)
- Integracja z debuggerem (526)
- Procesy i wątki procesów (528)
- Klasy StackTrace i StackFrame (529)
- Dziennik zdarzeń Windows (530)
- Liczniki wydajności (533)
- Klasa Stopwatch (538)
14. Współbieżność i asynchroniczność (539)
- Wprowadzenie (539)
- Wątkowanie (540)
- Zadania (557)
- Reguły asynchroniczności (565)
- Funkcje asynchroniczne w języku C# (570)
- Wzorce asynchroniczności (586)
- Wzorce uznane za przestarzałe (594)
15. Strumienie i wejście-wyjście (599)
- Architektura strumienia (599)
- Użycie strumieni (601)
- Adapter strumienia (614)
- Kompresja strumienia (622)
- Praca z plikami w postaci archiwum ZIP (624)
- Operacje na plikach i katalogach (625)
- Plikowe operacje wejścia-wyjścia w UWP (635)
- Mapowanie plików w pamięci (638)
- Odizolowany magazyn danych (641)
16. Sieć (643)
- Architektura sieci (643)
- Adresy i porty (646)
- Adresy URI (647)
- Klasy po stronie klienta (649)
- Praca z HTTP (661)
- Utworzenie serwera HTTP (667)
- Użycie FTP (670)
- Użycie DNS (672)
- Wysyłanie poczty elektronicznej za pomocą SmtpClient (673)
- Użycie TCP (673)
- Otrzymywanie poczty elektronicznej POP3 za pomocą TCP (677)
- TCP w środowisku uruchomieniowym Windows (679)
17. Serializacja (681)
- Koncepcje serializacji (681)
- Serializacja kontraktu danych (685)
- Kontrakty danych i kolekcje (695)
- Rozszerzenie kontraktu danych (697)
- Serializacja binarna (700)
- Atrybuty serializacji binarnej (702)
- Serializacja binarna za pomocą ISerializable (706)
- Serializacja XML (709)
18. Zestawy (719)
- Co znajduje się w zestawie? (719)
- Silne nazwy i podpisywanie zestawu (724)
- Nazwy zestawów (727)
- Technologia Authenticode (730)
- Global Assembly Cache (734)
- Zasoby i zestawy satelickie (736)
- Wyszukiwanie i wczytywanie zestawów (745)
- Wdrażanie zestawów poza katalogiem bazowym (750)
- Umieszczenie w pojedynczym pliku wykonywalnym (751)
- Praca z zestawami, do których nie ma odwołań (753)
19. Refleksja i metadane (755)
- Refleksja i aktywacja typów (756)
- Refleksja i wywoływanie składowych (762)
- Refleksja dla zestawów (774)
- Praca z atrybutami (775)
- Generowanie dynamicznego kodu (781)
- Emitowanie zestawów i typów (787)
- Emitowanie składowych typów (791)
- Emitowanie generycznych typów i klas (796)
- Kłopotliwe cele emisji (798)
- Parsowanie IL (801)
20. Programowanie dynamiczne (807)
- Dynamiczny system wykonawczy języka (807)
- Unifikacja typów liczbowych (809)
- Dynamiczne wybieranie przeciążonych składowych (810)
- Implementowanie obiektów dynamicznych (816)
- Współpraca z językami dynamicznymi (819)
21. Bezpieczeństwo (821)
- Code Access Security (821)
- Tożsamość i role (822)
- Zabezpieczenia systemu operacyjnego (825)
- Kryptografia (827)
- Windows Data Protection (828)
- Obliczanie skrótów (829)
- Szyfrowanie symetryczne (831)
- Szyfrowanie kluczem publicznym i podpisywanie (835)
22. Zaawansowane techniki wielowątkowości (839)
- Przegląd technik synchronizacji (840)
- Blokowanie wykluczające (840)
- Blokady i bezpieczeństwo ze względu na wątki (848)
- Blokowanie bez wykluczania (854)
- Sygnalizacja przy użyciu uchwytów zdarzeń oczekiwania (859)
- Klasa Barrier (867)
- Leniwa inicjalizacja (868)
- Pamięć lokalna wątku (871)
- Metody Interrupt i Abort (873)
- Metody Suspend i Resume (874)
- Zegary (875)
23. Programowanie równoległe (879)
- Dlaczego PFX? (879)
- PLINQ (882)
- Klasa Parallel (895)
- Równoległe wykonywanie zadań (901)
- Klasa AggregateException (910)
- Kolekcje współbieżne (913)
- Klasa BlockingCollection (916)
24. Domeny aplikacji (921)
- Architektura domeny aplikacji (921)
- Tworzenie i likwidowanie domen aplikacji (923)
- Posługiwanie się wieloma domenami aplikacji (924)
- Metoda DoCallBack (926)
- Monitorowanie domen aplikacji (927)
- Domeny i wątki (927)
- Dzielenie danych między domenami (929)
25. Współdziałanie macierzyste i poprzez COM (935)
- Odwołania do natywnych bibliotek DLL (935)
- Szeregowanie (936)
- Wywołania zwrotne z kodu niezarządzanego (939)
- Symulowanie unii C (939)
- Pamięć współdzielona (940)
- Mapowanie struktury na pamięć niezarządzaną (943)
- Współpraca COM (946)
- Wywołanie komponentu COM z C# (948)
- Osadzanie typów współpracujących (952)
- Główne moduły współpracujące (952)
- Udostępnianie obiektów C# dla COM (953)
26. Wyrażenia regularne (955)
- Podstawy wyrażeń regularnych (956)
- Kwantyfikatory (960)
- Asercje o zerowej wielkości (961)
- Grupy (964)
- Zastępowanie i dzielenie tekstu (965)
- Receptury wyrażeń regularnych (967)
- Leksykon języka wyrażeń regularnych (970)
27. Kompilator Roslyn (975)
- Architektura Roslyn (976)
- Drzewa składni (977)
- Kompilacja i model semantyczny (991)
Skorowidz (1003)
1024 strony, Format: 24.5x17.0, oprawa twarda