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