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

Transkrypt

Microsoft Visual C# 2012 : krok po kroku / John Sharp. – Warszawa
Microsoft Visual C# 2012 : krok po kroku / John Sharp. – Warszawa,
2013
Spis treści
Wstęp
xiii
Część I: Wprowadzenie do języka Microsoft Visual C#
oraz programu Microsoft Visual Studio 2012
1 Wprowadzenie do języka C#
Rozpoczynamy programowanie przy uŜyciu środowiska Visual Studio 2012
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
33
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
59
60
61
68
68
69
70
71
72
73
74
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
75
75
76
77
80
82
83
84
84
85
95
97
97
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
107
107
108
108
109
110
111
112
112
114
115
121
122
123
127
128
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
129
129
131
138
139
140
150
151
6 Obsługa błędów i wyjątków
153
98
104
104
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 б
154
154
156
157
158
165
168
169
170
172
179
181
181
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
185
186
186
187
188
190
192
201
202
203
204
207
208
209
8 Wartości i referencje
Kopiowanie klas oraz zmiennych typu wartościowego
Wartości Null oraz typy danych dopuszczające stosowanie wartości Null
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
211
211
218
220
221
222
223
224
226
228
229
230
231
Bezpieczne rzutowanie danych
Operator is
Operator as
Podsumowanie
Krótki przegląd rozdziału 8
233
233
233
236
237
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
239
239
240
240
241
242
245
247
248
250
251
256
261
261
10 Tablice
263
Deklarowanie i tworzenie tablicy
263
Deklarowanie zmiennych tablicowych
264
Tworzenie instancji tablicy
264
Wypełnianie tablic danymi i ich uŜywanie
266
Tworzenie tablic o niejawnie określonym typie elementów
267
Korzystanie z indywidualnych elementów tablicy
268
Wykonywanie iteracji poprzez elementy tablicy
269
Przekazywanie tablic jako parametrów i zwracanie ich jako wartości metod 270
Kopiowanie tablic
273
Tablice wielowymiarowe
274
Tworzenie tablic nieregularnych
275
Podsumowanie
287
Krótki przegląd rozdziału 10
288
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
289
289
290
292
295
296
299
302
Krótki przegląd rozdziału 11
302
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
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
303
303
304
306
307
308
310
311
313
316
322
327
327
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
329
330
331
331
333
334
335
337
338
349
350
351
351
352
360
361
14 Proces oczyszczania pamięci i zarządzanie zasobami
śywot obiektów
Tworzenie destruktorów
Dlaczego istnieje proces oczyszczania pamięci?
Sposób działania 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
363
364
365
367
369
370
371
371
372
373
374
Implementacja metody sprzątającej w sposób odporny na występowanie
wyjątków
Podsumowanie
Krótki przegląd rozdziału 14
377
386
387
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
391
391
393
396
396
397
397
398
399
401
406
407
412
412
16 Indeksatory
Co to jest indeksator?
Przykład bez uŜycia indeksatorów
Ten sam przykład z wykorzystaniem indeksatorów
Akcesory indeksatora
Indeksatory w interfejsach
Stosowanie indeksatorów w aplikacjach Windows
Podsumowanie
Krótki przegląd rozdziału 16
415
415
415
418
420
423
424
431
431
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 i 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
Interfejsy kontrawariantne
433
433
437
439
440
440
440
444
453
454
456
458
460
Podsumowanie
Krótki przegląd rozdziału 17
462
463
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 478
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
465
465
467
470
471
472
474
475
476
19 Wyliczanie kolekcji
Wyliczanie elementów kolekcji
Ręczna implementacja modułu wyliczającego
Implementowanie interfejsu !Enumerable
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
489
489
491
495
498
498
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
Zgłaszanie zdarzenia
505
506
507
508
510
510
513
522
523
524
526
526
527
528
528
479
481
481
486
486
500
503
503
Zdarzenia interfejsu uŜytkownika
UŜywanie zdarzeń
Podsumowanie
Krótki przegląd rozdziału 20
529
530
537
538
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<TItem>
LINQ i opóźnione przetwarzanie
Podsumowanie
Krótki przegląd rozdziału 21
541
542
543
544
547
548
550
551
554
560
564
564
22 PrzeciąŜanie operatorów
Czym są operatory
Ograniczenia operatorów
Operatory przeciąŜone
Tworzenie operatorów symetrycznych
Jak wygląda 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
567
567
568
569
570
572
573
574
575
576
583
583
584
585
586
589
589
Część IV: Tworzenie profesjonalnych aplikacji w C# dla Windows 8
23 Przyśpieszanie działania za pomocą zadań
593
Po co stosować wielozadaniowość przy uŜyciu przetwarzania równoległego? 593
Narodziny procesora wielordzeniowego
595
Implementowanie wielozadaniowości w .NET Framework
596
Zadania, wątki i pula wątków
597
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
598
601
612
617
619
619
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
637
638
639
642
648
649
653
631
634
634
653
658
659
662
662
665
666
667
677
678
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
681
682
686
689
720
730
731
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 mechanizmu wiązania danych
733
734
735
741
Stosowanie wiązania danych do kontrolki ComboBox
Tworzenie składnika ViewModel
Dodawanie poleceń do składnika ViewModel
Kontrakty systemu Windows 8
Implementowanie kontraktu Search
Nawigowanie do wybranego elementu
Uruchamianie aplikacji za pomocą elementu Search paska Charms
Podsumowanie
Krótki przegląd rozdziału 26
27 Dostęp do zdalnej bazy danych z poziomu aplikacji Sklepu
Windows
Pobieranie danych z bazy danych
Utworzenie modelu encji
Tworzenie i wykorzystywanie usługi danych
Wstawianie, aktualizowanie i usuwanie informacji w bazie danych
Wykonywanie operacji wstawiania, aktualizowania i usuwania danych
za pośrednictwem usługi danych WCF
Raportowanie błędów i aktualizowanie interfejsu uŜytkownika
Podsumowanie
Krótki przegląd rozdziału 27
Indeks
745
748
752
763
765
775
778
782
785
787
788
789
796
809
809
820
828
829
831
oprac. BPK