Język C# 6.0 i platforma .NET 4.6

1 ocena

Format:

mobi, epub, ibuk

DODAJ DO ABONAMENTU

WYBIERZ RODZAJ DOSTĘPU

139,30  199,00

Format: mobi, epub

 

Dostęp online przez myIBUK

WYBIERZ DŁUGOŚĆ DOSTĘPU

6,15

Wypożycz na 24h i opłać sms-em.
Brak wydruku.

139,30199,00

cena zawiera podatek VAT

ZAPŁAĆ SMS-EM

TA KSIĄŻKA JEST W ABONAMENCIE

Już od 19,90 zł miesięcznie za 5 ebooków!

WYBIERZ SWÓJ ABONAMENT

Materiał do nowego, siódmego wydania książki, został całkowicie poprawiony i napisany tak, aby uwzględnić ostatnie zmiany w specyfikacji języka C#, a także nowości na platformie .NET.
W książce tej znajdziesz omówienie wszystkich nowych funkcji, które sprawiają, że .NET 4.6 jest obecnie wersją najbardziej kompletną.


Celem książki jest udostępnienie czytelnikowi kompleksowego, dogłębnego omówienia podstaw języka programowania C# oraz kluczowych aspektów platformy .NET, jak również przeglądu technologii opartych na C# i .NET (ADO.NET i Entity Framework, WCF [Windows Communication Foundation], WPF [Windows Presentation Foundation] i ASP.NET [WebForms, MVC, WebAPI]).


Liczba stron1412
WydawcaWydawnictwo Naukowe PWN
ISBN-13978-83-01-19832-9
Numer wydania1
Język publikacjipolski
Informacja o sprzedawcyePWN sp. z o.o.

Ciekawe propozycje

