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