C# / Andrew Stellman, Jennifer Greene.

Transkrypt

C# / Andrew Stellman, Jennifer Greene.
C# / Andrew Stellman, Jennifer Greene. - wyd. 2. – Gliwice, cop. 2011
Spis treści
Wstęp
Dla kogo jest ta ksiąŜka?
Wiemy, o czym myślisz
Metapoznanie: myślenie o myśleniu
Zmuś swój mózg do posłuszeństwa
Przeczytaj to
Grupa korektorów technicznych
Podziękowania
30
31
33
35
37
38
39
Rozdział 1. Aplikacje Visual Studio w 10 minut lub mniej
Dlaczego powinieneś uczyć się C#
C# oraz Visual Studio ułatwiają wiele czynności
PomóŜ dyrektorowi naczelnemu zrezygnować z papieru
Sprawdź potrzeby Twoich uŜytkowników, zanim zaczniesz tworzyć program
Oto program, który zamierzasz stworzyć
Co robisz w Visual Studio
Co Visual Studio robi za Ciebie
Stwórz interfejs uŜytkownika
Za kulisami Visual Studio
Dodaj coś do automatycznie wygenerowanego kodu
Potrzebujemy bazy danych do przechowywania naszych informacji
IDE utworzyło bazę danych
SQL jest swoim własnym językiem
Tworzenie tabeli dla listy kontaktowej
Zakończ tworzenie tabeli
Wstaw dane z kart do bazy
Połącz formularz z bazą danych, korzystając ze źródeł danych
Dodaj kontrolki powiązane z bazą danych do formularza
Jak zamienić TWOJĄ aplikację w aplikację WSZYSTKICH
PrzekaŜ aplikację innym uŜytkownikom
Jeszcze nie skończyłeś: przetestuj instalację
Stworzyłeś pełnowartościową aplikację bazodanową
42
43
44
45
46
48
48
52
54
55
58
59
59
60
65
66
68
70
75
76
77
78
Rozdział 2. Pod maską
Kiedy robisz to...
...IDE robi to
Skąd się biorą programy
IDE pomaga Ci kodować
Kiedy zmieniasz coś w IDE, zmieniasz takŜe swój kod
Anatomia programu
Twój program wie, gdzie zacząć
W tej samej przestrzeni nazw mogą być dwie klasy
Twoje programy uŜywają zmiennych do pracy z danymi
C# uŜywa znanych symboli matematycznych
UŜyj debugera, by zobaczyć, jak zmieniają się wartości zmiennych
Pętle wykonują czynność wielokrotnie
80
81
82
84
86
88
90
97
98
100
101
103
Kodowanie czas zacząć
Instrukcje if/else podejmują decyzje
Ustal warunki i sprawdź, czy są prawdziwe
Rozdział 3. Tworzenie kodu ma sens
W jaki sposób Maciek myśli o swoich problemach
W jaki sposób system nawigacyjny w samochodzie Maćka rozwiązuje jego
problemy
Klasa Navigator napisana przez Maćka posiada metody do ustalania i
modyfikacji tras
Wykorzystaj to, czego się nauczyłeś, do napisania prostego programu
uŜywającego klas
Maciek moŜe uŜyć obiektów do rozwiązania swojego problemu
UŜywasz klasy do utworzenia obiektu
Kiedy tworzysz obiekt na podstawie klasy, to taki obiekt nazywamy
instancją klasy
Lepsze rozwiązanie... uzyskane dzięki obiektom!
Instancja uŜywa pól do przechowywania informacji
Stwórzmy kilka instancji!
Dzięki za pamięć
Co Twój program ma na myśli
MoŜesz uŜywać nazw klas i metod w celu uczynienia kodu bardziej
intuicyjnym
Nadaj swojej klasie naturalną strukturę
Diagramy klas pozwalają w sensowny sposób zorganizować klasy
Utwórz klasę do pracy z kilkoma facetami
Utwórz projekt dla facetów
Utwórz formularz do interakcji z facetami
Jest jeszcze prostszy sposób inicjalizacji obiektów
Rozdział 4. Jest 10:00. Czy wiesz, gdzie są Twoje dane?
Typ zmiennej określa rodzaj danych, jakie zmienna moŜe przechowywać
Zmienna jest jak kubek z danymi
10 kilogramów danych w pięciokilogramowej torebce
Nawet wtedy, gdy liczba ma prawidłowy rozmiar, nie moŜesz przypisać
jej do kaŜdej zmiennej
Kiedy rzutujesz wartość, która jest zbyt duŜa, C# dopasowuje
ją automatycznie
C# przeprowadza niektóre rzutowania automatycznie
Kiedy wywołujesz metodę, zmienne muszą pasować do typów parametrów
Połączenie = z operatorem
TakŜe obiekty uŜywają zmiennych
Korzystaj ze swoich obiektów za pomocą zmiennych referencyjnych
Referencje są jak etykiety do Twoich obiektów
JeŜeli nie ma juŜ Ŝadnej referencji, Twoje obiekty są usuwane z pamięci
Referencje wielokrotne i ich efekty uboczne
Dwie referencje oznaczają DWA sposoby na zmianę danych obiektu
Specjalny przypadek: tablice
Witamy w barze Niechlujny Janek - najtańsze kanapki w mieście!
Obiekty uŜywają referencji do komunikacji między sobą
104
105
106
122
123
124
125
128
129
130
131
136
137
138
139
140
142
144
148
149
150
153
160
162
163
164
165
166
167
172
173
174
175
176
177
182
183
185
187
Tam, gdzie obiektów jeszcze nie było
Napisz grę w literki
188
193
Laboratorium C# numer 1.
Dzień na wyścigach
Specyfikacja: stwórz symulator wyścigów
Końcowy produkt
202
210
Rozdział 5. Co ma być ukryte... niech będzie ukryte
Krystyna planuje przyjęcia
Co powinien robić program szacujący?
Jazda próbna Krystyny
KaŜda opcja powinna być obliczana osobno
Bardzo łatwo przez przypadek źle skorzystać z obiektów
Hermetyzacja oznacza, Ŝe niektóre dane w klasie są prywatne
UŜyj hermetyzacji w celu kontroli dostępu do metod i pól Twojej klasy
Ale czy jego prawdziwa toŜsamość jest NAPRAWDĘ chroniona?
Dostęp do prywatnych pól i metod moŜna uzyskać tylko z wnętrza klasy
Hermetyzacja utrzymuje Twoje dane w nieskazitelnym stanie
Właściwości sprawią, Ŝe hermetyzacja będzie łatwiejsza
Stwórz aplikację do przetestowania klasy Farmer
UŜyj automatycznych właściwości do ukończenia klasy
Co wtedy, gdy chcemy zmienić pole mnoŜnika wyŜywienia?
UŜyj konstruktora do inicjalizacji pól prywatnych
212
213
218
220
222
223
224
225
226
234
235
236
237
238
239
Rozdział 6. Drzewo genealogiczne Twoich obiektów
Krystyna organizuje takŜe przyjęcia urodzinowe
Potrzebujemy klasy BirthdayParty
Stwórz program Planista przyjęć w wersji 2.0
Kiedy klasy uŜywają dziedziczenia, kod musi być napisany tylko raz
Zbuduj model klasy, rozpoczynając od rzeczy ogólnych i przechodząc
do bardziej konkretnych
W jaki sposób zaprojektowałbyś symulator zoo?
UŜyj dziedziczenia w celu uniknięcia zwielokrotniania kodu w klasach
potomnych
Pomyśl, w jaki sposób pogrupować zwierzęta
Stwórz hierarchię klas
KaŜda klasa pochodna rozszerza klasę bazową
Klasa pochodna moŜe przesłaniać odziedziczone metody w celu ich
modyfikacji lub zmiany
W kaŜdym miejscu, gdzie moŜesz skorzystać z klasy bazowej,
moŜesz zamiast niej uŜyć jednej z jej klas pochodnych
Klasa pochodna moŜe ukrywać metody klasy bazowej
UŜywaj override i virtual, by dziedziczyć zachowania
Teraz jesteś juŜ gotowy do dokończenia zadania Krystyny
Stwórz system zarządzania ulem
Najpierw stworzysz system podstawowy
UŜyj dziedziczenia, aby rozszerzyć system zarządzania pszczołami
248
249
250
258
259
260
261
263
264
265
270
271
278
280
284
289
290
294
Rozdział 7. Klasy, które dotrzymują swoich obietnic
Wróćmy do pszczelej korporacji
MoŜemy uŜyć dziedziczenia do utworzenia klas dla róŜnych typów pszczół
Interfejs daje klasie do zrozumienia, Ŝe musi ona zaimplementować
określone metody i właściwości
UŜyj słowa kluczowego interface do zdefiniowania interfejsu
Klasy implementujące interfejsy muszą zawierać WSZYSTKIE ich metody
Nie moŜesz utworzyć instancji interfejsu, ale moŜesz uzyskać
jego referencję
Referencje interfejsów działają tak samo jak referencje obiektów
Za pomocą "is" moŜesz sprawdzić, czy klasa implementuje określony
interfejs
Interfejsy mogą dziedziczyć po innych interfejsach
Rzutowanie w górę działa w odniesieniu do obiektów i interfejsów
Rzutowanie w dół pozwala zamienić urządzenie z powrotem
w ekspres do kawy
Rzutowanie w górę i w dół działa takŜe w odniesieniu do interfejsów
Jest coś więcej niŜ tylko public i private
Modyfikatory dostępu zmieniają widoczność
Obiekty niektórych klas nigdy nie powinny być tworzone
Klasa abstrakcyjna jest jak skrzyŜowanie klasy i interfejsu
Metoda abstrakcyjna nie ma ciała
Polimorfizm oznacza, Ŝe jeden obiekt moŜe przyjmować
wiele róŜnych postaci
Rozdział 8. Przechowywanie duŜej ilości danych
Łańcuchy znaków nie zawsze sprawdzają się przy kategoryzowaniu danych
Typy wyliczeniowe pozwalają Ci wyliczyć prawidłowe wartości
Typy wyliczeniowe pozwalają na reprezentowanie liczb za pomocą nazw
MoŜesz uŜyć tablicy, aby stworzyć talię kart...
Listy są bardziej elastyczne niŜ tablice
Typy generyczne mogą przechowywać kaŜdy typ
Inicjalizatory kolekcji działają tak samo jak inicjalizatory obiektu
Stwórzmy listę kaczek
Listy są proste, ale SORTOWANIE moŜe być skomplikowane
IComparable<T> pomoŜe Ci posortować listę kaczek
UŜyj interfejsu IComparer, aby powiedzieć liście, jak ma sortować
Utwórz instancję obiektu porównującego
IComparer moŜe wykonywać złoŜone porównania
Przesłonienie metody ToString pozwala obiektom przedstawiać się
Zmień pętle foreach tak, by obiekty Duck i Card same się opisywały
UŜywając IEnumerable, moŜesz rzutować całą listę w górę
MoŜesz tworzyć własne przeciąŜone metody
Wybrane funkcjonalności słownika
Napisz program korzystający ze słownika
I jeszcze WIĘCEJ typów kolekcji...
Kolejka działa według reguły: pierwszy przyszedł, pierwszy wyszedł
Stos działa według reguły: ostatni przyszedł, pierwszy wyszedł
300
301
302
303
305
308
309
310
311
315
316
317
321
322
325
326
329
337
356
357
358
361
364
368
372
373
374
375
376
377
378
381
382
384
385
392
393
405
406
407
Laboratorium C# numer 2.
Wyprawa
Specyfikacja: utwórz grę przygodową
Zabawa dopiero się zaczyna!
Rozdział 9. Zapisz tablice bajtów, zapisz świat
C# uŜywa strumieni do zapisu i odczytu danych
RóŜne strumienie zapisują i odczytują róŜne rzeczy
FileStream zapisuje bajty do pliku
W jaki sposób zapisać tekst do pliku w trzech prostych krokach
Zapis i odczyt wymaga dwóch obiektów
Dane mogą przechodzić przez więcej niŜ jeden strumień
UŜyj wbudowanych obiektów do wyświetlenia standardowych
okien dialogowych
Okna dialogowe są kolejnymi kontrolkami .NET
Okna dialogowe takŜe są obiektami
UŜywaj wbudowanych klas File oraz Directory do pracy
z plikami i katalogami
UŜywaj okien dialogowych do otwierania i zapisywania plików
Dzięki IDisposable obiekty usuwane są prawidłowo
Unikaj błędów systemowych, korzystając z instrukcji using
Zapisywanie danych do plików wymaga wielu decyzji
UŜyj instrukcji switch do wyboru właściwej opcji
Serializacja pozwala Ci zapisywać lub odczytywać całe obiekty naraz
.NET automatycznie konwertuje tekst do postaci Unicode
C# moŜe uŜyć tablicy bajtów do przesyłania danych
Pliki utworzone dzięki serializacji moŜna takŜe zapisywać i
odczytywać ręcznie
Praca z plikami binarnymi moŜe być skomplikowana
StreamReader i StreamWriter będą do tego odpowiednie
UŜyj Stream.Read do odczytywania bajtów ze strumienia
Rozdział 10. Gaszenie poŜarów nie jest juŜ popularne
Damian potrzebuje swoich wymówek, aby być mobilnym
Kiedy program zgłasza wyjątek, .NET tworzy obiekt Exception
Wszystkie obiekty wyjątków dziedziczą po Exception
Debuger pozwala Ci wyśledzić wyjątki w kodzie i zapobiec im
UŜyj debugera wbudowanego w IDE, aby znaleźć problem w programie do
zarządzania wymówkami
ObsłuŜ wyjątki za pomocą try i catch
Co się stanie, jeŜeli wywoływana metoda będzie niebezpieczna?
UŜyj debugera do prześledzenia przepływu w blokach try/catch
Jeśli posiadasz kod, który ZAWSZE musi zostać wykonany, zastosuj finally
Jedna klasa zgłasza wyjątek, inna klasa go wyłapuje
Pszczoły potrzebują wyjątku OutOfHoney
Łatwy sposób na uniknięcie licznych problemów: using umoŜliwia Ci
stosowanie try i finally za darmo
Unikanie wyjątków: zaimplementuj IDisposable, aby przeprowadzić własne
procedury sprzątania
412
432
434
435
436
437
441
442
445
446
447
448
451
453
454
460
461
468
473
474
477
479
481
482
488
492
496
497
498
503
504
506
508
515
516
519
520
Najgorszy z moŜliwych bloków catch: komentarze
Tymczasowe rozwiązania są dobre tymczasowo
Kilka wskazówek dotyczących obsługi wyjątków
Damian w końcu pojechał na urlop...
522
523
524
527
Rozdział 11. Co robi Twój kod, kiedy nie patrzysz
Czy kiedykolwiek marzyłeś o tym, aby Twoje obiekty potrafiły
samodzielnie myśleć?
Ale skąd obiekt WIE, Ŝe ma odpowiedzieć?
Kiedy wystąpi ZDARZENIE... obiekty nasłuchują
Jeden obiekt wywołuje zdarzenie, inne nasłuchują...
Potem inne obiekty obsługują zdarzenie
Łącząc punkty
IDE automatycznie tworzy za Ciebie procedury obsługi zdarzeń
Ogólny typ EventHandler pozwala definiować własne typy zdarzeń
Wszystkie formularze, które utworzyłeś, uŜywają zdarzeń
Jedno zdarzenie, wiele procedur obsługi
Połączenie nadawców zdarzenia z jego odbiorcami
Delegat ZASTĘPUJE właściwą metodę
Delegat w akcji
KaŜdy obiekt moŜe subskrybować publiczne zdarzenie...
UŜyj funkcji zwrotnej, by wiedzieć, kto nasłuchuje
Funkcje zwrotne są jedynie sposobem uŜywania delegatów
530
530
531
532
533
534
538
544
545
546
548
549
550
553
554
556
Rozdział 12. Wiedza, moc i tworzenie ciekawych rzeczy
Przebyłeś długą drogę, mały
Zajmowaliśmy się takŜe pszczołami
Architektura symulatora ula
Budowanie symulatora ula
śycie i śmierć kwiatów
Teraz potrzebujemy klasy Bee
PPBP Programiści Przeciwko Bezdomnym Pszczołom
Ul działa na miód
Wypełnianie klasy Hive
Metoda Go() klasy Hive
Jesteśmy gotowi na stworzenie świata
Tworzymy system turowy
Oto kod klasy World
Uczenie pszczół zachowań
Główny formularz wywołuje Go() dla całego świata
MoŜemy uŜyć obiektu World do pobrania statystyk
Zegary sygnalizują zdarzenia wielokrotnie
Za kulisami zegar uŜywa zdarzeń
Pracujmy z grupami pszczół
Kolekcje kolekcjonują... DANE
LINQ ułatwia pracę z danymi w kolekcjach i bazach danych
Ostatnie wyzwanie: Otwórz i Zapisz
564
565
566
567
571
572
576
576
580
581
582
583
584
590
592
593
594
595
602
603
605
607
Rozdział 13. Upiększ to
Cały czas do interakcji z programami uŜywałeś kontrolek
Kontrolki formularza są tylko obiektami
UŜyj kontrolek do animacji symulatora ula
Dodaj do projektu rendering
Kontrolki są dobrze dostosowane do wyświetlania róŜnych elementów
wizualnych
Stwórz swoją pierwszą animowaną kontrolkę
Utwórz przycisk, aby dodać BeeControl do formularza
Twoje kontrolki takŜe muszą usuwać swoje kontrolki!
UserControl to dobry sposób na tworzenie kontrolek
Mechanizm renderujący uŜywa BeeControl do rysowania animowanych
pszczół na formularzu
Dodaj do projektu formularze reprezentujące ul i pole
Stwórz klasę Renderer
Zmieniłeś rozmiar bitmap przy pomocy obiektu Graphics
Zasoby Twoich obrazków przechowywane są w postaci obiektów Bitmap
UŜyj System.Drawing, by samemu PRZEJĄĆ KONTROLĘ nad grafiką
30-sekundowa podróŜ do świata tajemnic grafiki GDI+
UŜyj Graphics, aby na formularzu narysować obrazek
Klasa Graphics moŜe usunąć problem przezroczystości...
UŜyj zdarzenia Paint, aby grafika była mocno związana z formularzem
BliŜsze spojrzenie na sposób rysowania formularzy i kontrolek
Podwójne buforowanie czyni animację bardziej płynną
UŜyj obiektu Graphics i procedury obsługi zdarzenia do drukowania
Rozdział 14. Kapitan Wspaniały. Śmierć obiektu
Twoją ostatnią szansą na ZROBIENIE czegoś... jest uŜycie finalizatora
Kiedy DOKŁADNIE wywoływany jest finalizator?
Dispose działa z using, a finalizatory działają z mechanizmem oczyszczania
pamięci
Finalizatory nie mogą polegać na stabilności
Spraw, aby obiekt serializował się w Dispose
Struktura jest podobna do obiektu...
...ale nie jest obiektem
Wartości są kopiowane, referencje są przypisywane
Stos i sterta: więcej na temat pamięci
UŜywaj parametrów wyjściowych, by zwracać z metody więcej
niŜ jedną wartość
Przekazuj referencje, uŜywając modyfikatora ref
UŜywaj parametrów opcjonalnych, by określać wartości domyślne
Jeśli musisz uŜywać wartości pustych, stosuj typy, które je akceptują
Typy akceptujące wartości puste poprawiają odporność programów
Kapitan Wspaniały... nie tak bardzo
Metody rozszerzające zwiększają funkcjonalność ISTNIEJĄCYCH klas
Rozszerzanie podstawowego typu: string
612
613
614
616
618
621
624
625
626
628
630
631
640
641
642
643
644
649
650
653
656
662
676
677
678
680
681
685
685
686
689
692
693
694
695
696
699
700
702
Rozdział 15. Przejmij kontrolę nad danymi
Łatwy projekt...
...ale dane są w róŜnych miejscach
Dzięki LINQ moŜesz pobrać dane z róŜnych źródeł
Kolekcje .NET są przystosowane do działania z LINQ
LINQ ułatwia wykonywanie zapytań
LINQ jest prosty, ale Twoje zapytania wcale takie być nie muszą
LINQ ma wiele zastosowań
LINQ moŜe połączyć Twoje wyniki w grupy
Połącz wartości Janka w grupy
UŜyj join do połączenia dwóch kolekcji w jednym zapytaniu
Janek zaoszczędził mnóstwo szmalu
Połącz LINQ z bazą danych SQL
UŜyj join, aby połączyć dane Starbuzz i Papierni Obiektowo
708
709
710
711
712
713
716
721
722
725
726
728
732
Laboratorium C# numer 3.
Invaders
Dziadek wszystkich gier
MoŜna zrobić znacznie więcej...
736
755
Dodatek A
11 najwaŜniejszych rzeczy, które chcieliśmy umieścić w tej ksiąŜce
1. Podstawy
2. Przestrzenie nazw i złoŜenia
3. UŜyj BackgroundWorker, by poprawić działanie interfejsu uŜytkownika
4. Klasa Type oraz metoda GetType()
5. Równość, IEquatable oraz Equals()
6. Stosowanie yield return do tworzenia obiektów umoŜliwiających iterację
7. Refaktoryzacja
8. Anonimowe typy i metody oraz wyraŜenia lambda
9. Serializacja przy uŜyciu DataContractSerializer
10. Zastosowanie LINQ to XML
11. Windows Presentation Foundation
Czy wiesz, Ŝe C# i .NET Framework potrafią...
758
764
768
771
772
775
778
780
782
784
786
788
Skorowidz
791
oprac. BPK

Podobne dokumenty