Spis treści

  Ogólny spis treści V
  
  Spis treści VII
  
  O autorach XXXV
  
  O recenzencie technicznym XXXVII
  
  Podziękowania XXXIX
  
  Wprowadzenie XLI
  
  Część I Wprowadzenie do C# i platformy .NET 1
  
  Rozdział 1 Filozofia .NET 3
  Pierwsze spojrzenie na platformę .NET 3
    Wybór kluczowych zalet platformy .NET 4
    Wprowadzenie do części składowych platformy .NET (CLR, CTS i CLS) 4
    Rola bibliotek klas bazowych 5
    Co nowego wnosi C#? 5
  Kod zarządzany a kod niezarządzany 7
  Dodatkowe języki programowania na platformie .NET 8
    Życie w świecie wielojęzycznym 8
  Przegląd pakietów .NET 9
    Rola języka CIL 10
    Zalety CIL 12
    Kompilowanie CIL do instrukcji na konkretną platformę 12
    Rola metadanych typów .NET 12
    Rola manifestu pakietu 13
  Wspólny system typów (CTS) 14
    Klasy CTS 14
    Interfejsy CTS 15
    Struktury CTS 15
    Wyliczenia CTS 15
    Delegaty CTS 16
    Składowe typów CTS 16
    Wbudowane typy danych CTS 16
  Specyfikacja wspólnego języka (CLS) 17
    Zapewnianie zgodności z CLS 19
  Wspólne środowisko uruchomieniowe (CLR) 19
  Różnica między pakietem, przestrzenią nazw i typem 20
    Rola głównej przestrzeni nazw Microsoft 23
    Dostęp do przestrzeni nazw w kodzie programu 23
    Odwołania do pakietów zewnętrznych 24
  Analiza pakietu w programie ildasm.exe 25
    Przeglądanie kodu CIL 26
    Przeglądanie metadanych typu 27
    Przeglądanie metadanych pakietu (manifestu) 27
  Niezależność .NET od platformy systemowej 28
    Projekt Mono 29
    Microsoft .NET Core 29
  Podsumowanie 30
  
  Rozdział 2 Tworzenie aplikacji w języku C# 31
  Tworzenie aplikacji C# w systemie operacyjnym Windows 31
    Rodzina IDE: Visual Studio Express 32
    Środowisko Visual Studio Community Edition 39
    Projektant klas – Class Designer 39
    Środowisko Visual Studio 2015 Professional 43
    System dokumentacji .NET Framework 44
  Tworzenie aplikacji .NET w innych systemach operacyjnych 45
    Xamarin Studio 46
  Podsumowanie 48
  
  Część II Podstawy programowania w języku C# 49
  
  Rozdział 3 Podstawowe konstrukcje programistyczne języka C#, część 1 51
  Anatomia prostego programu C# 51
    Warianty metody Main( ) 53
    Określanie kodu błędu aplikacji 53
    Przetwarzanie argumentów z wiersza poleceń 55
    Podawanie argumentów wiersza poleceń w Visual Studio 56
  Ciekawostka: kilka kolejnych składowych klasy System.Environment 57
  Klasa System.Console 58
    Podstawowe operacje we/wy z klasą Console 58
    Formatowanie wyników na konsoli 60
    Formatowanie danych liczbowych 60
    Formatowanie danych liczbowych poza aplikacjami konsolowymi 61
  Systemowe typy danych i odpowiadające im słowa kluczowe C# 62
    Deklarowanie i inicjalizowanie zmiennych 63
    Wbudowane typy danych i operator new 64
    Hierarchia klas typów danych 65
    Składowe liczbowych typów danych 66
    Składowe typu System.Boolean 67
    Składowe typu System.Char 67
    Analiza składniowa (parsing) wartości z danych łańcuchowych 67
    Typy System.DateTime i System.TimeSpan 68
    Pakiet System.Numerics.dll 68
  Używanie danych łańcuchowych 70
    Podstawowe operacje na łańcuchach 70
    Konkatenacja łańcuchów 71
    Znaki ucieczki 72
    Definiowanie łańcuchów dosłownych 72
    Porównywanie łańcuchów 73
    Łańcuchów nie można modyfikować 73
    Typ System Text StringBuilder 75
    Interpolacja łańcuchów 76
  Zawężające i rozszerzające konwersje typów danych 77
    Słowo kluczowe checked 79
    Ustawianie sprawdzania nadmiaru w całym projekcie 81
    Słowo kluczowe unchecked 82
  Zmienne lokalne z typizacją niejawną 82
    Ograniczenia niejawnej typizacji zmiennych 83
    Dane z niejawną typizacją to dane z silną typizacją 84
    Przydatność zmiennych lokalnych z niejawną typizacją 85
  Konstrukcje iteracyjne w języku C# 86
    Pętla for 86
    Pętla foreach 87
    Stosowanie niejawnej typizacji w konstrukcjach foreach 87
    Pętle while i do/while 88
  Konstrukcje decyzyjne i operatory porównania/równości 88
    Instrukcja if/else 88
    Operatory równości i relacyjne 89
    Operatory warunkowe 89
    Instrukcja switch 90
  Podsumowanie 92
  
  Rozdział 4 Podstawowe konstrukcje programistyczne języka C#, część 2 93
  Metody i modyfikatory parametrów 93
    Domyślne przekazywanie parametrów – przez wartość 94
    Modyfikator out 95
    Modyfikator ref 96
    Modyfikator params 97
    Definiowanie parametrów opcjonalnych 98
    Wywoływanie metod za pomocą parametrów nazwanych 100
    Przeciążanie metod 101
  Tablice w języku C# 103
    Składnia inicjalizacji tablic w języku C# 104
    Tablice lokalne z typizacją niejawną 105
    Definiowanie tablicy obiektów 105
    Tablice wielowymiarowe 106
    Tablice jako argumenty lub wartości zwracane 107
    Klasa bazowa System.Array 108
  Wyliczenia 110
    Określanie typu bazowego 111
    Deklarowanie zmiennych typu wyliczeniowego 111
    Typ System.Enum 112
    Dynamiczne wykrywanie par nazwa/wartość wyliczenia 113
  Struktury (typy wartościowe) 115
    Tworzenie zmiennych strukturalnych 116
  Typy wartościowe a typy referencyjne 117
    Typy wartościowe, typy referencyjne i operator przypisania 118
    Typy wartościowe zawierające typy referencyjne 120
    Przekazywanie typów referencyjnych przez wartość 121
    Przekazywanie typów referencyjnych przez referencję 122
    Ostatnie słowo na temat typów wartościowych i typów referencyjnych 123
  Typy dopuszczające wartości null 124
    Używanie typów dopuszczających wartości null 125
    Operator scalający wartości null 126
    Operator warunkowy dla wartości null 127
  Podsumowanie 128
  
  Część III Programowanie obiektowe w języku C# 129
  
  Rozdział 5 Hermetyzacja 131
  Wprowadzenie do klas w języku C# 131
    Alokowanie obiektów za pomocą słowa kluczowego new 133
  Konstruktory 134
    Rola konstruktora domyślnego 134
    Definiowanie konstruktorów niestandardowych 135
    Konstruktor domyślny raz jeszcze 136
  Rola słowa kluczowego this 137
    Szeregowanie wywołań konstruktorów z użyciem słowa kluczowego this 139
    Obserwacja przepływu konstruktorów 141
    Argumenty opcjonalne raz jeszcze 143
  Słowo kluczowe static 144
    Definiowanie statycznych pól danych 145
    Definiowanie statycznych metod 146
    Definiowanie statycznych konstruktorów 147
    Definiowanie statycznych klas 150
    Importowanie statycznych składowych za pomocą słowa kluczowego using 150
  Filary programowania obiektowego 151
    Znaczenie hermetyzacji 152
    Znaczenie dziedziczenia 152
    Znaczenie polimorfizmu 154
  Modyfikatory dostępu w języku C# 155
    Domyślne modyfikatory dostępu 156
    Modyfikatory dostępu a typy zagnieżdżone 156
  Pierwszy filar: usługi hermetyzacji C# 157
    Hermetyzacja z użyciem tradycyjnych metod pobierającej i ustawiającej 158
    Hermetyzacja za pomocą właściwości .NET 160
    Używanie właściwości w definicji klasy 163
    Właściwości tylko do odczytu i tylko do zapisu 164
    Słowo kluczowe static raz jeszcze: definiowanie właściwości statycznych 165
  Właściwości automatyczne 165
    Używanie właściwości automatycznych 167
    Właściwości automatyczne i wartości domyślne 167
    Inicjalizacja właściwości automatycznych 169
  Składnia inicjalizacji obiektów 170
    Wywoływanie niestandardowych konstruktorów za pomocą składni inicjalizacji 171
    Inicjalizacja danych z użyciem składni inicjalizacji 172
  Używanie stałych pól danych 173
    Pola tylko do odczytu 175
    Statyczne pola tylko do odczytu 175
  Klasy częściowe 176
    Kiedy używać klas częściowych? 177
  Podsumowanie 177
  
  Rozdział 6 Dziedziczenie i polimorfizm 179
  Podstawowe zasady dziedziczenia 179
    Określanie klasy nadrzędnej dla klasy istniejącej 180
    Słowo kluczowe sealed 182
  Diagramy klas w Visual Studio raz jeszcze 183
  Drugi filar programowania obiektowego: szczegóły na temat dziedziczenia 185
    Tworzenie klas bazowych pod kontrolą – słowo kluczowe base 186
    Co w rodzinie, to nie zginie: słowo kluczowe protected 188
    Dodawanie klasy zapieczętowanej 189
  Programowanie na zasadzie zawierania/delegacji 190
    Definiowanie typów zagnieżdżonych 191
  Trzeci filar programowania obiektowego: polimorfizm 193
    Słowa kluczowe virtual i override 194
    Nadpisywanie wirtualnych składowych w Visual Studio 196
    Pieczętowanie wirtualnych składowych 197
    Klasy abstrakcyjne 198
    Interfejs polimorficzny 199
    Przesłanianie składowych 203
  Zasady rzutowania klasa bazowa/klasa pochodna 205
    Słowo kluczowe as 206
    Słowo kluczowe is 208
  Najważniejsza klasa nadrzędna: System.Object 208
    Nadpisywanie metody System.Object.ToString() 211
    Nadpisywanie metody System.Object.Equals() 212
    Nadpisywanie metody System.Object.GetHashCode() 213
    Testowanie zmodyfikowanej klasy Person 214
    Statyczne składowe klasy System.Object 215
  Podsumowanie 215
  
  Rozdział 7 Strukturalna obsługa wyjątków 217
  Oda do błędów i wyjątków 217
  Rola obsługi wyjątków .NET 218
    Kluczowe elementy obsługi wyjątków na platformie .NET 219
    Klasa bazowa System.Exception 219
  Przykład najprostszy z możliwych 220
    Zgłaszanie ogólnego wyjątku 222
    Przechwytywanie wyjątków 224
  Konfigurowanie stanu wyjątku 225
    Właściwość TargetSite 225
    Właściwość StackTrace 226
    Właściwość HelpLink 226
    Właściwość Data 227
  Wyjątki systemowe (System.SystemException) 229
  Wyjątki na poziomie aplikacji (System.ApplicationException) 230
    Tworzenie wyjątków niestandardowych, odsłona 1 230
    Tworzenie wyjątków niestandardowych, odsłona 2 232
    Tworzenie wyjątków niestandardowych, odsłona 3 233
  Przetwarzanie wielu wyjątków 234
    Ogólne instrukcje catch 236
    Ponowne zgłaszanie wyjątków 237
    Wyjątki wewnętrzne 237
    Blok finally 238
    Filtrowanie wyjątków 239
  Debugowanie nieobsłużonych wyjątków w Visual Studio 240
  Podsumowanie 241
  
  Rozdział 8 Interfejsy 243
  Interfejsy 243
    Interfejsy a abstrakcyjne klasy bazowe 244
  Definiowanie niestandardowych interfejsów 246
  Implementowanie interfejsu 248
  Wywoływanie składowych interfejsu na poziomie obiektu 250
    Uzyskiwanie referencji do interfejsu: słowo kluczowe as 251
    Uzyskiwanie referencji do interfejsu: słowo kluczowe is 251
  Interfejsy jako parametry 252
  Interfejsy jako wartości zwracane 254
  Tablice interfejsów 255
  Implementowanie interfejsów w Visual Studio 256
  Jawna implementacja interfejsu 257
  Projektowanie hierarchii interfejsów 259
    Dziedziczenie wielokrotne a interfejsy 261
  Interfejsy IEnumerable i IEnumerator 263
    Tworzenie iteratorów za pomocą słowa kluczowego yield 265
    Tworzenie nazwanego iteratora 266
  Interfejs ICloneable 267
  Bardziej złożony przykład klonowania 269
  Interfejs IComparable 272
    Określanie wielu porządków sortowania za pomocą interfejsu IComparer 275
    Niestandardowe właściwości i typy sortowania 276
  Podsumowanie 276
  
  Część IV Zaawansowane programowanie w języku C# 277
  
  Rozdział 9 Kolekcje i typy generyczne 279
  Uzasadnienie używania klas kontenerowych 279
    Przestrzeń nazw System.Collections 281
    Przegląd przestrzeni nazw System.Collections.Specialized 282
  Problemy z kolekcjami niegenerycznymi 283
    Problem z wydajnością 283
    Problem z bezpieczeństwem typów 287
    Kolekcje generyczne – pierwsze spotkanie 289
  Generyczne parametry określające typ 290
    Określanie parametrów typu dla generycznych klas/struktur 291
    Określanie parametrów typu dla generycznych składowych 293
    Określanie parametrów typu dla generycznych interfejsów 293
  Przestrzeń nazw System.Collections.Generic 294
    Składnia inicjalizacji kolekcji 295
    Używanie klasy List 297
    Używanie klasy Stack 298
    Używanie klasy Queue 299
    Używanie klasy SortedSet 300
    Używanie klasy Dictionary 302
  Przestrzeń nazw System.Collections.ObjectModel 303
    Używanie klasy ObservableCollection 303
  Tworzenie niestandardowych metod generycznych 305
    Inferencja parametrów określających typ 307
  Tworzenie niestandardowych generycznych struktur i klas 309
    Słowo kluczowe default w generycznym kodzie 310
  Ograniczenia stosowania parametrów określających typ 311
    Przykłady ze słowem kluczowym where 312
    Brak operatorów w ograniczeniach 313
  Podsumowanie 314
  
  Rozdział 10 Delegaty, zdarzenia i wyrażenia lambda 315
  Delegaty na platformie .NET 315
    Definiowanie delegatów w języku C# 316
    Klasy bazowe System.MulticastDelegate i System.Delegate 318
  Najprostszy z możliwych przykładowy delegat 319
    Analiza obiektu delegatu 321
  Wysyłanie powiadomień o stanie obiektu za pomocą delegatów 322
    Możliwość multiemisji 325
    Usuwanie celów z listy wywołań delegatu 326
    Technika grupowej konwersji metod 327
  Delegaty generyczne 329
    Generyczne delegaty Action<> i Func<> 330
  Zdarzenia w języku C# 332
    Słowo kluczowe event w języku C# 333
    Zdarzenia pod maską 335
    Nasłuchiwanie nadchodzących zdarzeń 336
    Upraszczanie rejestracji zdarzeń za pomocą Visual Studio 337
    Oczyszczanie wywoływania zdarzeń za pomocą operatora warunkowego dla wartości null języka C# w wersji 6.0 338
    Tworzenie niestandardowych argumentów zdarzeń 339
    Generyczny delegat EventHandler 340
  Anonimowe metody C# 341
    Dostęp do zmiennych lokalnych 343
  Wyrażenia lambda 344
    Analiza wyrażenia lambda 347
    Przetwarzanie argumentów w wielu instrukcjach 348
    Wyrażenia lambda z wieloma parametrami (i bez parametrów) 349
      Wyposażanie przykładu CarEvents w wyrażenia lambda 350
    Wyrażenie lambda i implementacje składowych w jednej instrukcji 350
  Podsumowanie 351
  
  Rozdział 11 Zaawansowane elementy języka C# 353
  Indeksery 353
    Indeksowanie danych za pomocą wartości łańcuchowych 355
    Przeciążanie indekserów 356
    Indeksery z wieloma wymiarami 357
    Definiowanie indekserów w interfejsach 358
  Przeciążanie operatorów 358
    Przeciążanie operatorów dwuargumentowych 359
    A co z operatorami += i –+? 361
    Przeciążanie operatorów jednoargumentowych 362
    Przeciążanie operatorów równości 362
    Przeciążanie operatorów porównania 363
    Ostatnie uwagi na temat przeciążania operatorów 364
  Konwersje niestandardowych typów 365
    Powtórka: konwersje liczbowe 365
    Powtórka: konwersje między spokrewnionymi klasami 365
    Tworzenie niestandardowych procedur konwersji 366
    Dodatkowe jawne konwersje dla typu Square 368
    Definiowanie procedur niejawnej konwersji 369
  Metody rozszerzające 371
    Definiowanie metod rozszerzających 371
    Wywoływanie metod rozszerzających 372
    Importowanie metod rozszerzających 373
    IntelliSense dla metod rozszerzających 373
    Rozszerzanie typów, w których zaimplementowano konkretne interfejsy 374
  Typy anonimowe 375
    Definiowanie typu anonimowego 376
    Wewnętrzna reprezentacja typów anonimowych 377
    Implementacja metod ToString() i GetHashCode() 378
    Semantyka równości dla typów anonimowych 378
    Typy anonimowe zawierające typy anonimowe 380
  Używanie typów wskaźnikowych 381
    Słowo kluczowe unsafe 382
    Używanie operatorów * i & 384
    Nienadzorowana (i nadzorowana) funkcja wymiany 384
    Dostęp do pól za pomocą wskaźników (operator ->) 385
    Słowo kluczowe stackalloc 386
    Przypinanie typu za pomocą słowa kluczowego fixed 386
    Słowo kluczowe sizeof 387
  Podsumowanie 388
  
  Rozdział 12 LINQ to Objects 389
  Konstrukcje programistyczne związane z zapytaniami LINQ 389
    Niejawna typizacja zmiennych lokalnych 390
    Składnia inicjalizacji obiektów i kolekcji 390
    Wyrażenia lambda 391
    Metody rozszerzające 392
    Typy anonimowe 392
  Rola zapytań LINQ 393
    Wyrażenia LINQ mają silną typizację 394
    Najważniejsze pakiety LINQ 394
  Używanie zapytań LINQ z prostymi tablicami 395
    To samo raz jeszcze, ale bez LINQ 396
    Refleksja na zbiorze wyników LINQ 397
    LINQ a zmienne lokalne z typizacją niejawną 397
    LINQ a metody rozszerzające 398
    Rola odroczonego wykonywania 399
    Rola wykonywania natychmiastowego 400
  Zwracanie wyników zapytania LINQ 401
    Zwracanie wyników LINQ za pomocą natychmiastowego wykonania 402
  Stosowanie zapytań LINQ do obiektów kontenerowych 403
    Dostęp do podobiektów 404
    Używanie zapytań LINQ z kolekcjami niegenerycznymi 404
    Filtrowanie danych za pomocą OfType( ) 405
  Omówienie operatorów do zapytań LINQ 406
    Składnia podstawowego wybierania 407
    Uzyskiwanie podzbiorów danych 408
    Projekcja nowych typów danych 409
    Uzyskiwanie liczników za pomocą Enumerable 410
    Odwracanie kolejności elementów w zbiorze wyników 410
    Sortowanie wyrażeń 410
    LINQ jako ulepszone narzędzie do tworzenia diagramów Venna 411
    Usuwanie duplikatów 412
    Działania agregacyjne LINQ 413
  Wewnętrzna reprezentacja instrukcji z zapytaniami LINQ 413
    Konstruowanie wyrażeń z zapytaniami za pomocą operatorów (powtórka) 414
    Konstruowanie wyrażeń z zapytaniami za pomocą typu Enumerable i wyrażeń lambda 415
    Konstruowanie wyrażeń z zapytaniami za pomocą typu Enumerable i metod anonimowych 416
    Konstruowanie wyrażeń z zapytaniem za pomocą typu Enumerable i bezpośrednio delegatów 417
  Podsumowanie 418
  
  Rozdział 13 Czas życia obiektu 419
  Klasy, obiekty i referencje 419
  Podstawowe informacje o czasie życia obiektów 420
    Kod CIL słowa kluczowego new 421
    Ustawianie referencji do obiektów na null 422
  Korzenie aplikacji 423
  Generacje obiektów 424
  Współbieżne odzyskiwanie pamięci przed .NET 4.0 425
  Drugoplanowe odzyskiwanie pamięci od wersji .NET 4.0 wzwyż 426
  Typ System.GC 426
    Wymuszanie odzyskiwania pamięci 427
  Tworzenie obiektów do sfinalizowania 430
    Nadpisywanie metody System.Object.Finalize() 431
    Szczegóły na temat procesu finalizacji 432
  Tworzenie obiektów usuwalnych 433
    Wielokrotne użycie słowa kluczowego using 435
  Tworzenie typów finalizowalnych i usuwalnych 436
    Formalny schemat usuwania 437
  Leniwe tworzenie instancji obiektów 439
    Dostosowywanie tworzenia leniwych danych 442
  Podsumowanie 443
  
  Część V Programowanie z wykorzystaniem pakietów .NET 445
  
  Rozdział 14 Tworzenie i konfiguracja bibliotek klas 447
  Definiowanie niestandardowych przestrzeni nazw 447
    Rozwiązywanie konfliktów nazw za pomocą pełnych nazw jednoznacznych 449
    Rozwiązywanie konfliktów nazw za pomocą aliasów 450
    Tworzenie zagnieżdżonych przestrzeni nazw 452
    Domyślna przestrzeń nazw w Visual Studio 453
  Rola pakietów .NET 453
    Pakiety sprzyjają tworzeniu kodu wielokrotnego użytku 453
    Pakiety wyznaczają granice typu 454
    Pakiety to jednostki z numerami wersji 454
    Pakiety zawierają własny opis 454
    Pakiety można konfigurować 455
  Format pakietu .NET 455
    Nagłówek pliku Windows 455
    Nagłówek pliku CLR 456
    Kod CIL, metadane typu i manifest pakietu 457
    Opcjonalne zasoby pakietu 457
  Tworzenie i używanie niestandardowej biblioteki z klasą 458
    Analiza manifestu 460
    Analiza kodu CIL 463
    Analiza metadanych typu 463
    Tworzenie aplikacji klienckiej w języku C# 464
    Tworzenie aplikacji klienckiej w języku Visual Basic 466
    Dziedziczenie wielojęzyczne w działaniu 467
  Pakiety prywatne 467
    Tożsamość pakietu prywatnego 468
    Proces sondowania 468
    Konfigurowanie pakietów prywatnych 469
    Rola pliku App.Config 470
  Pakiety współdzielone 472
    Globalny katalog pakietów (GAC) 472
    Silne nazwy 474
    Generowanie silnych nazw w wierszu poleceń 475
    Generowanie silnych nazw w Visual Studio 477
    Instalowanie pakietów z silnymi nazwami w GAC 478
  Używanie współdzielonego pakietu 479
    Analiza manifestu SharedCarLibClient 480
  Konfigurowanie pakietów współdzielonych 481
    Zamrażanie bieżącego pakietu współdzielonego 481
    Tworzenie współdzielonego pakietu wersja 2.0.0.0 481
    Dynamiczne przekierowywanie do konkretnych wersji współdzielonego pakietu 484
  Pakiety z zasadami wydawcy 485
    Wyłączanie zasad wydawcy 486
  Element 486
  Przestrzeń nazw System.Configuration 488
  Dokumentacja na temat schematu pliku konfiguracyjnego 489
  Podsumowanie 490
  
  Rozdział 15 Refleksja typów, późne wiązanie i programowanie z wykorzystaniem atrybutów 491
  Zapotrzebowanie na metadane typów 491
    Przeglądanie (fragmentu) metadanych dla wyliczenia EngineState 492
    Przeglądanie (fragmentu) metadanych typu Car 493
    Omówienie TypeRef 494
    Informacje o bieżącym pakiecie 494
    Informacje o używanych pakietach zewnętrznych 495
    Informacje o literałach łańcuchowych 495
  Refleksja 496
    Klasa System.Type 496
    Uzyskiwanie referencji do typu za pomocą System.Object.GetType() 497
    Uzyskiwanie referencji do typu za pomocą typeof() 497
    Uzyskiwanie referencji do typu za pomocą System.Type.GetType() 498
  Tworzenie niestandardowej przeglądarki metadanych 498
    Refleksja na metodach 498
    Refleksja na polach i właściwościach 499
    Refleksja na zaimplementowanych interfejsach 500
    Wyświetlanie różnych mniej istotnych informacji 500
    Implementacja metody Main() 500
    Refleksja na typach generycznych 502
    Refleksja na parametrach i wartościach zwracanych 502
  Dynamiczne wczytywanie pakietów 504
  Refleksja na pakietach współdzielonych 506
  Późne dowiązywanie 508
    Klasa System.Activator 508
    Wywoływanie metod bez parametrów 510
    Wywoływanie metod z parametrami 511
  Rola atrybutów .NET 512
    Użytkownicy atrybutów 512
    Stosowanie atrybutów w języku C# 513
    Skrótowy zapis atrybutów C# 514
    Podawanie parametrów konstrukcyjnych dla atrybutów 514
    Atrybut [Obsolete] w działaniu 515
  Tworzenie niestandardowych atrybutów 516
    Stosowanie atrybutów niestandardowych 516
    Składnia nazwanych właściwości 517
    Ograniczanie stosowania atrybutów 517
  Atrybuty na poziomie pakietu 518
    Plik AssemblyInfo cs w Visual Studio 519
  Refleksja na atrybutach z użyciem wczesnego dowiązywania 519
  Refleksja na atrybutach z użyciem późnego dowiązywania 521
  Refleksja, późne dowiązywanie i niestandardowe atrybuty z lotu ptaka 522
  Tworzenie rozszerzalnej aplikacji 523
    Tworzenie pakietu CommonSnappableTypes dll 523
    Tworzenie wtyczki w języku C# 524
    Tworzenie wtyczki w języku Visual Basic 525
    Tworzenie rozszerzalnej aplikacji Windows Forms 525
  Podsumowanie 529
  
  Rozdział 16 Typy dynamiczne i środowisko DLR 531
  Rola słowa kluczowego dynamic 531
    Wywoływanie składowych względem dynamicznie zadeklarowanych danych 533
    Rola pakietu Microsoft.CSharp.dll 534
    Zasięg słowa kluczowego dynamic 535
    Ograniczenia słowa kluczowego dynamic 536
    Praktyczne zastosowania słowa kluczowego dynamic 536
  Rola środowiska DLR 537
    Drzewa wyrażeń 537
    Przestrzeń nazw System.Dynamic 538
    Dynamiczne wyszukiwanie drzew wyrażeń 538
  Upraszczanie wywołań z późnym dowiązywaniem za pomocą typów dynamicznych 539
    Używanie słowa kluczowego dynamic do przekazania argumentów 540
  Upraszczanie współpracy z COM za pomocą danych dynamicznych 542
    Podstawowe pakiety współdziałania 543
    Osadzanie metadanych współdziałania 544
    Najczęściej występujące problemy ze współpracą z kodem COM 544
  Współpraca z COM z użyciem dynamicznych danych C# 545
    Współpraca z COM bez danych dynamicznych 549
  Podsumowanie 550
  
  Rozdział 17 Procesy, domeny aplikacji i konteksty obiektów 551
  Rola procesów Windows 551
    Rola wątków 552
  Komunikacja z procesami na platformie .NET 553
    Wyliczanie uruchomionych procesów 554
    Analiza konkretnego procesu 556
    Analiza zbioru wątków procesu 557
    Analiza zbioru modułów procesu 558
    Rozpoczynanie i zatrzymywanie procesów w kodzie programu 560
    Kontrolowanie rozpoczynania procesów za pomocą klasy ProcessStartInfo 561
  Domeny aplikacji .NET 562
    Klasa System AppDomain 562
  Komunikacja z domyślną domeną aplikacji 563
    Wyliczanie załadowanych pakietów 564
    Odbiór powiadomień o załadowaniu pakietu 566
  Tworzenie nowych domen aplikacji 566
    Wczytywanie pakietów do niestandardowych domen aplikacji 568
    Usuwanie domen aplikacji w kodzie programu 569
  Granice kontekstowe obiektów 570
    Typy niezwiązane i związane kontekstem 571
    Definiowanie obiektu kontekstowego 572
    Analiza kontekstu obiektu 572
  Podsumowanie procesów, domen aplikacji i kontekstów 574
  Podsumowanie 574
  
  Rozdział 18 CIL i rola pakietów dynamicznych 575
  Motywacja do nauki gramatyki CIL 575
  Analiza dyrektyw, atrybutów i kodów operacyjnych CIL 576
    Dyrektywy CIL 576
    Atrybuty CIL 577
    Kody operacyjne CIL 577
    Różnica między kodami operacyjnymi a mnemonikami 577
  Wrzucanie i zrzucanie: znaczenie stosu w języku CIL 578
  Inżynieria wahadłowa 579
    Etykiety kodu CIL 582
    Komunikacja z kodem CIL: modyfikowanie pliku *.il 583
    Kompilowanie kodu CIL w programie ilasm.exe 584
    Rola programu peverify.exe 585
  Dyrektywy i atrybuty CIL 585
    Podawanie wymaganych pakietów zewnętrznych w CIL 586
    Definiowanie bieżącego pakietu w CIL 586
    Definiowanie przestrzeni nazw w CIL 587
    Definiowanie klas w CIL 587
    Definiowanie i implementowanie interfejsów w CIL 588
    Definiowanie struktur w CIL 589
    Definiowanie wyliczeń w CIL 589
    Definiowanie typów generycznych w kodzie CIL 590
    Kompilowanie pliku CILTypes.il 590
  Związek między bazowymi bibliotekami klas, językiem C# i typami danych CIL 591
  Definiowanie składowych w CIL 591
    Definiowanie pól z danymi w CIL 592
    Definiowanie konstruktorów w CIL 592
    Definiowanie właściwości w CIL 593
    Definiowanie parametrów składowych 593
  Kody operacyjne CIL 594
    Dyrektywa .maxstack 596
    Deklarowanie zmiennych lokalnych w CIL 596
    Odwzorowywanie parametrów na zmienne lokalne w CIL 597
    Ukryta referencja this 597
    Reprezentacja konstrukcji iteracyjnych w CIL 598
  Tworzenie pakietu .NET w CIL 599
    Tworzenie pakietu CILCars.dll 599
    Tworzenie pakietu CILCarClient.exe 602
  Pakiety dynamiczne 603
    Analiza przestrzeni nazw System.Reflection.Emit 604
    Typ System Reflection Emit.ILGenerator 605
    Generowanie pakietu dynamicznego 605
    Generowanie pakietu i zbioru modułów 607
    Znaczenie typu ModuleBuilder 608
    Generowanie typu HelloClass i łańcuchowej zmiennej składowej 609
    Generowanie konstruktorów 609
    Generowanie metody SayHello() 610
    Używanie dynamicznie wygenerowanego pakietu 611
  Podsumowanie 612
  
  Część VI Wprowadzenie do bibliotek klas bazowych .NET 613
  
  Rozdział 19 Programowanie wielowątkowe, równoległe i asynchroniczne 615
  Relacja między procesami, domenami aplikacji, kontekstem i wątkami 615
    Problem współbieżności 616
    Synchronizacja wątków 617
  Krótka powtórka z delegatów .NET 617
  Asynchroniczna natura delegatów 619
    Metody BeginInvoke() i EndInvoke() 619
    Interfejs System.IAsyncResult 620
  Asynchroniczne wywoływanie metod 620
    Synchronizacja wątku wywołującego 621
    Delegat AsyncCallback 623
    Klasa AsyncResult 624
    Przekazywanie i odbieranie niestandardowych danych o stanie 625
  Przestrzeń nazw System.Threading 626
  Klasa System.Threading.Thread 627
    Uzyskiwanie statystyk dotyczących bieżącego wątku wykonywania 628
    Właściwość Name 628
    Właściwość Priority 629
  Ręczne tworzenie wątków podrzędnych 629
    Używanie delegatu ThreadStart 630
    Używanie delegatu ParameterizedThreadStart 632
    Klasa AutoResetEvent 633
    Wątki pierwszo- i drugoplanowe 634
  Problem współbieżności 635
    Synchronizacja za pomocą słowa kluczowego lock 637
    Synchronizacja za pomocą typu System.Threading.Monitor 639
    Synchronizacja za pomocą typu System.Threading.Interlocked 640
    Synchronizacja za pomocą atrybutu [Synchronization] 641
  Programowanie z użyciem delegatu TimerCallback 641
  Pula wątków CLR 643
  Programowanie równoległe z wykorzystaniem TPL (Task Parallel Library) 644
    Przestrzeń nazw System.Threading.Tasks 645
    Rola klasy Parallel 645
    Równoległość danych i klasa Parallel 646
    Dostęp do elementów IU z wątków podrzędnych 648
    Klasa Task 649
    Obsługa żądań anulowania 649
    Równoległość zadań a klasa Parallel 651
  Równoległe zapytania LINQ (PLINQ) 654
    Wybór zapytania PLINQ 655
    Anulowanie zapytania PLINQ 655
  Wywołania asynchroniczne z użyciem słowa kluczowego async 656
    Pierwsze spojrzenie na słowa kluczowe async i await 657
    Konwencja nazewnicza metod asynchronicznych 658
    Metody asynchroniczne zwracające void 659
    Metody asynchroniczne z wieloma słowami kluczowymi await 660
    Przeróbka przykładu AddWithThreads ze słowami kluczowymi async/await 661
  Podsumowanie 662
  
  Rozdział 20 Plikowe operacje we/wy oraz serializacja obiektów 663
  Przestrzeń nazw System.IO 663
  Typy Directory(Info) i File(Info) 664
    Abstrakcyjna klasa bazowa FileSystemInfo 665
  Używanie typu DirectoryInfo 665
    Wyliczanie plików za pomocą typu DirectoryInfo 667
    Tworzenie podkatalogów za pomocą typu DirectoryInfo 667
  Używanie typu Directory 669
  Używanie klasy DriveInfo 669
  Używanie klasy FileInfo 670
    The FileInfo Create() Method 671
    Metoda FileInfo Open() 672
    Metody FileInfo OpenRead() i FileInfo OpenWrite() 673
    Metoda FileInfo OpenText() 673
    Metody FileInfo CreateText() i FileInfo AppendText() 674
  Używanie typu File 674
    Inne składowe typu File 675
  Abstrakcyjna klasa Stream 676
    Używanie klasy FileStream 677
  Używanie klas StreamWriter i StreamReader 678
    Zapisywanie do pliku tekstowego 679
    Odczytywanie z pliku tekstowego 680
    Bezpośrednie tworzenie obiektów StreamWriter/StreamReader 680
  Używanie klas StringWriter i StringReader 681
  Używanie klas BinaryWriter i BinaryReader 682
  Programistyczne monitorowanie plików 684
  Serializacja obiektów 686
    Rola grafów obiektów 687
  Konfiguracja obiektów do serializacji 688
    Definiowanie serializowalnych typów 688
    Pola publiczne, pola prywatne i właściwości publiczne 689
  Wybór typu z kategorii Formatter do serializacji 690
    Interfejsy IFormatter i IRemotingFormatter 691
    Jak różne formatery utrwalają typy 692
  Serializacja obiektów za pomocą typu BinaryFormatter 692
    Deserializacja obiektów za pomocą typu BinaryFormatter 694
  Serializacja obiektów za pomocą typu SoapFormatter 694
  Serializacja obiektów za pomocą typu XmlSerializer 695
    Kontrola nad generowanymi danymi XML 696
  Serializacja kolekcji obiektów 698
  Dostosowywanie serializacji SOAP/binarnej 699
    Serializacja obiektów pod lupą 699
    Dostosowywanie serializacji za pomocą interfejsu ISerializable 700
    Dostosowywanie serializacji za pomocą atrybutów 703
  Podsumowanie 704
  
  Rozdział 21 ADO.NET – część 1: warstwa połączeniowa 705
  Ogólna definicja ADO.NET 705
    Trzy oblicza ADO.NET 707
  Dostawcy danych ADO.NET 707
    Dostawcy danych ADO.NET od Microsoftu 709
    Słowo o pakiecie System Data OracleClient.dll 710
    Uzyskiwanie dostawców danych ADO.NET od innych producentów 710
  Dodatkowe przestrzenie nazw ADO.NET 710
  Typy z przestrzeni nazw System.Data 711
    Interfejs IDbConnection 712
    Interfejs IDbTransaction 712
    Interfejs IDbCommand 712
    Interfejsy IDbDataParameter i IDataParameter 713
    Interfejsy IDbDataAdapter i IDataAdapter 713
    Interfejsy IDataReader i IDataRecord 714
  Ukrywanie dostawców danych za pomocą interfejsów 715
    Zwiększanie elastyczności za pomocą plików konfiguracyjnych aplikacji 717
  Tworzenie bazy danych AutoLot 718
    Tworzenie tabeli Inventory 719
    Dodawanie do tabeli Inventory rekordów testowych 721
    Tworzenie składowanej procedury GetPetName() 721
    Tworzenie tabel Customers i Orders 722
    Tworzenie relacji między tabelami w Visual Studio 724
  Model fabryki dostawcy danych ADO.NET 725
    Pełny przykład z fabryką dostawcy danych 726
    Potencjalna wada modelu fabryki dostawcy danych 729
    Element 730
  Warstwa połączeniowa ADO.NET 731
    Używanie obiektów połączenia 732
    Używanie obiektów ConnectionStringBuilder 734
    Używanie obiektów polecenia 735
  Używanie typów DataReader 736
    Uzyskiwanie wielu zbioru wyników za pomocą czytnika danych 737
  Tworzenie biblioteki dostępu do danych wielokrotnego użytku 738
    Dodawanie kodu połączenia 739
    Dodawanie kodu wstawiania 740
    Dodawanie kodu usuwania 741
    Dodawanie kodu aktualizacji 741
    Dodawanie kodu wybierania 742
    Używanie sparametryzowanych obiektów polecenia 743
    Podawanie parametrów za pomocą typu DbParameter 743
    Wywoływanie procedury składowanej 745
  Tworzenie nakładki na aplikację konsolową 746
    Implementowanie metody Main() 747
    Implementowanie metody ShowInstructions() 749
    Implementowanie metody ListInventory() 749
    Implementowanie metody DeleteCar() 750
    Implementowanie metody InsertNewCar() 750
    Implementowanie metody UpdateCarPetName() 751
    Implementowanie metody LookUpPetName() 751
  Transakcje bazodanowe 752
    Najważniejsze składowe obiektu transakcji ADO.NET 753
    Dodawanie tabeli CreditRisks do bazy danych AutoLot 754
    Dodawanie metody transakcyjnej do bazy danych InventoryDAL 754
    Testowanie transakcji bazodanowej 756
  Podsumowanie 757
  
  Rozdział 22 ADO NET – część 2: warstwa bezpołączeniowa 759
  Warstwa bezpołączeniowa ADO NET 759
  Rola typu DataSet 760
    Najważniejsze właściwości typu DataSet 761
    Najważniejsze metody typu DataSet 762
    Tworzenie obiektu DataSet 762
  Używanie typu DataColumn 763
    Tworzenie typu DataColumn 764
    Włączanie automatycznej inkrementacji w polach 764
    Dodawanie obiektów DataColumn do DataTable 765
  Używanie typu DataRow 765
    Właściwość RowState 767
    Właściwość DataRowVersion 768
  Używanie typu DataTable 769
    Wstawianie obiektów DataTable do obiektów DataSet 769
    Uzyskiwanie danych z obiektu DataSet 770
    Przetwarzanie danych DataTable za pomocą obiektów DataTableReader 771
    Serializacja obiektów DataTable/DataSet w formacie XML 772
    Serializacja obiektów DataTable/DataSet w formacie binarnym 773
  Dowiązywanie obiektów DataTable do GUI Windows Forms 774
    Wyodrębnianie obiektu DataTable z generycznego List 775
    Usuwanie wierszy z obiektu DataTable 777
    Wybieranie wierszy na podstawie kryteriów filtrowania 779
    Aktualizacja wierszy w obiekcie DataTable 781
    Używanie typu DataView 782
  Używanie adapterów danych 783
    Prosty przykład z adapterem danych 784
    Odwzorowanie nazw bazodanowych na nazwy przyjazne 786
  Dodawanie funkcjonalności bezpołączeniowej do pakietu
  AutoLotDAL.dll 787
    Definiowanie początkowej klasy 787
    Konfiguracja adaptera danych za pomocą typu SqlCommandBuilder 787
    Implementacja metody GetAllInventory() 789
    Implementacja metody UpdateInventory() 789
    Ustawianie numeru wersji 789
    Testowanie funkcji bezpołączeniowych 789
  Obiekty DataSet z wieloma tabelami i relacjami danych 791
    Przygotowanie adapterów danych 792
    Tworzenie relacji między tabelami 793
    Modyfikacja tabel w bazie danych 794
    Nawigacja między powiązanymi ze sobą tabelami 794
  Narzędzia do projektowania baz danych Windows Forms 796
    Projektowanie kontrolki DataGridView w trybie graficznym 796
    Wygenerowany plik App config 800
    Analiza obiektów DataSet z silną typizacją 801
    Analiza obiektów DataTable z silną typizacją 802
    Analiza obiektów DataRow z silną typizacją 803
    Analiza adaptera danych z silną typizacją 804
    Kończenie aplikacji Windows Forms 805
  Wyodrębnianie kodu bazy danych z silną typizacją do biblioteki klasy 806
    Przeglądanie wygenerowanego kodu 806
    Wybieranie danych za pomocą wygenerowanego kodu 807
    Wstawianie danych za pomocą wygenerowanego kodu 809
    Usuwanie danych za pomocą wygenerowanego kodu 810
    Wywoływanie składowanej procedury za pomocą wygenerowanego kodu 810
  Programowanie z wykorzystaniem technologii LINQ to DataSet 811
    Biblioteka DataSetExtensions 813
    Uzyskiwanie obiektu DataTable kompatybilnego z LINQ 813
    Metoda rozszerzająca DataRowExtensions Field() 815
    Wypełnianie nowych obiektów DataTable na podstawie zapytań LINQ 815
  Podsumowanie 816
  
  Rozdział 23 ADO NET – część 3: Entity Framework 817
  Rola Entity Framework 817
    Rola encji 819
    Bloki budulcowe Entity Framework 821
  Code First z istniejącej bazy danych 825
    Generowanie modelu 825
    I co się wydarzyło? 827
    Zmiana domyślnego mapowania 830
    Dodawanie do wygenerowanych klas modeli 831
  Używanie klas modeli w kodzie 832
    Wstawianie rekordów 832
    Wybieranie rekordów 833
    Rola właściwości nawigacyjnych 836
    Usuwanie rekordów 838
    Aktualizacja rekordów 840
  Obsługa zmian w bazie danych 840
  AutoLotDAL wersja 4 840
    Adnotacje w Entity Framework 841
    Dodawanie lub aktualizacja klas modeli 842
    Dodawanie klasy wywodzącej się z DbContext 847
    Dodawanie repozytoriów 849
    Inicjalizacja bazy danych 857
  Testowanie AutoLotDAL 858
    Wyświetlanie wszystkich rekordów z repozytorium Inventory 859
    Dodawanie nowych rekordów do Inventory 859
    Edytowanie rekordów 860
    Używanie właściwości nawigacyjnych 861
    Działania na wielu tabelach/transakcje niejawne 862
  Migracje Entity Framework 863
    Aktualizowanie modelu 864
    Testowanie aplikacji 866
    Wprowadzenie do migracji EF 866
    Tworzenie migracji linii bazowej 866
    Ustawienie początkowych wartości bazy danych 870
  Testowanie transakcji raz jeszcze 871
  Współbieżność 872
    Korygowanie repozytoriów 873
    Testowanie współbieżności 873
  Przechwytywanie 874
    Interfejs IDbCommandInterceptor 874
    Dodawanie przechwytywania do AutoLotDAL 875
    Rejestrowanie interceptorów 876
    Dodawanie interceptora DatabaseLogger 876
  Zdarzenia ObjectMaterialized i SavingChanges 877
    Dostęp do kontekstu obiektu 877
    ObjectMaterialized 877
    SavingChanges 877
    Wdrażanie na SQL Server 878
  Podsumowanie 879
  
  Rozdział 24 Wprowadzenie do LINQ to XML 881
  Opowieść o dwóch API XML 881
    LINQ to XML jako ulepszony model DOM 883
    Składnia literałów VB jako ulepszony LINQ to XML 883
  Składowe przestrzeni nazw System Xml Linq 885
    Metody osiowe LINQ to XML 886
    Osobliwość XName (i XNamespace) 888
  Używanie typów XElement i XDocument 888
    Generowanie dokumentów z tablic i kontenerów 890
    Wczytywanie i analiza zawartości XML 892
  Operacje na dokumentach XML znajdujących się w pamięci 892
    Tworzenie interfejsu użytkownika aplikacji LINQ to XML 892
    Importowanie pliku Inventory xml 893
    Definiowanie klasy pomocniczej LINQ to XML 893
    Dołączanie interfejsu użytkownika do klasy pomocniczej 895
  Podsumowanie 896
  
  Rozdział 25 Wprowadzenie do WCF (Windows Communication Foundation) 897
  Potpourri rozproszonych API 897
    Rola modelu DCOM 898
    Rola COM+/Enterprise Services 898
    Rola MSMQ 899
    Warstwa zdalnego dostępu .NET 900
    Rola usług sieciowych XML 900
    Standardy usług sieciowych 900
  Znaczenie WCF 901
    Przegląd własności WCF 902
    Przegląd architektury usługowej 902
    Dogmat 1: Granice są jasno sprecyzowane 903
    Dogmat 2: Usługi są autonomiczne 903
    Dogmat 3: Usługi komunikują się na podstawie kontraktu, a nie implementacji 903
    Dogmat 4: Kompatybilność usług opiera się na zasadach 903
    WCF: Podsumowanie 903
  Analiza najważniejszych pakietów WCF 904
  Szablony projektów WCF w Visual Studio 904
    Szablon projektu witryny internetowej usługi WCF 905
  Podstawowa budowa aplikacji WCF 906
  ABC usług WCF 907
    Kontrakty WCF 908
    Dowiązania WCF 909
    Dowiązania HTTP 909
    Dowiązania TCP 910
    Dowiązania MSMQ 911
  Adresy WCF 911
  Tworzenie usługi WCF 912
    Atrybut [ServiceContract] 913
    Atrybut [OperationContract] 914
    Typy usługowe jako kontrakty operacyjne 914
  Hostowanie usługi WCF 915
    Ustalanie ABC w pliku App.config 916
    Kod dla typu ServiceHost 916
    Podawanie adresów bazowych 917
    Typ ServiceHost pod lupą 918
    Element pod lupą 920
    Umożliwianie wymiany metadanych 921
  Tworzenie klienckiej aplikacji WCF 923
    Generowanie kodu proxy za pomocą svcutil exe 923
    Generowanie kodu proxy w Visual Studio 924
    Konfigurowanie dowiązania TCP 926
  Upraszczanie ustawień konfiguracyjnych 927
    Wykorzystywanie domyślnych punktów końcowych 927
    Udostępnianie jednej usługi WCF z użyciem wielu dowiązań 929
    Zmiana ustawień dowiązania WCF 930
    Wykorzystywanie domyślnej konfiguracji działania MEX 931
    Odświeżanie klienckiego proxy i wybór dowiązania 932
  Używanie szablonu projektu WCF Service Library 934
    Tworzenie prostej usługi matematycznej 934
    Testowanie usługi WCF za pomocą WcfTestClient.exe 934
    Modyfikowanie plików konfiguracyjnych w programie SvcConfigEditor.exe 936
  Hostowanie usługi WCF w usłudze Windows 936
    Określanie ABC w kodzie 937
    Włączanie MEX 939
    Tworzenie instalatora usługi Windows 939
    Instalowanie usługi Windows 940
  Asynchroniczne wywoływanie usługi przez klienta 941
  Projektowanie kontraktów WCF 943
    Używanie sieciowego szablonu projektu usługi WCF 944
    Implementowanie kontraktu usługi 945
    Rola pliku *.svc 947
    Analiza pliku Web config 947
    Testowanie usługi 947
  Podsumowanie 948
  
  Część VII Windows Presentation Foundation 949
  
  Rozdział 26 Wprowadzenie do WPF (Windows Presentation Foundation) i XAML 951
  Po co jest WPF? 951
    Unifikacja różnych API 952
    Podział zadań za pomocą języka XAML 952
    Optymalny model renderowania 953
    Uproszczenie programowania skomplikowanych interfejsów użytkownika 953
  Różne odmiany WPF 954
    Tradycyjne aplikacje okienkowe 954
    Nawigacyjne aplikacje WPF 956
    Aplikacje XBAP 956
    Związek między WPF a Silverlight 958
  Analiza pakietów WPF 958
    Klasa Application 959
    Konstruowanie klasy Application 960
    Wyliczanie kolekcji Windows 960
    Klasa Window 961
  Tworzenie aplikacji WPF bez XAML 964
    Tworzenie klasy Window z silną typizacją 966
    Tworzenie prostego interfejsu użytkownika 967
    Używanie danych na poziomie aplikacji 968
    Obsługa zamykania obiektu Window 969
    Przechwytywanie zdarzeń myszy 971
    Przechwytywanie zdarzeń klawiatury 971
  Tworzenie aplikacji WPF jedynie przy użyciu XAML 972
    Definiowanie obiektu Window w XAML 974
    Definiowanie obiektu Application w XAML 975
    Przetwarzanie plików XAML za pomocą msbuild exe 976
  Przekształcanie znaczników na pakiet NET 977
    Odwzorowanie znakowania XAML dla Window w kodzie C# 977
    Rola BAML 979
    Odwzorowanie znakowania XAML aplikacji na kod C# 980
    Podsumowanie procesu przekształcania XAML na pakiet 980
  Składnia XAML WPF 981
    Wprowadzenie do Kaxaml 981
    Przestrzenie nazw i „słowa kluczowe” XAML 982
    Określanie widoczności klas i zmiennych składowych 984
    Elementy i atrybuty XAML oraz konwertery typów 985
    Składnia właściwość-element w XAML 986
    Załączane właściwości XAML 987
    Rozszerzenia znakowania XAML 988
  Tworzenie aplikacji WPF z użyciem plików code-behind 989
    Dodawanie pliku z kodem dla klasy MainWindow 990
  Dodawanie pliku z kodem dla klasy MyApp 991
    Przetwarzanie plików z kodem w programie msbuild exe 991
  Tworzenie aplikacji WPF w Visual Studio 992
    Szablony projektów WPF 992
    Przybornik i projektant/edytor XAML 994
    Ustawianie właściwości w oknie Properties 995
    Obsługa zdarzeń w oknie Properties 996
    Obsługa zdarzeń w edytorze XAML 997
    Okno Document Outline 997
    Przeglądanie automatycznie wygenerowanych plików z kodem 998
  Tworzenie niestandardowego edytora XAML w Visual Studio 999
    Projektowanie graficznego interfejsu użytkownika obiektu Window 999
    Implementacja zdarzenia Loaded 1000
    Implementacja zdarzenia Click przycisku 1001
    Implementacja zdarzenia Closed 1002
    Testowanie aplikacji 1003
    Poznawanie dokumentacji WPF 1004
  Podsumowanie 1004
  
  Rozdział 27 Programowanie z wykorzystaniem kontrolek WPF 1005
  Przegląd podstawowych kontrolek WPF 1005
    Kontrolki WPF Ink 1005
    Kontrolki dokumentów WPF 1006
    Najpopularniejsze okna dialogowe WPF 1006
    Szczegóły są w dokumentacji 1007
  Krótkie omówienie projektanta WPF w Visual Studio 1007
    Używanie kontrolek WPF w Visual Studio 1008
    Używanie edytora Document Outline 1009
  Kontrolowanie rozmieszczenia zawartości za pomocą paneli 1010
    Pozycjonowanie zawartości za pomocą paneli Canvas 1012
    Pozycjonowanie zawartości za pomocą paneli WrapPanel 1013
    Pozycjonowanie zawartości za pomocą paneli StackPanel 1015
    Pozycjonowanie zawartości za pomocą paneli Grid 1016
    Siatki z typami GridSplitter 1017
    Pozycjonowanie zawartości za pomocą paneli DockPanel 1018
    Włączanie przewijania dla typów Panel 1019
    Konfigurowanie paneli w projektantach Visual Studio 1020
  Tworzenie ramki okna za pomocą zagnieżdżonych paneli 1023
    Tworzenie systemu menu 1024
    Tworzenie menu w trybie graficznym 1025
    Tworzenie paska narzędzi 1027
    Tworzenie paska stanu 1027
    Wykończenie projektu interfejsu użytkownika 1027
    Implementacja obsługi zdarzeń MouseEnter/MouseLeave 1028
    Implementacja kodu do sprawdzania pisowni 1029
  Omówienie poleceń WPF 1030
    Wbudowane obiekty Command 1030
    Łączenie poleceń z właściwością Command 1031
    Łączenie poleceń z arbitralnymi działaniami 1032
    Używanie poleceń Open i Save 1034
  Zdarzenia trasowane 1036
    Wstępujące zdarzenia trasowane 1037
    Kontynuowanie lub zatrzymywanie wstępowania 1037
    Zstępujące zdarzenia trasowane 1038
  API i kontrolki WPF pod lupą 1040
    Używanie typu TabControl 1040
  Tworzenie karty Ink API 1041
    Projektowanie paska narzędzi 1043
    Kontrolka RadioButton 1045
    Obsługa zdarzeń na karcie API Ink 1046
    Kontrolka InkCanvas 1046
    Kontrolka ComboBox 1049
    Zapisywanie, wczytywanie i sprzątanie danych InkCanvas 1050
  Wprowadzenie do API Documents 1051
    Elementy blokowe i elementy wierszowe 1052
    Menedżery rozplanowania dokumentu 1052
  Tworzenie karty Documents 1053
    Wypełnianie FlowDocument za pomocą kodu 1054
    Włączanie adnotacji i przyklejanych karteczek 1055
    Zapisywanie i wczytywanie FlowDocument 1057
  Wprowadzenie do modelu dowiązywania danych WPF 1058
    Tworzenie karty z dowiązywaniem danych 1059
    Określanie dowiązań danych za pomocą Visual Studio 1059
    Właściwość DataContext 1061
    Konwersja danych za pomocą IValueConverter 1062
    Określanie dowiązań danych w kodzie 1063
    Tworzenie karty DataGrid 1064
  Rola właściwości zależnych 1065
    Analiza istniejącej właściwości zależnej 1067
    Kilka ważnych faktów dotyczących osłon właściwości CLR 1069
  Tworzenie niestandardowej właściwości zależnej 1070
    Dodawanie kodu sprawdzania prawidłowości danych 1074
    Reagowanie na zmianę właściwości 1074
  Podsumowanie 1075
  
  Rozdział 28 Usługi przetwarzania grafiki WPF 1077
  Graficzne usługi renderowania WPF 1077
    Opcje renderowania grafiki WPF 1078
  Renderowanie danych graficznych za pomocą kształtów 1079
    Wstawianie prostokątów, elips i linii na płótno 1081
    Usuwanie prostokątów, elips i linii z płótna 1083
    Używanie klas Polyline i Polygon 1085
    Używanie klasy Path 1085
  Pędzle i pióra WPF 1088
    Konfiguracja pędzli w Visual Studio 1089
    Konfiguracja pędzli w kodzie 1091
    Konfiguracja piór 1092
  Stosowanie przekształceń graficznych 1092
    Pierwsze spojrzenie na przekształcenia 1093
    Przekształcanie danych na płótnie 1094
  Używanie edytora przekształceń w Visual Studio 1096
    Tworzenie początkowego rozmieszczenia 1096
    Stosowanie przekształceń w fazie projektowania 1098
    Przekształcanie płótna w kodzie 1099
  Renderowanie danych graficznych za pomocą rysunków i geometrii 1100
    Tworzenie obiektów DrawingBrush za pomocą geometrii 1101
    Malowanie z użyciem DrawingBrush 1102
    Zawieranie typów Drawing w DrawingImage 1103
  Używanie obrazów wektorowych 1103
    Konwersja przykładowego pliku z grafiką wektorową na XAML 1104
    Importowanie danych graficznych do projektu WPF 1106
    Komunikacja ze znakiem 1106
  Renderowanie danych graficznych za pomocą warstwy wizualizacji 1108
    Bazowa klasa Visual i jej klasy potomne 1108
    Pierwsze kroki w używaniu klasy DrawingVisual 1109
    Renderowanie danych wizualnych w niestandardowym menedżerze rozplanowania 1111
    Odpowiadanie na testowanie trafień 1113
  Podsumowanie 1114
  
  Rozdział 29 Zasoby, animacje, style i szablony WPF 1115
  System zasobów WPF 1115
    Używanie zasobów binarnych 1115
  Używanie zasobów obiektowych (logicznych) 1120
    Właściwość Resources 1121
    Definiowanie zasobów dla całego okna 1121
    Rozszerzenie {StaticResource} 1124
    Rozszerzenie {DynamicResource} 1125
    Zasoby dla całej aplikacji 1125
    Definiowanie łączonych słowników zasobów 1126
    Definiowanie pakietu zawierającego wyłącznie zasoby 1128
  Usługi animacji WPF 1130
    Rola klas z rodziny Animation 1130
    Właściwości To, From i By 1131
    Rola klasy bazowej Timeline 1131
    Tworzenie animacji w kodzie C# 1132
    Kontrolowanie tempa animacji 1133
    Odtwarzanie animacji od tyłu i zapętlanie 1134
  Tworzenie animacji w XAML 1135
    Rola scenopisów 1136
    Rola wyzwalaczy zdarzeń 1136
    Animacja z użyciem nieciągłych ramek kluczowych 1137
  Rola stylów WPF 1138
    Definiowanie i stosowanie stylu 1138
    Nadpisywanie ustawień stylu 1139
    Ograniczanie stosowania stylu za pomocą TargetType 1139
    Automatycznie stosowanie stylu za pomocą TargetType 1140
    Wyprowadzanie podklas z istniejących stylów 1141
    Definiowanie stylów za pomocą wyzwalaczy 1141
    Definiowanie stylów z wieloma wyzwalaczami 1142
    Style animowane 1143
    Przypisywanie stylów programistycznie 1143
  Drzewa logiczne, drzewa wizualne i szablony domyślne 1144
    Analiza drzewa logicznego w kodzie programu 1145
    Analiza drzewa wizualnego w kodzie programu 1147
    Analiza domyślnego szablonu kontrolki w kodzie programu 1148
  Tworzenie szablonu kontrolki za pomocą platformy wyzwalaczy 1151
    Szablony jako zasoby 1152
    Wstawianie wizualnych wskazówek za pomocą wyzwalaczy 1154
    Rola rozszerzenia {TemplateBinding} 1155
    Klasa ContentPresenter 1156
    Wstawianie szablonów do stylów 1157
  Podsumowanie 1158
  
  Rozdział 30 Powiadomienia, polecenia, sprawdzanie prawidłowości danych i MVVM 1159
  Wprowadzenie do wzorca MVVM (Model-View-ViewModel) 1160
    Model 1160
    View 1160
    ViewModel 1160
    Anemic Model czy Anemic ViewModel 1160
  System dowiązywania powiadomień WPF 1161
    Obserwowane modele i kolekcje 1161
    Dodawanie dowiązań i danych 1163
    Zmienianie danych samochodu w kodzie programu 1164
    Obserwowane modele 1165
    Obserwowane kolekcje 1168
  Walidacja 1176
    Modyfikacja przykładu na potrzeby walidacji 1176
    Klasa Validation 1178
    Opcje walidacji 1178
  Używanie adnotacji danych 1190
    Dodawanie adnotacji 1190
    Sprawdzanie błędów walidacyjnych na podstawie adnotacji 1191
    Dostosowywanie ErrorTemplate 1193
  Tworzenie niestandardowych poleceń 1194
    Implementowanie interfejsu ICommand 1194
    Modyfikacja pliku MainWindow.xaml.cs 1195
    Modyfikacja pliku MainWindow.xaml 1196
    Załączanie polecenia do CommandManager 1196
    Testowanie aplikacji 1197
    Dodawanie pozostałych poleceń 1198
  Pełna implementacja MVVM 1200
    Usuwanie źródła danych z widoku 1200
    Przenoszenie poleceń do klasy ViewModel 1201
  Modyfikacja AutoLotDAL pod kątem MVVM 1202
    Modyfikacja modeli AutoLotDAL 1202
  Pełny przykład MVVM 1204
    Używanie ObjectMaterialized z Entity Framework 1206
  Podsumowanie 1206
  
  Część VIII ASP.NET 1207
  
  Rozdział 31 Wprowadzenie do ASP.NET Web Forms 1209
  Rola HTTP 1209
    Cykl żądania/odpowiedzi HTTP 1209
    HTTP to protokół bezstanowy 1210
  Aplikacje internetowe i serwery www 1210
    Rola wirtualnych katalogów IIS 1211
    IIS Express 1211
  Rola HTML 1212
    Struktura dokumentu HTML 1212
    Rola formularza HTML 1213
    Narzędzia do projektowania HTML w Visual Studio 1214
    Tworzenie formularza HTML 1216
  Rola skryptów po stronie klienta 1217
    Przykładowy skrypt po stronie klienta 1218
  Odesłania na serwer www 1219
    Odesłania w Web Forms 1220
  Przegląd API Web Forms 1220
    Najważniejsze funkcje Web Forms 2.0 i wyższych wersji 1222
    Najważniejsze funkcje Web Forms 3.5 (i NET 3.5 SP1) i wyższych wersji 1222
    Najważniejsze funkcje Web Forms 4.0 1223
    Najważniejsze funkcje Web Forms 4.5 i 4.6 1223
  Tworzenie jednoplikowej internetowej aplikacji Web Forms 1224
    Odwołanie do AutoLotDAL.dll 1226
    Projektowanie interfejsu użytkownika 1227
    Dodawanie kodu dostępu do danych 1228
    Dyrektywy ASP.NET 1230
    Analiza bloku ze „skryptem” 1231
    Analiza deklaracji kontrolek ASP.NET 1231
  Tworzenie internetowej strony ASP.NET za pomocą plików z kodem 1232
    Odwołanie do projektu AutoLotDAL 1233
    Modyfikacja pliku z kodem 1234
    Debugowanie i śledzenie stron ASP.NET 1235
  Witryny i aplikacje internetowe ASP.NET 1236
    Włączanie C# 6 dla internetowych witryn ASP.NET 1237
  Struktura katalogów witryny internetowej ASP.NET 1237
    Odwołania do pakietów 1238
    Rola folderu App_Code 1238
  Łańcuch dziedziczenia typu Page 1239
  Komunikacja z wchodzącym żądaniem HTTP 1240
    Uzyskiwanie statystyk przeglądarki 1241
    Dostęp do przychodzących danych z formularza 1243
    Właściwość IsPostBack 1244
  Komunikacja z wychodzącą odpowiedzią HTTP 1244
    Wysyłanie zawartości HTML 1245
    Przekierowywanie użytkowników 1245
  Cykl życiowy internetowej strony ASP.NET 1246
    Rola atrybutu AutoEventWireup 1247
    Zdarzenie Error 1248
  Rola pliku Web.config 1249
    Program narzędziowy do zarządzania internetową witryną ASP.NET 1250
  Podsumowanie 1250
  
  Rozdział 32 Kontrolki internetowe, strony wzorcowe i motywy ASP.NET 1251
  Omówienie roli kontrolek internetowych 1251
    Obsługa zdarzeń po stronie serwera 1252
    Właściwość AutoPostBack 1252
  Bazowe klasy Control i WebControl 1253
    Wyliczanie zawieranych kontrolek 1254
    Dynamiczne dodawanie i usuwanie kontrolek 1256
    Komunikacja z utworzonymi dynamicznie kontrolkami 1257
    Funkcjonalność bazowej klasy WebControl 1258
  Najważniejsze kategorie kontrolek Web Forms 1258
    Kilka słów na temat System.Web.UI.HtmlControls 1261
    Dokumentacja kontrolek www 1261
  Tworzenie internetowej witryny Web Forms o nazwie Cars 1262
    Używanie stron wzorcowych Web Forms 1262
    Konfiguracja nawigacji po witrynie za pomocą kontrolki TreeView 1264
    Nawigacja okruszkowa z wykorzystaniem typu SiteMapPath 1267
    Konfiguracja kontrolki AdRotator 1267
    Definiowanie niestandardowej strony z zawartością 1268
    Projektowanie strony z zawartością Inventory 1270
    Dodawanie AutoLotDAL i Entity Framework do AspNetCarsSite 1270
    Wypełnianie kontrolki GridView danymi 1270
    Włączanie edycji na miejscu 1272
    Włączanie sortowania i stronicowania 1274
    Włączanie filtrowania 1274
    Projektowanie strony z zawartością Build-a-Car 1276
  Rola kontrolek walidacyjnych 1278
    Włączanie obsługi walidacji JavaScript po stronie klienta 1280
    Kontrolka RequiredFieldValidator 1280
    Kontrolka RegularExpressionValidator 1280
    Kontrolka RangeValidator 1281
    Kontrolka CompareValidator 1281
    Tworzenie podsumowania walidacji 1282
    Definiowanie grup walidacji 1283
    Walidacja z adnotacjami danych 1284
  Używanie motywów 1289
    Omówienie plików * skin 1289
    Stosowanie motywów na całą witrynę 1291
    Stosowanie motywów na poziomie strony 1292
    Właściwość SkinID 1292
    Przypisywanie motywów programistycznie 1292
  Podsumowanie 1294
  
  Rozdział 33 Techniki zarządzania stanem ASP.NET 1295
  Kwestia stanu 1295
  Techniki zarządzania stanem ASP.NET 1297
  Rola stanu widoku ASP.NET 1298
    Przykład ze stanem widoku 1298
    Dodawanie niestandardowych danych stanu widoku 1299
  Znaczenie pliku Global asax 1300
    Globalna procedura ostatniej szansy obsługi wyjątku 1302
    Bazowa klasa HttpApplication 1302
  Różnica między aplikacją i sesją 1302
    Zarządzanie danymi o stanie na poziomie aplikacji 1303
    Modyfikowanie danych aplikacji 1305
    Obsługa zamykania aplikacji internetowej 1306
  Używanie bufora aplikacji 1307
    Przykład z buforowaniem danych 1307
    Modyfikowanie pliku * aspx 1309
  Zarządzanie danymi sesji 1311
    Dodatkowe składowe HttpSessionState 1314
  Omówienie plików cookie 1315
    Tworzenie plików cookie 1315
    Wczytywanie wejściowych danych cookie 1316
  Rola elementu 1317
    Zapisywanie danych sesji w serwerze stanu sesji ASP.NET 1317
    Zapisywanie danych sesji w dedykowanej bazie danych 1318
  Wprowadzenie do API ASP.NET Profile 1319
    Baza danych ASPNETDB mdf 1319
    Definiowanie profilu użytkownika w pliku web config 1320
    Programistyczny dostęp do danych profilu 1321
    Grupowanie danych profili i utrwalanie obiektów niestandardowych 1323
  Podsumowanie 1325
  
  Rozdział 34 ASP.NET MVC i API Web 1327
  Wprowadzenie do wzorca MVC 1327
    Model 1327
    Widok 1328
    Kontroler 1328
    Dlaczego MVC? 1328
    Pojawia się ASP.NET MVC 1329
  Tworzenie pierwszej aplikacji ASP.NET MVC 1329
    Kreator nowego projektu 1329
    Komponenty bazowego projektu MVC 1332
    Aktualizacja pakietów NuGet do bieżących wersji 1337
    Testowanie witryny 1337
  Trasowanie 1339
    Wzorce URL 1339
    Tworzenie tras dla stron Contact i About 1340
    Przekierowywanie użytkowników za pomocą trasowania 1340
  Dodawanie AutoLotDAL 1341
  Kontrolery i akcje 1342
    Dodawanie kontrolera Inventory 1342
    Omówienie „rusztowań” widoków 1344
    Kontrolery MVC 1345
  Widoki MVC 1353
    Silnik widoków Razor 1353
    Rozmieszczenia 1355
    Widoki częściowe 1357
    Wysyłanie danych do widoku 1358
    Widok Index 1359
    Widok Details 1362
    Widok Create 1363
    Widok Delete 1365
    Widok Edit 1367
    Walidacja 1368
    Wykańczanie interfejsu użytkownika 1370
    Ostatnie słowo na temat ASP.NET MVC 1372
  Wprowadzenie do API ASP.NET Web 1373
    Dodawanie projektu API Web 1373
    Analiza projektu API Web 1375
    Konfiguracja projektu 1375
    Słowo na temat JSON 1376
    Dodawanie kontrolera 1377
    Modyfikacja CarLotMVC, aby używać CarLotWebAPI 1383
  Podsumowanie 1389
  
  Indeks 1391
RozwińZwiń
W celu zapewnienia wysokiej jakości świadczonych przez nas usług, nasz portal internetowy wykorzystuje informacje przechowywane w przeglądarce internetowej w formie tzw. „cookies”. Poruszając się po naszej stronie internetowej wyrażasz zgodę na wykorzystywanie przez nas „cookies”. Informacje o przechowywaniu „cookies”, warunkach ich przechowywania i uzyskiwania dostępu do nich znajdują się w Regulaminie.

Nie pokazuj więcej tego powiadomienia