Microsoft Visual C# 2013 : krok po kroku / John Sharp. – Warszawa

Transkrypt

Microsoft Visual C# 2013 : krok po kroku / John Sharp. – Warszawa
Microsoft Visual C# 2013 : krok po kroku / John Sharp. – Warszawa,
cop. 2013
Spis treści
Wstęp
xiii
Część I: Wprowadzenie do języka Microsoft Visual C#
oraz programu Microsoft Visual Studio 2013
1 Wprowadzenie do języka C#
Rozpoczynamy programowanie przy uŜyciu środowiska Visual Studio 2013
Piszemy pierwszy program
Przestrzenie nazw
Tworzenie aplikacji graficznej
Analiza aplikacji Sklepu Windows
Analiza aplikacji WPF
Dodawanie kodu do aplikacji graficznej
Podsumowanie
Krótki przegląd rozdziału 1
3
3
9
16
20
35
38
40
43
44
2 Zmienne, operatory i wyraŜenia
Instrukcje
Identyfikatory
Słowa kluczowe
Zmienne
Nazywanie zmiennych
Deklarowanie zmiennych
Podstawowe typy danych
Zmienne lokalne bez przypisanej wartości
Wyświetlanie wartości podstawowych typów danych
Posługiwanie się operatorami arytmetycznymi
Operatory i typy danych
Poznajemy operatory arytmetyczne
Kontrolowanie pierwszeństwa
Stosowanie zasad łączności przy wyznaczaniu wartości wyraŜeń
Zasady łączności a operator przypisania
Inkrementacja i dekrementacja wartości zmiennych
Formy przyrostkowe i przedrostkowe
Deklarowanie zmiennych lokalnych o niejawnie określonym typie danych
Podsumowanie
Krótki przegląd rozdziału 2
45
45
46
47
48
48
49
50
50
51
60
60
62
68
69
70
71
72
73
74
75
3 Tworzenie metod i stosowanie zasięgów zmiennych
Tworzenie metod
Deklarowanie metody
Zwracanie danych przez metodę
Wywoływanie metod
Stosowanie zasięgu
Definiowanie zasięgu lokalnego
Definiowanie zasięgu klasy
PrzeciąŜanie metod
Tworzenie metod
Stosowanie parametrów opcjonalnych oraz nazwanych argumentów
Definiowanie parametrów opcjonalnych
Przekazywanie nazwanych argumentów
Rozwiązywanie niejednoznaczności związanych z parametrami
opcjonalnymi i argumentami nazwanymi
Podsumowanie
Krótki przegląd rozdziału 3
77
77
78
79
82
84
85
86
86
87
97
99
100
4 Instrukcje wyboru
Deklarowanie zmiennych logicznych
Stosowanie operatorów logicznych
Operatory równościowe oraz operatory relacji
Warunkowe operatory logiczne
Skracanie działania
Podsumowanie informacji o pierwszeństwie oraz łączności operatorów
Podejmowanie decyzji przy uŜyciu instrukcji if.
Składnia instrukcji if
Grupowanie instrukcji w bloki
Kaskadowe łączenie instrukcji if
Stosowanie instrukcji switch
Składnia instrukcji switch
Reguły stosowania instrukcji switch
Podsumowanie
Krótki przegląd rozdziału 4
109
109
110
110
111
112
113
114
114
116
117
123
124
125
129
130
5 ZłoŜone instrukcje przypisania oraz instrukcje iteracji
ZłoŜone operatory przypisania
Instrukcja while
Instrukcja for
Zasięg instrukcji for
Instrukcja do
Podsumowanie
Krótki przegląd rozdziału 5
131
131
133
140
141
142
152
153
6 Obsługa błędów i wyjątków
155
100
107
107
Zmaganie się z błędami
Wypróbowywanie kodu i przechwytywanie wyjątków
NieobsłuŜone wyjątki
Stosowanie kilku bloków obsługi pułapki
Przechwytywanie wielu wyjątków
Propagowanie wyjątków
Wykonywanie operacji arytmetycznych z kontrolą lub bez kontroli
przepełnienia
Pisanie instrukcji objętych kontrolą przepełniania
Pisanie wyraŜeń objętych kontrolą przepełniania
Zgłaszanie wyjątków
Stosowanie bloku finally
Podsumowanie
Krótki przegląd rozdziału б
156
156
158
159
160
167
170
171
172
175
181
183
183
Część II: Omówienie modelu obiektowego języka C#
7 Tworzenie i zarządzanie klasami oraz obiektami
Omówienie klasyfikacji
Cele hermetyzacji
Definiowanie i uŜywanie klas
Kontrolowanie dostępności
Konstruktory
PrzeciąŜanie konstruktorów
Metody i dane statyczne
Tworzenie pól współdzielonych
Tworzenie pól statycznych przy uŜyciu słowa kluczowego const
Klasy statyczne
Klasy anonimowe
Podsumowanie
Krótki przegląd rozdziału 7
187
188
188
189
190
193
194
204
205
206
206
209
211
211
8 Wartości i referencje
Kopiowanie klas oraz zmiennych typu wartościowego
Wartości nuli oraz typy danych dopuszczające stosowanie wartości nuli
Typy danych dopuszczające stosowanie wartości Null
Właściwości typów danych dopuszczających stosowanie wartości Null
UŜywanie parametrów typu ref i out
Tworzenie parametrów typu ref
Tworzenie parametrów typu out
Sposób organizacji pamięci komputera
Korzystanie ze stosu oraz ze sterty
Klasa System.Object
Opakowywanie typów danych wewnątrz obiektów
Rozpakowywanie typów danych, opakowanych wewnątrz obiektów
213
213
220
222
223
224
225
226
228
230
231
232
233
Bezpieczne rzutowanie danych
Operator is
Operator as
Podsumowanie
Krótki przegląd rozdziału 8
235
235
236
238
239
9 Tworzenie typów wartości przy uŜyciu wyliczeń oraz struktur
Wyliczeniowe typy danych
Deklarowanie wyliczeniowego typu danych
Stosowanie wyliczeniowych typów danych
Wybór wartości literałów wyliczeniowych
Wybór typu danych uŜywanego do wewnętrznego reprezentowania
wartości wyliczeniowych
Struktury
Deklarowanie struktury
Omówienie róŜnic pomiędzy strukturami i klasami
Deklarowanie zmiennych strukturalnych
Omówienie inicjalizacji struktur
Kopiowanie zmiennych strukturalnych
Podsumowanie
Krótki przegląd rozdziału 9
241
241
242
242
243
244
247
249
250
252
253
258
263
263
10 Tablice
265
Deklarowanie i tworzenie tablicy
265
Deklarowanie zmiennych tablicowych
266
Tworzenie instancji tablicy
266
Wypełnianie tablic danymi i ich uŜywanie
268
Tworzenie tablic o niejawnie określonym typie elementów
269
Korzystanie z indywidualnych elementów tablicy
270
Wykonywanie iteracji poprzez elementy tablicy
271
Przekazywanie tablic jako parametrów i zwracanie ich jako wartości metod 272
Kopiowanie tablic
275
Tablice wielowymiarowe
276
Tworzenie tablic nieregularnych
277
Podsumowanie
289
Krótki przegląd rozdziału 10
289
11 Tablice parametrów
PrzeciąŜanie: krótkie przypomnienie faktów
UŜywanie argumentów będących tablicami
Deklarowanie tablicy parametrów typu params
UŜywanie parametru typu params object[]
Stosowanie tablicy parametrów typu params
Porównanie tablic parametrów z parametrami opcjonalnymi
Podsumowanie
291
291
292
294
297
298
301
304
Krótki przegląd rozdziału 11
304
12 Dziedziczenie
Czym jest dziedziczenie?
Korzystanie z mechanizmów dziedziczenia
Powtórka informacji na temat klasy System.Object
Wywoływanie konstruktora klasy bazowej
Przypisywanie klas
Deklarowanie metod z uŜyciem słowa kluczowego new
Deklarowanie metod wirtualnych
313
Deklarowanie metod z uŜyciem słowa kluczowego override
Omówienie dostępu chronionego
Metody rozszerzające
Podsumowanie
Krótki przegląd rozdziału 12
305
305
306
308
309
310
312
13 Tworzenie interfejsów oraz definiowanie klas abstrakcyjnych
Interfejsy
Definiowanie interfejsu
Implementowanie interfejsu
Odwoływanie się do klasy za pomocą jej interfejsu
Praca z wieloma interfejsami
Jawne implementowanie interfejsu
Ograniczenia interfejsów
Definiowanie i uŜywanie interfejsów
Klasy abstrakcyjne
Metody abstrakcyjne
Klasy zamknięte
Metody zamknięte
Implementowanie i uŜywanie klas abstrakcyjnych
Podsumowanie
Krótki przegląd rozdziału 13
331
332
333
333
335
336
337
339
340
351
353
353
354
354
362
363
14 Proces oczyszczania pamięci i zarządzanie zasobami
śywot obiektów
Tworzenie destruktorów
Dlaczego istnieje proces oczyszczania pamięci?
Działanie procesu oczyszczania pamięci
Zalecenia
Zarządzanie zasobami
Metody sprzątające
Sprzątanie w sposób odporny na występowanie wyjątków
Instrukcja using oraz interfejs IDisposable
Wywoływanie metody Dispose z poziomu destruktora
365
366
367
369
371
372
373
373
374
375
376
315
318
324
329
329
Implementacja metody sprzątającej w sposób odporny na występowanie
wyjątków
Podsumowanie
Krótki przegląd rozdziału 14
379
388
389
Część III: Tworzenie rozszerzalnych typów danych w języku C#
15 Implementacja właściwości zapewniających dostęp do pól
Implementacja kapsułkowania przy uŜyciu metod
Co to są właściwości?
UŜywanie właściwości
Właściwości tylko do odczytu
Właściwości tylko do zapisu
Dostępność właściwości
Ograniczenia właściwości
Deklarowanie właściwości interfejsu
Zastępowanie metod właściwościami
Generowanie automatycznych właściwości
Inicjalizowanie obiektów przy uŜyciu właściwości
Podsumowanie
Krótki przegląd rozdziału 15
393
393
395
398
398
399
400
400
402
404
408
409
414
414
16 Indeksatory
Co to jest indeksator?
Przykład bez uŜycia indeksatorów
Ten sam przykład z wykorzystaniem indeksatorów
Akcesory indeksatora
Porównanie indeksatorów i tablic
Indeksatory w interfejsach
Stosowanie indeksatorów w aplikacjach Windows
Podsumowanie
Krótki przegląd rozdziału 16
417
417
417
420
422
423
424
426
432
433
17 Typy ogólne
Problem z typem Object
Rozwiązanie z uŜyciem typów ogólnych
Typy ogólne a klasy uogólnione
Typy ogólne і nakładanie ograniczeń
Tworzenie klasy ogólnej
Teoria drzew binarnych
Budowanie klasy drzewa binarnego przy uŜyciu typu ogólnego
Tworzenie metody ogólnej
Definiowanie metody ogólnej do budowy drzewa binarnego
Interfejsy ogólne i niezgodność typów
Interfejsy kowariantne
435
435
439
441
442
442
442
446
455
456
458
460
Interfejsy kontrawariantne
Podsumowanie
Krótki przegląd rozdziału 17
462
464
465
18 Kolekcje
Co to są klasy kolekcji?
Klasa kolekcji List<T>
Klasa kolekcji LinkedList<T>
Klasa kolekcji Queue<T>
Klasa kolejki Stack<T>
Klasa kolekcji Dictionary<TKey, TValue>
Klasa kolekcji SortedList<TKey, TValue>
Klasa kolekcji HashSet<T>
Inicjalizowanie kolekcji
Metody Find, predykaty i wyraŜenia lambda
Porównanie tablic i kolekcji
Wykorzystanie klas kolekcji do gry w karty
Podsumowanie
Krótki przegląd rozdziału 18
467
467
469
472
473
474
476
477
478
480
481
483
483
488
488
19 Wyliczanie kolekcji
Wyliczanie elementów kolekcji
Ręczna implementacja modułu wyliczającego
Implementowanie interfejsu IEnumerable
Implementowanie modułu wyliczającego przy uŜyciu iteratora
Prosty iterator
Definiowanie modułu wyliczającego dla klasy Tree<Tltem> przy uŜyciu
iteratora
Podsumowanie
Krótki przegląd rozdziału 19
491
491
493
497
500
500
20 Wydzielanie logiki aplikacji i obsługa zdarzeń
Co to są delegaty
Przykłady delegatów w bibliotece klas .NET Framework
Przykład zautomatyzowanej fabryki
Implementowanie systemu sterowania fabryką bez uŜycia delegatów
Implementowanie sterowania fabryką przy uŜyciu delegata
Deklarowanie i uŜywanie delegatów
Delegaty i wyraŜenia lambda
Tworzenie adaptera metody
RóŜne formy wyraŜeń lambda
Włączanie powiadomień za pomocą zdarzeń
Deklarowanie zdarzenia
Subskrypcja zdarzenia
Anulowanie subskrypcji zdarzenia
507
508
509
511
512
512
515
525
525
526
528
528
529
530
502
505
505
Zgłaszanie zdarzenia
Zdarzenia interfejsu uŜytkownika
UŜywanie zdarzeń
Podsumowanie
Krótki przegląd rozdziału 20
530
531
533
540
540
21 Odpytywanie danych w pamięci przy uŜyciu wyraŜeń w języku
zapytań
Co to jest LINQ (Language-Integrated Query)?
UŜywanie LINQ w aplikacjach C#
Wybieranie danych
Filtrowanie danych
Porządkowanie, grupowanie i agregowanie danych
Łączenie danych
Operatory zapytań
Odpytywanie danych w obiektach Tree<Tltem>
LINQ i opóźnione przetwarzanie
Podsumowanie
Krótki przegląd rozdziału 21
543
544
545
546
549
550
552
553
556
562
566
566
22 PrzeciąŜanie operatorów
Czym są operatory
Ograniczenia operatorów
Operatory przeciąŜone
Tworzenie operatorów symetrycznych
Przetwarzanie złoŜonej instrukcji przypisania
Deklarowanie operatorów zwiększających i zmniejszających
Operatory porównań w strukturach i klasach
Definiowanie par operatorów
Implementowanie operatorów
Operatory konwersji
Wbudowane metody konwersji
Implementowanie własnych operatorów konwersji
Tworzenie operatorów symetrycznych - uzupełnienie
Zapisywanie operatorów konwersji
Podsumowanie
Krótki przegląd rozdziału 22
569
569
570
571
572
574
575
576
577
578
585
585
586
587
588
591
591
Część IV: Tworzenie profesjonalnych aplikacji dla Windows 8.1
23 Przyśpieszanie działania za pomocą zadań
595
Po co stosować wielozadaniowość przy uŜyciu przetwarzania równoległego? 595
Narodziny procesora wielordzeniowego
597
Implementowanie wielozadaniowości w .NET Framework
598
Zadania, wątki i pula wątków
599
Tworzenie, uruchamianie i kontrolowanie zadań
UŜywanie klasy Task do implementacji równoległości
Tworzenie abstrakcji zadań za pomocą klasy Parallel
Kiedy nie uŜywać klasy Parallel
Anulowanie zadań i obsługa wyjątków
Mechanizm anulowania kooperatywnego
Kontynuowanie w przypadku zadań anulowanych lub przerwanych
z powodu wyjątku
Podsumowanie
Krótki przegląd rozdziału 23
600
603
614
619
621
622
24 Skracanie czasu reakcji za pomocą działań asynchronicznych
Implementowanie metod asynchronicznych
Definiowanie metod asynchronicznych: postawienie problemu
Definiowanie metod asynchronicznych: rozwiązanie
Definiowanie metod asynchronicznych zwracających wartości
Metody asynchroniczne i interfejsy API środowiska Windows Runtime
Zrównoleglanie deklaratywnego dostępu do danych za pomocą PLINQ
Wykorzystanie PLINQ do poprawy wydajności podczas wykonywania
iteracji po elementach kolekcji
Anulowanie zapytania PLINQ
Synchronizowanie współbieŜnych operacji dostępu do danych
Blokowanie danych
Elementarne narzędzia synchronizacji umoŜliwiające koordynowanie zadań
Anulowanie synchronizacji
WspółbieŜne klasy kolekcji
Wykorzystanie kolekcji współbieŜnej i blokady do implementacji dostępu
do danych przystosowanego do trybu wielowątkowego
Podsumowanie
Krótki przegląd rozdziału 24
641
642
643
646
652
653
657
636
637
637
657
663
663
666
667
670
670
671
682
682
25 Implementowanie interfejsu uŜytkownika aplikacji Sklepu
Windows
Co to jest aplikacja Sklepu Windows?
Budowa aplikacji Sklepu Windows przy uŜyciu szablonu Blank App
Implementowanie skalowalnego interfejsu uŜytkownika
Stosowanie stylów do interfejsu uŜytkownika
Podsumowanie
Krótki przegląd rozdziału 25
685
686
690
693
726
736
736
26 Wyświetlanie i wyszukiwanie danych w aplikacjach Sklepu
Windows
Implementowanie wzorca projektowego Model-View-ViewModel
Wyświetlanie danych przy uŜyciu mechanizmu wiązania danych
Modyfikowanie danych przy uŜyciu wiązania danych
739
740
741
747
Stosowanie wiązania danych do kontrolki ComboBox
Tworzenie składnika ViewModel
Dodawanie poleceń do składnika ViewModel
Kontrakty systemu Windows 8.1
Implementowanie kontraktu Search
Nawigowanie do wybranego elementu
Podsumowanie
Krótki przegląd rozdziału 26
27 Dostęp do zdalnej bazy danych z poziomu aplikacji Sklepu
Windows
Pobieranie informacji z bazy danych
Wstawianie, aktualizacja i usuwanie danych za pośrednictwem usługi
web typu REST
Podsumowanie
Krótki przegląd rozdziału 27
Indeks
751
753
758
769
770
782
787
788
789
790
810
829
830
833
oprac. BPK