View
5
Download
0
Category
Preview:
Citation preview
• Kup książkę• Poleć książkę • Oceń książkę
• Księgarnia internetowa• Lubię to! » Nasza społeczność
3
Spis tre�ci
Wst�p ...................................................................................................................................... 13
1. Prezentacja C# ............................................................................................................. 19Dlaczego C#? Dlaczego .NET? 19Biblioteka klas platformy .NET 20Styl j�zyka 21
�atwo�� konstruowania oprogramowania 22Kod zarz�dzany 23Ci�g�o�� i „ekosystem” Windows 24
C# 4.0, .NET 4.0 oraz Visual Studio 2010 25Podsumowanie 27
2. Podstawowe techniki programowania ......................................................................29Pocz�tki 29Przestrzenie nazw i typy 32Projekty i solucje 37Komentarze, regiony oraz czytelno�� 42
Nieprawid�owe komentarze 43Komentarze dokumentuj�ce XML 44
Zmienne 45Typy zmiennych 46
Wyra�enia i instrukcje 52Instrukcje przypisania 55Operatory inkrementacji i dekrementacji 55
Instrukcje sterowania przep�ywem i wyboru 56Instrukcje if 58Instrukcje switch oraz case 62
Instrukcje iteracji 64Instrukcje foreach 65Instrukcje for 67Instrukcje while oraz do 69Przerywanie wykonywania p�tli 70
4 � Spis tre�ci
Metody 71Podsumowanie 74
3. Wyodr�bnianie idei przy wykorzystaniu klas i struktur ............................................ 77Dziel i rz�d 77
Wyodr�bnianie idei w formie metod 77Wyodr�bnianie idei przy u�yciu obiektów i klas 80
Definiowanie klas 81Reprezentowanie stanu przy u�yciu w�a�ciwo�ci 82Poziomy ochrony 84Inicjalizacja przy u�yciu konstruktora 86Pola: miejsca do zapisywania danych 90Pola mog� si� zmienia�, lecz sta�e nie 92Pola i w�a�ciwo�ci tylko do odczytu 93
Typ enum — powi�zane ze sob� sta�e 96Typy warto�ciowe i referencyjne 100Zbyt wiele konstruktorów, Panie Mozart 105Przeci��anie 105
Metody przeci��one oraz domy�lne parametry nazwane 106Inicjalizatory obiektów 108Definiowanie metod 112
Deklarowanie metod statycznych 115Pola i w�a�ciwo�ci statyczne 116
Konstruktory statyczne 117Podsumowanie 119
4. Rozszerzalno�� i polimorfizm ....................................................................................121Tworzenie asocjacji poprzez kompozycj� i agregacj� 122Dziedziczenie i polimorfizm 124Zast�powanie metod w klasach pochodnych 126
Ukrywanie sk�adowych klasy bazowej przy u�yciu new 127Zast�powanie metod przy u�yciu modyfikatorów virtual i override 129
Dziedziczenie i ochrona 132Wywo�ywanie metod klasy bazowej 134Dot�d i ani kroku dalej: modyfikator sealed 136Wymuszanie przes�aniania — metody abstrakcyjne 138Wszystkie typy dziedzicz� po klasie Object 144
Pakowanie i rozpakowywanie typów warto�ciowych 144C# nie obs�uguje wielokrotnego dziedziczenia implementacji 149C# obs�uguje wielokrotne dziedziczenie interfejsów 149Tworzenie jednych interfejsów na bazie innych 152
Jawna implementacja interfejsów 153Ostateczne rozwi�zanie: sprawdzanie typów podczas wykonywania programu 157Podsumowanie 158
Spis tre�ci � 5
5. Delegacje — �atwo�� komponowania i rozszerzalno�� .......................................... 159Kompozycja funkcyjna wykorzystuj�ca delegacje 166Typ Action<T> — akcje ogólne 172Predicate<T> — predykaty ogólne 175Stosowanie metod anonimowych 177Tworzenie delegacji przy u�yciu wyra�e lambda 178Delegacje we w�a�ciwo�ciach 180Ogólne delegacje do funkcji 182Informowanie klientów za pomoc� zdarze 186
Udost�pnianie du�ej liczby zdarze 194Podsumowanie 197
6. Obs�uga b��dów ........................................................................................................ 199Kiedy i jak uzna� niepowodzenie 204Zwracanie kodu b��du 207
Debugowanie warto�ci zwracanych 213Wyj�tki 214
Obs�uga wyj�tków 219Kiedy s� wykonywane bloki finally? 226Okre�lanie, jakie wyj�tki b�d� przechwytywane 227Wyj�tki niestandardowe 230
Podsumowanie 232
7. Tablice i listy ..............................................................................................................233Tablice 233
Tworzenie i inicjalizacja 234W�asne typy w tablicach 237Sk�adowe tablic 242Wielko�� tablic 247
List<T> 254Niestandardowe indeksatory 257Wyszukiwanie i sortowanie 264
Kolekcje i polimorfizm 264Tworzenie w�asnych implementacji IEnumerable<T> 268
Podsumowanie 274
8. LINQ ............................................................................................................................ 275Wyra�enia zapyta 275
Wyra�enia zapyta a wywo�ania metod 277Metody rozszerze a LINQ 278Klauzule let 280
Koncepcje i techniki LINQ 281Delegacje i wyra�enia lambda 281Styl funkcyjny i kompozycja 283Wykonywanie opónione 284
6 � Spis tre�ci
Operatory LINQ 285Filtrowanie 285Porz�dkowanie 286Konkatenacja 289Grupowanie 289Projekcje 291Spinanie 298Robimy si� wybredni 299Testowanie ca�ej kolekcji 300Agregacja 302Operacje na zbiorach 304��czenie 304Konwersje 305
Podsumowanie 306
9. Klasy kolekcji .............................................................................................................. 307S�owniki 307
Popularne zastosowania s�owników 309IDictionary<TKey, TValue> 315S�owniki i LINQ 317
HashSet oraz SortedSet 318Kolejki 319Listy po��czone 320Stosy 321Podsumowanie 322
10. �a�cuchy znaków ......................................................................................................323Czym s� �acuchy znaków? 324Typy String i Char 325Litera�y �acuchowe i znakowe 326
Oznaczanie znaków specjalnych 327Formatowanie wy�wietlanych danych 330
Standardowe �acuchy formatowania liczb 331Niestandardowe �acuchy formatuj�ce 337Daty i godziny 340W drug� stron� — konwersja �acuchów na dane innych typów 343Z�o�one formatowanie przy u�yciu metody String.Format 345
Wra�liwo�� na ustawienia kulturowe 346Poznawanie regu� formatowania 348
Uzyskiwanie dost�pu do znaków na podstawie indeksów 349�acuchy znaków s� niezmienne 349Pobieranie ci�gu znaków 351Sk�adanie �acuchów znaków 352
Ponowne dzielenie �acuchów 354Wielkie i ma�e litery 355
Spis tre�ci � 7
Operacje na tek�cie 356StringBuilder — modyfikowalne �acuchy znaków 357
Odnajdywanie i zast�powanie �acuchów 361Wszelkiego typu „puste” �acuchy znaków 362Usuwanie bia�ych znaków 365Sprawdzanie typu znaków 368Kodowanie znaków 368
Dlaczego kodowanie ma znaczenie 370Kodowanie i dekodowanie 371Po co reprezentowa� �acuchy w formie sekwencji bajtów? 378
Podsumowanie 378
11. Pliki i strumienie ........................................................................................................ 379Sprawdzanie katalogów i plików 379Badanie katalogów 382Operacje na �cie�kach 383
�cie�ka i aktualny katalog roboczy 384Zdobywanie informacji o pliku 385Tworzenie plików tymczasowych 388Usuwanie plików 389Powszechnie znane katalogi 390Bezpieczne ��czenie elementów �cie�ek 393Tworzenie i zabezpieczanie hierarchii katalogów 394Usuwanie katalogu 401Zapis plików tekstowych 402
Zapis ca�ego pliku tekstowego w jednym wywo�aniu 402Zapis tekstu przy u�yciu klasy StreamWriter 403
Gdy pliki schodz� na z�� drog�: obs�uga wyj�tków 406Okre�lanie i modyfikacja uprawnie 410
Wczytywanie plików do pami�ci 414Strumienie 418
Poruszanie si� wewn�trz strumienia 424Zapis danych przy u�yciu strumieni 425
Odczyt, zapis i blokowanie plików 426Konstruktory klasy FileStream 428
Bufory strumieni 428Okre�lanie uprawnie podczas tworzenia strumieni 429Opcje zaawansowane 429
Asynchroniczne operacje na plikach 430Mechanizm Isolated Storage 433
Magazyny 434Zapis i odczyt tekstu 435Definicja izolowania 436
8 � Spis tre�ci
Zarz�dzanie magazynami u�ytkownika przy u�yciu limitów 440Zarz�dzanie magazynami 441
Strumienie, które nie s� plikami 444Strumie adaptuj�cy — CryptoStream 447Wszystko w pami�ci — MemoryStream 448Reprezentowanie danych binarnych jako tekstu przy u�yciu kodowania Base64 449
Podsumowanie 452
12. XML ............................................................................................................................453Podstawy XML (krótki przegl�d) 453
Elementy 453XHTML 455
Litera „X” oznacza „rozszerzalny” (eXtensible) 456Tworzenie dokumentów XML 456
Elementy XML 459Atrybuty XML 460Umieszczanie kodu LINQ w LINQ to XML 463
Przeszukiwanie kodu XML za pomoc� LINQ 464Wyszukiwanie pojedynczego w�z�a 467Osie wyszukiwania 468Klauzule where 469
Serializacja XML 469Dostosowywanie serializacji XML za pomoc� atrybutów 472
Podsumowanie 473
13. Sieci ............................................................................................................................475Wybór technologii sieciowej 475
Aplikacja WWW z kodem klienta 476Klient .NET i serwer .NET 480Klient .NET i us�uga WWW pochodz�ca z zewn�trz 482Klient zewn�trzny i us�uga WWW .NET 483
Platforma WCF 483Tworzenie projektu WCF 483Kontrakty WCF 484Testowy host i klient WCF 486Udost�pnianie us�ugi WCF 489Pisanie klienta WCF 496Dwukierunkowa komunikacja z dwustronnymi kontraktami 504
Protokó� HTTP 513Klient WWW 514Klasy WebRequest i WebResponse 518
Gniazda 525Protoko�y IP, IPv6 oraz TCP 526��czenie si� z us�ugami za pomoc� klasy Socket 531Implementowanie us�ug za pomoc� klasy Socket 535
Spis tre�ci � 9
Inne mo�liwo�ci zwi�zane z sieci� 540Podsumowanie 540
14. Bazy danych ............................................................................................................... 541Krajobraz mo�liwo�ci dost�pu do danych w ramach platformy .NET 541
Klasyczny mechanizm ADO.NET 542LINQ i bazy danych 546Technologie dost�pu do danych nieopracowane przez firm� Microsoft 548WCF Data Services 548Technologia Silverlight i dost�p do danych 549Bazy danych 550
Model encji danych 551Wygenerowany kod 555Zmiana odwzorowywania 557Zwi�zki 558Dziedziczenie 565
Zapytania 566LINQ to Entities 566Entity SQL 570Mieszanie j�zyków ESQL oraz LINQ 573Dostawca ADO.NET EntityClient 574
Kontekst obiektu 574Obs�uga po��czenia 574Tworzenie, aktualizowanie i usuwanie 577Transakcje 579Optymistyczna wspó�bie�no�� 584Czas �ycia kontekstu i encji 586
WCF Data Services 587Podsumowanie 591
15. Podzespo�y .................................................................................................................593Komponenty .NET — podzespo�y 593
Odwo�ania 594Pisanie bibliotek 597Ochrona 599
Nazwy 602Podpisywanie i silne nazwy 603
�adowanie 605�adowanie z folderu aplikacji 606�adowanie z bufora GAC 606�adowanie z pliku Silverlight o rozszerzeniu xap 607Jawne �adowanie 607
Podsumowanie 609
10 � Spis tre�ci
16. W�tki i kod asynchroniczny .......................................................................................611W�tki 613
W�tki i systemowy mechanizm szereguj�cy 615Stos 617Pula w�tków 624Powinowactwo oraz kontekst w�tków 625Popularne b��dne opinie dotycz�ce w�tków 627Tworzenie kodu wielow�tkowego jest trudne 634Strategie tworzenia kodu wielow�tkowego 637
Podstawowe narz�dzia synchronizacji 638Monitor 639Inne typy blokad 649Inne mechanizmy synchronizacji 653Zdarzenia 653Odliczanie 654
Programowanie asynchroniczne 655Model programowania asynchronicznego 656Programowanie asynchroniczne bazuj�ce na zdarzeniach 659Dorane operacje asynchroniczne 660
Task Parallel Library 661Zadania 661Obs�uga anulowania 668Obs�uga b��dów 669
Równoleg�o�� danych 671Metody Parallel.For oraz Parallel.ForEach 671PLINQ — równoleg�e LINQ 673
Podsumowanie 674
17. Atrybuty i odzwierciedlanie ..................................................................................... 675Atrybuty 675
Typy atrybutów 676W�asne atrybuty 677
Odzwierciedlanie 681Badanie metadanych 681Odkrywanie typów 683Odzwierciedlanie na rzecz okre�lonego typu 684Póne wi�zanie 686
Podsumowanie 689
18. Typ dynamic ............................................................................................................... 691Styl statyczny kontra styl dynamiczny 691
Styl dynamiczny i automatyzacja COM 693Typ dynamic 694
Typy obiektów i s�owo dynamic 697Typ dynamic w zastosowaniach niezwi�zanych z interoperacyjno�ci�? 707Podsumowanie 710
Spis tre�ci � 11
19. Wspó�dzia�anie z COM i Win32 ................................................................................. 711Importowanie kontrolek ActiveX 711
Importowanie kontrolek do projektów .NET 712Podzespo�y wspó�dzia�ania 714
Bez PIA 71664 czy 32 bity? 717Mechanizm P/Invoke 720Wskaniki 724Rozszerzenia sk�adni C# 4.0 729
W�a�ciwo�ci indeksowane 729Opcjonalny modyfikator ref 730
Podsumowanie 731
20. WPF i Silverlight ......................................................................................................... 733XAML i kod ukryty 735
XAML i obiekty 739Elementy i kontrolki 742
Panele uk�adów 743Elementy graficzne 752Kontrolki 759Kontrolki u�ytkownika 763
Szablony kontrolek 765Style 767Mened�er stanu wizualnego 769
Wi�zanie danych 771Szablony danych 773
Podsumowanie 776
21. Tworzenie aplikacji w ASP.NET ................................................................................ 777Podstawy technologii Web Forms 777
Zdarzenia formularzy sieciowych 779Cykl �ycia stron w technologii Web Forms 780
Tworzenie aplikacji internetowych 781Pliki kodu ukrytego 782Dodawanie kontrolek 783Kontrolki serwerowe 785
Wi�zanie danych 786Sprawdzanie kodu 789Dodawanie kontrolek i formularzy 792
Podsumowanie 796
22. Windows Forms ......................................................................................................... 797Tworzenie aplikacji 798
Dodawanie ród�a wi�zania 799
12 � Spis tre�ci
Kontrolki 801Dokowanie i kotwiczenie 806
Wi�zanie danych 808Obs�uga zdarze 813Podsumowanie 814
Skorowidz ............................................................................................................................. 817
777
ROZDZIA� 21.
Tworzenie aplikacji w ASP.NET
Programi�ci coraz wi�cej swoich aplikacji pisz� w taki sposób, by mog�y one dzia�a� w inter-necie, a korzystanie z nich odbywa�o si� za po�rednictwem przegl�darek WWW. Jak dowiedzie-li�my si� w rozdziale 20., technologia Silverlight pozwala pisa� kod C#, który b�dzie wyko-nywany w przegl�darce WWW po stronie klienta. Je�li natomiast chodzi o obs�ug� aplikacjiinternetowych po stronie serwera, to .NET Framework udost�pnia technologi� ASP.NET.
W tym rozdziale skoncentrujemy si� na przedstawieniu punktu, w którym spotykaj� si�ASP.NET oraz j�zyk C# — technologii Web Forms. ASP.NET jest zagadnieniem bardzo obszer-nym i je�li Czytelnik chcia�by znale� jego obszern� i wyczerpuj�c� prezentacj�, radzimy si�-gn�� po ksi��k� Programming ASP.NET 3.5, Fourth Edition napisan� przez Jessego Liberty,Dana Maharry’ego i Dana Hurwitza lub Learning ASP.NET 3.5, Second Edition napisan� przezJessego Liberty, Dana Hurwitza i Dana MacDonalda (obie zosta�y wydane przez wydawnictwoO’Reilly).
Podstawy technologii Web FormsTechnologia Web Forms przenosi ide� szybkiego programowania aplikacji (RAD — RapidApplication Development) do �wiata programowania aplikacji internetowych. Z poziomu VisualStudio lub programu Visual Web Developer, korzystaj�c z techniki „przeci�gnij i upu��”,mo�na umieszcza� elementy steruj�ce na formularzach i pisa� specjalny „kod ukryty” (ang.code-behind) wspomagaj�cy ich dzia�anie. Aplikacje tego typu s� zazwyczaj wdra�ane na ser-werze WWW (przewa�nie jest to serwer IIS, dost�pny niemal we wszystkich wersjach systemuWindows, lub Cassini, wbudowany w Visual Studio w celu testowania pisanych aplikacji),a u�ytkownicy prowadz� z nimi interakcj�, korzystaj�c z przegl�darek WWW.
Technologia ASP.NET obs�uguje tak�e inne modele ni� Web Forms — mo�na naprzyk�ad operowa� bezpo�rednio na poziomie ��da HTTP. Co wi�cej, platforma.NET 4 udost�pnia nowy model MVC (skrót od angielskich s�ów model, view, control-ler — model, widok, kontroler). Model ten jest znacznie bardziej skomplikowany, leczjednocze�nie zapewnia znacznie wi�ksze mo�liwo�ci oraz elastyczno��, przez co sta-nowi doskona�e rozwi�zanie w przypadku tworzenia z�o�onych aplikacji interneto-wych. Jako �e niniejsza ksi��ka nie jest po�wi�cona wy��cznie technologii ASP.NET,przedstawimy tu wy��cznie proste przyk�ady aplikacji tworzonych przy u�yciu tech-nologii Web Forms.
778 � Rozdzia� 21. Tworzenie aplikacji w ASP.NET
Technologia Web Forms udost�pnia model, w którym strony WWW s� generowane dyna-micznie na serwerze i dostarczane do przegl�darki za po�rednictwem internetu. Zapewniaona mo�liwo�� tworzenia stron ASPX zawieraj�cych kod HTML oraz kontrolki sieciowe (ang.web controls), a tak�e pisania kodu C# implementuj�cego reakcje na czynno�ci wykonywaneprzez u�ytkownika na stronie i dodaj�cego do niej dynamiczne tre�ci. Kod C# jest wykonywanyna serwerze, a dane przez niego wytworzone s� integrowane z kontrolkami umieszczonymina stronie i wspólnie generuj� kod HTML, który nast�pnie zostaje przes�any do przegl�darkiu�ytkownika.
Koniecznie nale�y zwróci� uwag� na trzy kluczowe informacje podane w poprzednim akapiciei pami�ta� o nich podczas lektury tego rozdzia�u:
� Strony WWW mog� zawiera� zarówno kod HTML, jak i kontrolki sieciowe (opisane w dal-szej cz��ci rozdzia�u).
� W technologii ASP.NET kod jest wykonywany na serwerze w �rodowisku zarz�dzanym.(Oczywi�cie technologii tej mo�na u�ywa� w po��czeniu z technologi� AJAX b�d Silverlight,je�li chcemy tak�e skorzysta� z kodu dzia�aj�cego po stronie klienta).
� Kontrolki ASP.NET generuj� standardowy kod HTML wy�wietlany w przegl�darce.
W przypadku formularzy sieciowych tworzonych w technologii Web Forms interfejs u�ytkow-nika jest dzielony na dwa elementy: cz��� wizualn� (nazywan� tak�e interfejsem u�ytkownika —UI) oraz logik� jej obs�ugi. Rozwi�zanie to okre�lane jest jako separacja kodu (ang. code separation)i jest czym� bardzo po�ytecznym.
Interfejs u�ytkownika stron ASP.NET jest umieszczany w plikach z rozszerzeniem aspx.W przypadku ��dania wykonania formularza serwer generuje kod HTML, a nast�pnie przesy�ago do przegl�darki u�ytkownika. W kodzie stron ASP.NET umieszczane s� specjalne kon-trolki Web Forms zdefiniowane w przestrzeniach nazw System.Web oraz System.Web.UI bibliotekiklas .NET.
Pisanie stron korzystaj�cych z Web Forms przy u�yciu Visual Studio nie mog�o by� prostsze.Wystarczy, �e otworzymy formularz, przeci�gniemy na niego kilka kontrolek i napiszemy kod,który b�dzie je obs�ugiwa�. I gotowe! W�a�nie napisali�my aplikacj� internetow�.
Z drugiej strony, nawet w przypadku korzystania z Visual Studio napisanie solidnej i kom-pletnej aplikacji internetowej mo�e by� onie�mielaj�cym zadaniem. Technologia Web Formsudost�pnia niezwykle bogaty interfejs u�ytkownika — liczba i stopie z�o�ono�ci oferowanychprzez ni� kontrolek znacz�co wzros�y w ci�gu kilku ostatnich lat, podobnie zreszt� jak oczeki-wania u�ytkowników odno�nie do ich wygl�du i sposobu dzia�ania.
Co wi�cej, aplikacje internetowe s� z za�o�enia aplikacjami rozproszonymi. Zazwyczaj klienttakich aplikacji nie znajduje si� w tym samym budynku co serwer. W przypadku wi�kszo�ciz nich podczas tworzenia interfejsu u�ytkownika nale�y uwzgl�dnia� czasy opónie trans-misji sieciowych, przepustowo�� oraz wydajno�� serwera, gdy� ca�kowity czas obs�ugi ��daniamo�e wynie�� nawet kilka sekund.
Aby upro�ci� opisywane tu zagadnienia i umo�liwi� skoncentrowanie si� na aspektachzwi�zanych z j�zykiem C#, ca�kowicie pominiemy tu sprawy dotycz�ce przetwarzaniawykonywanego po stronie klienta i zajmiemy si� wy��cznie kontrolkami ASP.NETobs�ugiwanymi po stronie serwera.
Podstawy technologii Web Forms � 779
Zdarzenia formularzy sieciowychFormularze sieciowe s� sterowane zdarzeniami. Zdarzenie reprezentuje „co�, co si� zdarzy�o”(wi�cej informacji na ten temat mo�na znale� w rozdziale 5.).
Zdarzenie zostaje zg�oszone, gdy u�ytkownik kliknie przycisk, wybierze opcj� z listy b�dwejdzie w jak�kolwiek inn� interakcj� z interfejsem u�ytkownika. Oczywi�cie w przypadkuaplikacji internetowych interakcje te maj� miejsce w przegl�darce WWW dzia�aj�cej na kompu-terze u�ytkownika, niemniej jednak zdarzenia ASP.NET s� obs�ugiwane na serwerze. Aby takierozwi�zanie mog�o dzia�a�, konieczne jest wykonanie pe�nego cyklu komunikacji z serwerem.Przegl�darka musi przes�a� do serwera ��danie, a ten z kolei musi na nie odpowiedzie� —dopiero wtedy zdarzenie zostanie ca�kowicie obs�u�one. To mo�e jednak troch� potrwa�,wi�c w porównaniu z obs�ug� zdarze w klasycznych aplikacjach dla systemu Windows jeste-�my nieco ograniczeni — cho� obs�ugiwanie po stronie serwera niektórych zdarze takich jakprzesuwanie wskanika myszy po ekranie po prostu by�oby praktyczne, to jednak ASP.NETudost�pnia jedynie ograniczon� liczb� zdarze, na przyk�ad klikni�cie przycisku lub zmian�zawarto�ci pola tekstowego. S� to zdarzenia, które mog� skutkowa� powa�nymi zmianamii których obs�uga mo�e by� warta wys�ania ��dania na serwer.
Zdarzenia przesy�ane i nieprzesy�aneZdarzenia przesy�ane (ang. postback events) to takie, których zg�oszenie powoduje natychmia-stowe przes�anie formularza na serwer. Zaliczaj� si� do nich na przyk�ad zdarzenia zwi�zanez obs�ug� klikni�� takie jak zdarzenie Click przycisków. Istnieje tak�e liczna grupa zdarzenieprzesy�anych, czyli takich, których zg�oszenie nie powoduje natychmiastowego przes�ania for-mularza na serwer.
Mo�na zmusi� kontrolki generuj�ce zdarzenia nieprzesy�ane, by ich zdarzenia powo-dowa�y przes�anie formularza. W tym celu wystarczy przypisa� w�a�ciwo�ci AutoPost�Back warto�� true.
Zdarzenia nieprzesy�ane s� zg�aszane w momencie, gdy ASP.NET odkryje, �e nale�y je zg�osi�,co mo�e jednak nast�pi� ze znacznym opónieniem wzgl�dem momentu, w którym u�ytkownikwykona� czynno�� prowadz�c� do ich wygenerowania. Na przyk�ad kontrolka TextBox udost�pniazdarzenie TextChanged. Raczej nie b�dziemy oczekiwa�, �e formularz zostanie automatycznie prze-s�any na serwer w momencie, gdy u�ytkownik zacznie co� wpisywa� w polu tekstowym, dla-tego te� nie jest to zdarzenie przesy�ane. Je�li u�ytkownik wype�ni kilka pól formularza, serwernie b�dzie o tym nic wiedzia� — ta zmiana stanu nast�puje po stronie klienta. ASP.NET odkryjej� dopiero wtedy, gdy u�ytkownik kliknie przycisk, by przes�a� formularz na serwer. Dopierowówczas zostan� zg�oszone zdarzenia TextChanged dla wszystkich wype�nionych pól tekstowych.Oznacza to, �e w ramach obs�ugi jednego ��dania mo�e zosta� obs�u�onych wiele ró�nych zdarze.
Stan widokuU�ytkownicy oczekuj�, �e kontrolki tworz�ce interfejs u�ytkownika aplikacji b�d� pami�ta�yswój stan — znikni�cie warto�ci wpisanej w polu tekstowym lub opcji zaznaczonej na li�ciemo�e by� bardzo myl�ce. Niestety WWW jest z natury �rodowiskiem „bezstanowym”1. 1 Cho� jest to uzasadnione przez architektur� sieci, nie wp�ywa to dobrze na �atwo�� korzystania z niej.
780 � Rozdzia� 21. Tworzenie aplikacji w ASP.NET
Oznacza to, �e ka�de przes�anie ��dania na serwer powoduje utrat� stanu z poprzedniego ��da-nia, chyba �e programista w�o�y wiele pracy i stara, by zachowa� posiadan� wiedz� o sesji.WWW obejmuje ca�e mnóstwo witryn zawieraj�cych formularze, których zawarto�� jest ca�ko-wicie tracona w przypadku, gdy przes�ane na serwer dane zawieraj� jakikolwiek b��d. Progra-mi�ci musz� wykona� ca�kiem sporo pracy, by zapobiec takim sytuacjom. Jednak ASP.NETudost�pnia mechanizmy pozwalaj�ce na automatyczn� obs�ug� pewnych aspektów stanu.
Za ka�dym razem, gdy formularz zostaje przes�any na serwer, ten przed odes�aniem odpowie-dzi do przegl�darki go odtwarza. ASP.NET oferuje mechanizm, który automatycznie zacho-wuje stan kontrolek obs�ugiwanych po stronie serwera (ViewState). A zatem je�li formularzzawiera list�, a u�ytkownik wybra� jedn� z dost�pnych na niej opcji, to opcja ta pozostaniezaznaczona tak�e po przes�aniu formularza na serwer i ponownym wy�wietleniu go w prze-gl�darce.
Cykl ycia stron w technologii Web FormsKa�de ��danie dotycz�ce strony docieraj�ce na serwer powoduje wygenerowanie na nim ci�guzdarze. Zdarzenia te sk�adaj� si� na ca�kowity cykl �ycia strony oraz wszystkich jej komponen-tów. Cykl ten zaczyna si� od ��dania zwrócenia strony, które sprawia, �e serwer j� wczytuje.Obs�uga ��dania koczy si� natomiast usuni�ciem strony z pami�ci serwera. Ostatecznym celemobs�ugi ��dania jest wygenerowanie i przes�anie do przegl�darki wynikowego kodu HTML.
Jako �e ASP.NET jest technologi� serwerow�, dla niej cykl �ycia strony wygl�da zupe�-nie inaczej ni� z punktu widzenia u�ytkownika. W chwili gdy u�ytkownik zobaczystron�, serwer ju� dawno skoczy� j� obs�ugiwa�. Kiedy kod HTML dotrze do przegl�-darki, równie dobrze mo�na by wy��czy� serwer i od��czy� go od internetu, a u�yt-kownik w ogóle by tego nie zauwa�y� a� do momentu przes�ania kolejnego ��dania.
Cykl �ycia strony jest wyznaczany poni�szymi zdarzeniami. Na ka�dym z etapów jej prze-twarzania ASP.NET wykonuje konkretne operacje, jednak z ka�dym z tych zdarze mo�naskojarzy� procedur� obs�ugi, by wykona� w niej jakie� dodatkowe czynno�ci.
InicjalizacjaInicjalizacja jest pierwszym etapem cyklu �ycia strony lub kontrolki. To w�a�nie podczasniej s� inicjowane wszelkie ustawienia, które b�d� potrzebne podczas obs�ugi ��dania.
Wczytanie ViewStateNa tym etapie zostaje okre�lona warto�� w�a�ciwo�ci ViewState. Warto�� ta jest przecho-wywana w ukrytym polu formularza HTML. Kiedy ASP.NET po raz pierwszy generujekod strony, umieszcza w nim to ukryte pole, a nast�pnie korzysta z niego, by zachowa� stanstrony pomi�dzy kolejnymi ��daniami przesy�anymi na serwer. Ci�g znaków zapisanyw tym polu jest przetwarzany przez platform� i na jego podstawie okre�lana jest warto��w�a�ciwo�ci ViewState. Zapewnia to mo�liwo�� zarz�dzania stanem poszczególnych kon-trolek pomi�dzy kolejnymi wy�wietleniami strony, dzi�ki czemu ich zawarto�� nie jest zaka�dym razem przywracana do warto�ci domy�lnej.
Przetworzenie danych zwrotnychPodczas tego etapu zostaj� przetworzone dane przes�ane na serwer — tak zwane danezwrotne (ang. postback data).
Tworzenie aplikacji internetowych � 781
WczytanieNa tym etapie nast�puje wywo�anie metody CreateChildControls, które powoduje utwo-rzenie i zainicjowanie kontrolek serwerowych w drzewie sterowania. Stan formularzyzostaje odtworzony, a ich kontrolki zawieraj� dane przes�ane z przegl�darki w ��daniu.
Wys�anie modyfikacji danych zwrotnychJe�li pojawi�y si� jakiekolwiek ró�nice pomi�dzy poprzednim i bie��cym stanem, to zostajewywo�ana metoda RaisePostDataChangedEvent, która powoduje zg�oszenie odpowiednichzdarze.
Obs�uga zdarze�Na tym etapie zostaje obs�u�one zdarzenie (zg�oszone po stronie klienta), które spowodo-wa�o przes�anie ��dania na serwer.
Generowanie wst�pneTo ostatni moment, by zmieni� w�a�ciwo�ci kontrolek, nim zostan� one wygenerowane.(W przypadku formularzy sieciowych „wygenerowanie” oznacza utworzenie odpowied-niego kodu HTML, który zostanie nast�pnie przes�any do przegl�darki).
Zapisanie stanuNa pocz�tku cyklu �ycia strony jej zachowany stan zosta� odczytany i odtworzony z ukry-tego pola formularza. Na tym etapie jest on ponownie zapisywany w polu jako �acuchznaków, co koczy pe�ny cykl przesy�ania stanu pomi�dzy klientem i serwerem.
GenerowaniePodczas tego etapu jest generowany kod wynikowy, który zostanie przes�any do prze-gl�darki.
ZwolnienieTo ostatni etap cyklu �ycia strony. Zapewnia on programi�cie mo�liwo�� wykonaniaostatecznych porz�dków i zwolnienia referencji do wszelkich kosztownych zasobów takichjak po��czenia z bazami danych.
Tworzenie aplikacji internetowychVisual Studio udost�pnia dwa sposoby tworzenia aplikacji internetowych. Nie jest to jedyniekwestia wyboru jednego z dwóch przycisków w menu zapewniaj�cych dost�p do tej samejmo�liwo�ci — obie opcje dzia�aj� ca�kowicie odmiennie, a Visual Studio nie oferuje wystarcza-j�cych informacji o ró�nicach pomi�dzy nimi w momencie, gdy trzeba dokona� wyboru. Jednymz tych dwóch sposobów jest skorzystanie z opcji New Project, która udost�pnia ró�ne szablonyprojektów ASP.NET umieszczone w sekcji Visual C#/Web, pozwalaj�ce na generowanie ró�-nych rodzajów projektów aplikacji internetowych. S� to pe�noprawne projekty aplikacji VisualStudio generowane i budowane dok�adnie tak samo jak wszelkie inne projekty (biblioteki,aplikacje konsolowe czy te� aplikacje WPF). Projekty tego typu s� nieco „l�ejsze” — nie maw nich pliku .csproj reprezentuj�cego projekt. Nie istnieje te� konieczno�� ich budowania,gdy� taki projekt sk�ada si� wy��cznie z plików ród�owych i to one póniej b�d� kopiowane naserwer WWW. W przyk�adach zamieszczonych w tym rozdziale wykorzystamy projekt apli-kacji internetowej, gdy� jest on najbardziej podobny do innych typów projektów, które mieli-�my okazj� pozna� we wcze�niejszej cz��ci ksi��ki.
782 � Rozdzia� 21. Tworzenie aplikacji w ASP.NET
Aby utworzy� prosty formularz internetowy, który wykorzystamy w nast�pnym przyk�a-dzie, nale�y uruchomi� Visual Studio .NET i wybra� z menu g�ównego opcj� File/New/Project.W oknie dialogowym New Project nale�y nast�pnie zaznaczy� opcj� Visual C#/Web i wybra�szablon ASP.NET Empty Web Application.
Zgodnie z tym, co sugeruje nazwa szablonu, Visual Studio utworzy pust� aplikacj� internetow�.W jej sk�ad b�dzie pocz�tkowo wchodzi� wy��cznie plik Web.config zawieraj�cy ustawieniakonfiguracyjne witryny. Aby doda� do aplikacji nowy formularz, nale�y wybra� opcj� Pro-ject/Add New Item, po czym wybra� z listy szablonów wy�wietlonej po lewej stronie okna opcj�Visual C#/Web. Nast�pnie nale�y wybra� szablon Web Form i nada� mu nazw� HelloWeb.aspx.W rezultacie Visual Studio utworzy tak�e plik kodu ukrytego o nazwie HelloWeb.aspx.cs, któryb�dzie mo�na zobaczy� w panelu Solution Explorer po rozwini�ciu opcji HelloWeb.aspx. (Dodat-kowo pojawi si� tak�e plik HelloWeb.aspx.designer.cs, w którym Visual Studio b�dzie umiesz-cza� wszelki kod, który musi wygenerowa� automatycznie. Nie nale�y w nim umieszcza� �ad-nego w�asnego kodu, gdy� Visual Studio usuwa ten plik i odtwarza go za ka�dym razem, gdymusi wprowadzi� do wygenerowanego kodu jakie� zmiany).
Pliki kodu ukrytegoPrzyjrzyjmy si� nieco dok�adniej plikom aspx oraz plikom kodu ukrytego utworzonym przezVisual Studio. Najpierw zobaczmy kod HTML zapisany w pliku HelloWeb.aspx. Podczas edycjiplików aspx Visual Studio mo�e je wy�wietla� w trzech ró�nych widokach. Domy�lnym jest widokród�a (Source) prezentuj�cy kod HTML. U do�u okna edytora znajduj� si� trzy przyciski, którepozwalaj� prze��cza� si� pomi�dzy trzema dost�pnymi widokami: widokiem projektu (Design)prezentuj�cym zawarto�� strony w taki sposób, w jaki b�dzie ona wy�wietlana w przegl�darce,widokiem ród�a (Source) prezentuj�cym nieprzetworzony kod HTML strony oraz widokiempodzielonym (Split) prezentuj�cym stron� jednocze�nie na dwa opisane wcze�niej sposoby. Jakmo�na zauwa�y�, formularz zosta� utworzony na stronie przy u�yciu standardowego znacznikaform j�zyka HTML:
<form id="form1" runat="server">
Formularze internetowe ASP.NET wymagaj�, by na stronie znajdowa� si� przynajmniej jedenformularz HTML umo�liwiaj�cy zarz�dzanie interakcj� z u�ytkownikiem, dlatego te� VisualStudio utworzy�o go podczas dodawania nowej strony aspx. Atrybut runat="server" jest kluczemdo ca�ej magii, która póniej b�dzie wykonywana na serwerze. Ka�dy znacznik zawieraj�cyten atrybut jest traktowany jako kontrolka serwerowa, która powinna zosta� wykonana przezASP.NET Framework na serwerze.
Cho� form jest standardowym znacznikiem HTML, to atrybut runat do tego standardunie nale�y. Jednak ASP.NET usuwa ten atrybut z kodu HTML przed jego przes�aniemdo przegl�darki. Ma on jakiekolwiek znaczenie wy��cznie na serwerze.
Wewn�trz formularza Visual Studio umieszcza otwieraj�cy i zamykaj�cy znacznik div, pomi�dzyktórymi mo�na wstawia� w�asne kontrolki oraz tekst.
Po utworzeniu pustego formularza pierwsz� czynno�ci�, jak� Czytelnik zapewne b�dziechcia� wykona�, b�dzie umieszczenie na nim jakiego� tekstu. Po prze��czeniu si� do widokuród�a mo�na dodawa� kod bezpo�rednio do pliku HTML. W ten sposób mo�emy na przy-k�ad doda� jak�� zawarto�� do elementu div umieszczonego w sekcji body strony aspx, tak jakto pokazano na listingu 21.1 (dodany fragment zosta� wyró�niony pogrubion� czcionk�).
Tworzenie aplikacji internetowych � 783
Listing 21.1. Dodawanie zawarto�ci HTML
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="HelloWeb.aspx.cs"Inherits="ProgrammingCSharpWeb.HelloWeb" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"><head runat="server"> <title></title></head><body> <form id="form1" runat="server"> <div> Witaj, �wiecie! Teraz jest: <%= DateTime.Now.ToString() %> </div> </form></body></html>
W ten sposób na stronie zostanie wy�wietlone powitanie oraz aktualny lokalny czas:Witaj, �wiecie! Teraz jest 2011-12-18 23:40:42
Znaczniki <% oraz %> dzia�aj� dok�adnie tak samo jak we wcze�niejszej wersji technologii ASP —oznaczaj� kod, który zosta� pomi�dzy nimi umieszczony (w naszym przypadku jest to kod C#).Znak równo�ci (=) znajduj�cy si� bezpo�rednio za znacznikiem otwieraj�cym sprawia, �eASP.NET przetworzy umieszczone za nim wyra�enie i wy�wietli jego warto��. Wykonajmyzatem t� stron�, naciskaj�c klawisz F5.
Dodawanie kontrolekKontrolki serwerowe mo�na umieszcza� na formularzu na trzy sposoby: samodzielnie pisz�cw pliku aspx odpowiedni kod, przeci�gaj�c je z panelu Toolbox (przy czym w tym przypadkumo�na je umieszcza� na stronie zarówno w widoku ród�a, jak i w widoku projektu) lubewentualnie pisz�c kod, który doda kontrolki w trakcie dzia�ania programu. W ramach przy-k�adu za�ó�my, �e chcemy wy�wietli� na stronie trzy przyciski opcji zapewniaj�ce u�ytkow-nikowi sk�adaj�cemu zamówienie mo�liwo�� wyboru jednej z trzech firm kurierskich. W tymcelu w kodzie strony, wewn�trz znacznika <form>, mo�na by umie�ci� nast�puj�cy kod HTML:
<asp:RadioButton GroupName="Shipper" id="Speedy" text="Speedy Express" Checked="True" runat="server"></asp:RadioButton><asp:RadioButton GroupName="Shipper" id="United" text="United Package" runat="server"></asp:RadioButton><asp:RadioButton GroupName="Shipper" id="Federal" text="Federal Shipping" runat="server"></asp:RadioButton>
Znacznik asp deklaruje serwerow� kontrolk� ASP.NET, która podczas przetwarzania stronyzostaje zast�piona zwyczajnym kodem HTML. Po uruchomieniu aplikacji przegl�darka wy�wietlizbiór trzech przycisków opcji — wybór jednego z nich spowoduje usuni�cie zaznaczeniapozosta�ych.
Dok�adnie ten sam efekt mo�na uzyska� znacznie �atwiej, przeci�gaj�c trzy przyciski opcjiz panelu Toolbox Visual Studio i upuszczaj�c je na formularzu, a jeszcze �atwiejszym rozwi�za-niem b�dzie przeci�gni�cie i upuszczenie na formularzu listy przycisków opcji, która b�dzie
784 � Rozdzia� 21. Tworzenie aplikacji w ASP.NET
zarz�dza� wszystkimi przyciskami jako jedn� grup�. Kiedy zaznaczymy kontrolk� przyciskuopcji w widoku projektu, pojawi si� inteligentny znacznik (ang. smart tag), prosz�c nas o podanieród�a danych (zapewnia to nam mo�liwo�� powi�zania przycisku z kolekcj�, na przyk�adpobran� z bazy danych) lub wpisanie ich samemu. Klikni�cie przycisku Edit items powodujewy�wietlenie okna ListItem Collection Editor, w którym mo�emy doda� potrzebne nam trzyprzyciski opcji.
Ka�dy z przycisków b�dzie mia� domy�ln� nazw� ListItem, jednak zarówno ich opisy, jak i war-to�ci b�dzie mo�na samemu poda� w odpowiednich w�a�ciwo�ciach. Mo�na tam tak�e okre�li�,które z trzech pól b�dzie pocz�tkowo zaznaczone (patrz rysunek 21.1).
Rysunek 21.1. Kolekcja elementów ListItem
Wygl�d listy przycisków opcji mo�na poprawi�, modyfikuj�c warto�ci w�a�ciwo�ci wy�wie-tlonych w panelu Properties, które okre�laj� takie aspekty wygl�du jak: u�ywana czcionka,kolor, liczba kolumn, kierunek powtarzania (domy�lnie wybrany jest pionowy) itd. Mo�na torównie� zrobi�, korzystaj�c z rozbudowanego wsparcia, jakie Visual Studio zapewnia w zakre-sie tworzenia arkuszy stylów CSS (przedstawionego na rysunku 21.2).
Rysunek 21.2 pokazuje, �e mo�na prze��cza� wy�wietlane w prawym dolnym rogu VisualStudio panele Properties oraz Apply Styles. W przedstawionym przyk�adzie u�yli�my paneluProperties, by okre�li� tekst etykiety ekranowej, a nast�pnie panelu Styles, by utworzy� stylListBox, który wy�wietla wokó� listy przycisków obramowanie oraz okre�la ich czcionk� i kolor.Skorzystali�my tak�e z widoku podzielonego, by móc jednocze�nie ogl�da� stron� w widokuród�a oraz projektu.
Sekwencja znaczników wy�wietlana automatycznie u do�u okna Visual Studio pokazuje naszeaktualne po�o�enie w strukturze dokumentu. Jak wida�, znajdujemy si� w elemencie ListItemw kontrolce ListBox, która jest umieszczona w elemencie div wewn�trz formularza form1. Tonaprawd� �wietne narz�dzie.
Tworzenie aplikacji internetowych � 785
Rysunek 21.2. Stosowanie w�a�ciwo�ci i stylów
Kontrolki serweroweTechnologia Web Forms udost�pnia dwa rodzaje kontrolek serwerowych. Pierwszym z nichs� serwerowe kontrolki HTML. Wygl�daj� one niemal identycznie jak zwyczajne znacznikiHTML, jednak posiadaj� dodatkowy atrybut runat="server".
Alternatyw� dla serwerowych kontrolek HTML s� kontrolki serwerowe ASP.NET (ang.ASP.NET server controls; nazywane tak�e czasami kontrolkami internetowymi, ang. web controls).Stworzono je po to, by udost�pni� nieco wygodniejszy interfejs API do pracy ze standardo-wymi kontrolkami HTML. Kontrolki internetowe udost�pniaj� nieco bardziej spójny modelobiektowy oraz spójne nazewnictwo w�a�ciwo�ci. W przypadku kontrolek HTML istnieje naprzyk�ad wiele sposobów obs�ugi wprowadzania danych:
<input type="radio"><input type="checkbox"><input type="button"><input type="text"><textarea>
Ka�da z tych kontrolek dzia�a inaczej i wymaga zastosowania innych atrybutów. To dosy�przykry efekt nieco przypadkowego rozwoju j�zyka HTML we wczesnych latach istnieniaWWW. Kontrolki internetowe maj� za zadanie znormalizowa� zbiór dost�pnych elementów
786 � Rozdzia� 21. Tworzenie aplikacji w ASP.NET
steruj�cych oraz zapewni� spójne wykorzystanie atrybutów w ca�ym ich modelu obiektowym.Poni�ej przedstawione zosta�y kontrolki internetowe odpowiadaj�ce kontrolkom HTML widocz-nym w poprzednim przyk�adzie.
<asp:RadioButton><asp:CheckBox><asp:Button><asp:TextBox rows="1"><asp:TextBox rows="5">
Kod HTML przekazywany do przegl�darki u�ytkownika nie zawiera znaczników zaczynaj�cychsi� od asp: (i bardzo dobrze, gdy� �adna przegl�darka nie wiedzia�aby, co z nimi zrobi�).ASP.NET konwertuje je na standardowy kod HTML, a zatem z punktu widzenia klienta niema �adnej ró�nicy pomi�dzy internetowymi kontrolkami ASP.NET a standardowymi kon-trolkami HTML. Wszystko sprowadza si� wi�c do pytania, z jakiego API b�dziemy chcielikorzysta� na serwerze: czy chcemy, by kod na serwerze operowa� na tych samych elementachi w�a�ciwo�ciach, które s� u�ywane po stronie klienta, czy te� wolimy, by kontrolki by�y zgodnez konwencjami u�ywanymi we wszystkich innych klasach biblioteki .NET.
W dalszej cz��ci rozdzia�u skoncentrujemy si� na kontrolkach internetowych.
Wi�zanie danychCho� niektóre tre�ci prezentowane przez aplikacje internetowe mog� by� sta�e, to jednakka�da interesuj�ca witryna WWW b�dzie si� zmienia� wraz z up�ywem czasu. Dlatego te� jestwysoce prawdopodobne, �e b�dziemy chcieli, by niektóre kontrolki na stronie wy�wietla�ydane, które od czasu do czasu mog� podlega� zmianom i które najprawdopodobniej b�d� prze-chowywane w bazie danych. Wiele kontrolek ASP.NET mo�na powi�za� z danymi, co znacznieu�atwia prezentowanie tych danych oraz ich modyfikacj�.
W poprzednim podrozdziale na sta�e umie�cili�my na formularzu trzy przyciski opcji, pojednym dla ka�dej z trzech firm kurierskich, które mo�e wybra� u�ytkownik. Jednak to niejest najlepsze rozwi�zanie — dostawcy si� zmieniaj�, a poza tym istnieje du�e prawdopodo-biestwo, �e w przysz�o�ci b�dziemy chcieli nawi�za� wspó�prac� tak�e z innymi firmamikurierskimi. Nie chcemy, by ka�da zmiana relacji biznesowych zmusza�a nas do r�cznegomodyfikowania tych kontrolek. Znacznie bardziej rozs�dnym rozwi�zaniem b�dzie zapisanielisty firm kurierskich w bazie danych i powi�zanie ich z przyciskami opcji wy�wietlanymi naformularzu. W tym podrozdziale dowiemy si�, w jaki sposób mo�na utworzy� te kontrolkidynamicznie i powi�za� je z informacjami przechowywanymi w bazie danych, korzystaj�c w tymcelu z mo�liwo�ci wi�zania z baz� danych zapewnianej przez kontrolk� RadioButtonList.
Dodajmy zatem do naszej aplikacji nowy formularz o nazwie DisplayShippers.aspx i wy�wietlmygo w widoku podzielonym. Teraz musimy przeci�gn�� kontrolk� RadioButtonList z paneluToolbox, umieszczaj�c j� na naszym nowym formularzu — b�d to w panelu widoku projektu,b�d to w kodzie ród�owym wewn�trz znacznika <div>.
Je�li z lewej strony okna Visual Studio nie jest widoczny panel Toolbox z kontrolk�przycisków opcji, to mo�na go wy�wietli�, wybieraj�c z menu g�ównego opcj�View/Toolbox, a nast�pnie rozwijaj�c zak�adk� Standard. By uporz�dkowa� kontrolki,mo�na klikn�� w panelu Toolbox prawym przyciskiem myszy i z wy�wietlonego menukontekstowego wybra� opcj� Sort Items Alphabetically.
Wi�zanie danych � 787
Nast�pnie w widoku projektu nale�y klikn�� na „inteligentnej” ikonie nowej kontrolki — nie-wielkiej strza�ce wy�wietlonej w jej prawym górnym rogu. Z wy�wietlonego menu nale�y wybra�opcj� Choose Data Source, a na ekranie pojawi si� okno dialogowe Data Source ConfigurationWizard przedstawione na rysunku 21.3.
Rysunek 21.3. Okno dialogowe Data Source Configuration Wizard
W oknie tym nale�y rozwin�� list� Select a data source i wybra� z niej opcj� <New Data Source>.Nast�pnie zostaniemy poproszeni o wybór ród�a danych spo�ród typów danych dost�pnychna komputerze. Powinni�my wybra� opcj� Database, poda� identyfikator i klikn�� przycisk OK.Na ekranie zostanie wy�wietlone okno dialogowe Configure Data Source przedstawione narysunku 21.4.
Mo�emy albo wybra� istniej�ce po��czenie z baz� danych, albo utworzy� nowe. W naszymprzypadku skorzystamy z tej drugiej mo�liwo�ci — kliknijmy zatem przycisk New Connection,by je skonfigurowa�. Na ekranie zostanie wy�wietlone okno dialogowe Add Connection.
Kolejnym krokiem b�dzie wype�nienie pól formularza: nale�y wybra� nazw� serwera, poda�informacje o sposobie logowania si� do niego (w razie w�tpliwo�ci nale�y wybra� opcj� WindowsAuthentication) oraz poda� nazw� bazy danych (w naszym przyk�adzie b�dzie to Northwind).Koniecznie powinni�my tak�e pami�ta� o klikni�ciu przycisku Test Connection, by przetestowa�po��czenie z baz� danych. Kiedy wszystko b�dzie dzia�a� prawid�owo, mo�na klikn�� przy-cisk OK, tak jak to pokazano na rysunku 21.5.
Po klikni�ciu przycisku OK w�a�ciwo�ci po��czenia zostan� wpisane do okna dialogowegoConfigure Data Source. Warto jeszcze raz si� im przyjrze�, a je�li wszystko b�dzie w porz�dku,
788 � Rozdzia� 21. Tworzenie aplikacji w ASP.NET
Rysunek 21.4. Wybieranie po��czenia ze ród�em danych
mo�na klikn�� przycisk Next. Je�li chcemy zapisa� po��czenie w pliku konfiguracyjnymweb.config, to na kolejnej stronie kreatora powinni�my poda� jego nazw� (np. NorthWindConnec�tionString).
Po klikni�ciu kolejnego przycisku Next b�dziemy mieli mo�liwo�� okre�lenia tabel i kolumn,które chcemy pobiera�, b�d te� podania w�asnego zapytania SQL lub nazwy procedury sk�a-dowanej, które zostan� u�yte do pobrania danych.
W naszym przyk�adzie powinni�my rozwin�� list� Tables i przewin�� jej zawarto�� tak, by by�awidoczna opcja Shippers. Nast�pnie powinni�my zaznaczy� pola ShipperID oraz CompanyName, jakpokazano to na rysunku 21.6.
W dalszej kolejno�ci nale�y ponownie klikn�� przycisk Next i przetestowa� po��czenie, by spraw-dzi�, czy z bazy danych s� pobierane oczekiwane warto�ci (co pokazano na rysunku 21.7).
W kocu nadszed� czas, by po��czy� utworzone przed chwil� ród�o danych z kontrolk� Radio�ButtonList. Kontrolka ta (podobnie jak wi�kszo�� innych list) rozró�nia warto�� wy�wietla-n� (w naszym przypadku nazw� firmy kurierskiej) oraz warto�� wyboru (w naszym przyk�a-dzie jest ni� identyfikator firmy kurierskiej). Pola te nale�y wskaza� w kreatorze, wybieraj�c jez list rozwijalnych, tak jak to pokazano na rysunku 21.8.
Wi�zanie danych � 789
Rysunek 21.5. Okno dialogowe Add Connection
Sprawdzanie koduZanim przejdziemy dalej, nale�y zwróci� uwag� na kilka zagadnie. Kiedy naci�niemy kla-wisz F5, by uruchomi� aplikacj�, zostanie ona wy�wietlona w przegl�darce, a strona, zgodniez oczekiwaniami, b�dzie prezentowa�a grup� przycisków opcji. Mo�emy teraz wybra� opcj�Choose View/Source, a przekonamy si�, �e do przegl�darki zosta� przes�any prosty kod HTMLprzedstawiony na listingu 21.2.
Listing 21.2. Kod ród�owy wygenerowanej strony
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>
</title></head><body> <form method="post" action="DisplayShippers.aspx" id="form1"><div class="aspNetHidden">
790 � Rozdzia� 21. Tworzenie aplikacji w ASP.NET
Rysunek 21.6. Konfiguracja polecenia Select
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE"value="/wEPDwUJMjMzNjY1MzU4D2QWAgIDD2QWAgIBDxAPFgIeC18hRGF0YUJvdW5kZ2QQFQMOU3BlZWR5IEV4cHJlc3MOVW5pdGVkIFBhY2thZ2UQRmVkZXJhbCBTaGlwcGluZxUDATEBMgEzFCsDA2dnZ2RkZCOksd8IILjpH4OAdNkxGqjSa0RYAA3N2F8zJz4lyxsv" /></div>
<div class="aspNetHidden"> <input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="/wEWBQK02+CfAgL444i9AQL544i9AQL644i9AQL3jKLTDWylFXks1YMe8G5o7AkyHjJysQk0 Cliwu8U/2yTrYA/Y" /></div> <div> <table id="RadioButtonList1"> <tr> <td><input id="RadioButtonList1_0" type="radio" name="RadioButtonList1" value="1" /> <label for="RadioButtonList1_0">Speedy Express</label></td> </tr><tr> <td><input id="RadioButtonList1_1" type="radio" name="RadioButtonList1" value="2" /> <label for="RadioButtonList1_1">United Package</label></td> </tr><tr> <td><input id="RadioButtonList1_2" type="radio" name="RadioButtonList1" value="3" /> <label for="RadioButtonList1_2">Federal Shipping</label></td> </tr>
Wi�zanie danych � 791
Rysunek 21.7. Testowanie zapytania
</table>
</div> </form></body></html>
Zwró�my uwag�, �e w powy�szym kodzie HTML nie ma elementu RadioButtonList; zawieraon tabel� z komórkami, wewn�trz których s� umieszczone standardowe kontrolki HTML orazetykiety. A zatem ASP.NET przekszta�ci� swoje kontrolki na kod HTML zrozumia�y dla ka�dejprzegl�darki WWW.
Wrogo nastawiony u�ytkownik mo�e utworzy� ��danie wygl�daj�ce dok�adnie takjak prawid�owe dane przes�ane z naszego formularza, lecz zawieraj�ce zupe�nie inne,nieoczekiwane przez nas warto�ci. Mo�e mu to zapewni� mo�liwo�� wyboru opcji,która nie powinna by� dla niego dost�pna (na przyk�ad opcji dost�pnej wy��czniedla uprzywilejowanych u�ytkowników), b�d nawet umo�liwi� przeprowadzenieataku SQL injection (wstrzykni�cia kodu SQL). A zatem w przypadkach udost�pnianiaw formularzach HTML istotnych informacji takich jak warto�ci kluczy g�ównych nale�yzachowa� szczególn� ostro�no�� i pami�ta� o tym, �e dane pochodz�ce z formularzawcale nie musz� by� tymi, które zosta�y do niego przes�ane. Wi�cej informacji na tematpisania bezpiecznych aplikacji .NET mo�na znale� na stronie http://msdn.microsoft.com/security/.
792 � Rozdzia� 21. Tworzenie aplikacji w ASP.NET
Rysunek 21.8. Wi�zanie przycisków opcji ze ród�em danych
Dodawanie kontrolek i formularzyWystarczy doda� do naszej przyk�adowej strony kilka kolejnych kontrolek, by utworzy� kom-pletny formularz zapewniaj�cy mo�liwo�� prowadzenia interakcji z u�ytkownikiem. W tymcelu dodamy bardziej odpowiednie powitanie („Witamy w NorthWind”), pole tekstowe pozwa-laj�ce na podanie imienia, dwa nowe przyciski (Zamów oraz Anuluj) i tekst, który umo�liwinam wy�wietlanie komunikatów dla u�ytkownika. Wygl�d strony po wprowadzeniu tych mody-fikacji przedstawili�my na rysunku 21.9.
Ten formularz nie wygra�by �adnej nagrody dla najlepszego projektu, niemniej jednak pozwolinam przedstawi� kilka kluczowych zagadnie zwi�zanych z formularzami Web Forms.
Nigdy nie spotkali�my programisty, który by nie uwa�a�, �e potrafi zaprojektowa�idealny interfejs u�ytkownika. Jednocze�nie nigdy nie uda�o nam si� spotka� takiego,który by to rzeczywi�cie potrafi�. Projektowanie interfejsów u�ytkownika jest jedn� z tychumiej�tno�ci (tak jak nauczanie), które ka�dy w jego w�asnej opinii posiada, jednak którebardzo niewiele naprawd� utalentowanych osób rozwin��o w wystarczaj�cym stopniu.Jako programi�ci doskonale znamy swoje ograniczenia: piszemy kod, a kto� inny roz-mieszcza kontrolki na stronie, zapewniaj�c ich odpowiedni� u�yteczno��. Czytelnikomzainteresowanym tymi zagadnieniami gor�co polecamy ksi��k� Don’t Make me Think:A Common Sense Approach to Web Usibility napisan� przez Steve’a Kruga i wydan� przezwydawnictwo New Riders Press oraz Why Software Sucks... and What You Can Do AboutIt napisan� przez Davida Platta i wydan� przez wydawnictwo Addison-Wesley.
Wi�zanie danych � 793
Rysunek 21.9. Doko�czony formularz z list� firm kurierskich
Listing 21.3 przedstawia kompletny kod pliku aspx.
Listing 21.3. Zawarto�� pliku aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="DisplayShippers.aspx.cs" Inherits="ProgrammingCSharpWeb.DisplayShippers" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"><head runat="server"><title></title></head><body> <form id="form1" runat="server"> <div>Witamy w NorthWind</div> <div> Twoje imi�: <asp:TextBox ID="txtName" runat="server"></asp:TextBox></div> <div>Kurier:</div> <div> <asp:RadioButtonList ID="rblShippers" runat="server" DataSourceID="SqlDataSource1" DataTextField="CompanyName" DataValueField="ShipperID"> </asp:RadioButtonList> <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:NorthwindConnectionString %>" SelectCommand="SELECT [ShipperID], [CompanyName] FROM [Shippers]"> </asp:SqlDataSource> </div> <div> <asp:Button ID="btnOrder" runat="server" Text="Zamów" /> <asp:Button ID="Button2" runat="server" Text="Anuluj" /> </div> <div>
794 � Rozdzia� 21. Tworzenie aplikacji w ASP.NET
<asp:Label id="lblMsg" runat=server></asp:Label> </div></form></body></html>
Kiedy u�ytkownik kliknie przycisk Zamów, odczytamy warto�� wpisan� przez niego w polutekstowym oraz wy�wietlimy komunikat potwierdzaj�cy wybór jednej z firm kurierskich.Trzeba pami�ta�, �e w momencie projektowania formularza nie jest ona znana, gdy� nazwywszystkich dost�pnych firm s� pobierane z bazy danych w trakcie dzia�ania aplikacji, niemniejjednak mo�emy pobra� z kontrolki RadioButtonList wybran� nazw� lub identyfikator.
Aby to zrobi�, nale�y wy�wietli� formularz w widoku projektu i dwukrotnie klikn�� przyciskZamów. W rezultacie Visual Studio wy�wietli plik kodu ukrytego oraz utworzy procedur�obs�ugi zdarze Click przycisku.
Aby upro�ci� kod naszej przyk�adowej aplikacji, nie b�dziemy sprawdza�, czy u�yt-kownik wpisa� swoje imi� w polu tekstowym. Informacje na temat kontrolek, któreznacznie upraszczaj� tak� weryfikacj� poprawno�ci danych, mo�na znale� w ksi��ceASP.NET. Programowanie.
W kodzie obs�uguj�cym zdarzenie okre�lamy tre�� wy�wietlanego komunikatu, umieszczaj�cw niej imi� odczytane z pola tekstowego oraz tekst i warto�� kontrolki RadioButtonList:
protected void btnOrder_Click(object sender, EventArgs e){ lblMsg.Text = "Witaj, " + txtName.Text.Trim() + ". Dzi�kujemy za zamówienie. " + "Wybra�e� firm� kuriersk� " + rblShippers.SelectedItem.Text + " o identyfikatorze " + rblShippers.SelectedValue + ".";}
Po uruchomieniu naszej aplikacji mo�na zauwa�y�, �e pocz�tkowo �aden z przycisków opcjinie jest zaznaczony. Podczas wi�zania listy ze ród�em danych nie okre�lili�my, która z warto-�ci powinna by� traktowana jako domy�lna. Mo�na to zrobi� na kilka ró�nych sposobów,jednak najprostszym z nich jest dodanie jednego wiersza kodu do metody Page_Load automa-tycznie tworzonej przez Visual Studio:
protected void Page_Load(object sender, EventArgs e){ rblShippers.SelectedIndex = 0;}
Zastosowanie powy�szego kodu sprawi, �e zostanie zaznaczony pierwszy przycisk opcjiw kontrolce RadioButtonList. W powy�szym rozwi�zaniu wyst�puje jeden dosy� subtelny pro-blem. Otó� kiedy uruchomimy aplikacj�, zostanie zaznaczony pierwszy przycisk, a je�li nast�p-nie wybierzemy drugi lub trzeci i klikniemy Wy�lij, to oka�e si�, �e po ponownym wy�wie-tleniu strony znowu b�dzie zaznaczony przycisk pierwszy. Mo�e si� zatem wydawa�, �e nie dasi� wybra� �adnej innej opcji poza pierwsz�. Dzieje si� tak dlatego, �e za ka�dym razem, gdystrona jest wy�wietlana, zostaje wykonane zdarzenie OnLoad, a procedura jego obs�ugi zawszezaznacza pierwszy z przycisków opcji w kontrolce RadioButtonList.
Jednak nam chodzi o to, by ten pierwszy przycisk zosta� zaznaczony wy��cznie podczas pierw-szego wy�wietlenia strony, lecz nie podczas kolejnych wy�wietle nast�puj�cych po klikni�ciuprzycisku Wy�lij.
Wi�zanie danych � 795
Aby rozwi�za� ten problem, wystarczy umie�ci� wiersz kodu zaznaczaj�cy pierwszy przyciskkontrolki RadioButtonList wewn�trz instrukcji warunkowej sprawdzaj�cej, czy formularz zosta�przes�any na serwer:
protected void Page_Load(object sender, EventArgs e){ if (!IsPostBack) { rblShippers.SelectedIndex = 0; }}
W momencie wykonywania strony sprawdzana jest warto�� w�a�ciwo�ci IsPostBack. Za pierw-szym razem przyjmie ona warto�� false, zatem pierwsze pole kontrolki zostanie zaznaczone.Kiedy zaznaczymy jaki� przycisk opcji i klikniemy przycisk Wy�lij, strona zostanie przes�ana naserwer w celu jej przetworzenia (co spowoduje wykonanie procedury obs�ugi btnOrder_Click),a nast�pnie zostanie odes�ana do klienta. W tym przypadku w�a�ciwo�� IsPostBack przyjmiewarto�� true, co sprawi, �e kod umieszczony wewn�trz instrukcji if nie zostanie wykonany.Dzi�ki temu, jak pokazano to na rysunku 21.10, po ponownym wy�wietleniu strony b�dzie naniej zaznaczony przycisk wybrany wcze�niej przez u�ytkownika.
Rysunek 21.10. Wybór u�ytkownika zachowany po ponownym wy�wietleniu strony
Listing 21.4 przedstawia kompletny kod ukryty obs�uguj�cy nasz przyk�adowy formularz.
Listing 21.4. Kod ukryty umieszczony w pliku DisplayShippers.aspx.cs
using System;
namespace ProgrammingCSharpWeb{ public partial class DisplayShippers : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack)
796 � Rozdzia� 21. Tworzenie aplikacji w ASP.NET
{ rblShippers.SelectedIndex = 0; } }
protected void btnOrder_Click(object sender, EventArgs e) { lblMsg.Text = "Witaj, " + txtName.Text.Trim() + ". Dzi�kujemy za zamówienie. " + "Wybra�e� firm� kuriersk� " + rblShippers.SelectedItem.Text + " o identyfikatorze " + rblShippers.SelectedValue + "."; } }}
PodsumowanieW tym rozdziale pokazali�my, jak mo�na utworzy� prost� aplikacj� ASP.NET, korzystaj�cz technologii Web Forms. Powi�zali�my list� przycisków opcji z tabel� bazy danych i dodali�mykod obs�uguj�cy zdarzenia po stronie serwera zapewniaj�cy nam mo�liwo�� reagowania naczynno�ci wykonywane na stronie przez u�ytkownika.
817
Skorowidz
.NET 4, 16
Aabstrakcyjne klasy bazowe, 138ACL, access control list, 493Adams Matthew, 819ADO.NET, 542
dost�p do danych, 543zbiory danych, 545
ADO.NET EntityClient, 574adres, 491adres bazowy, 492adres IP, 526adres us�ugi, 497adresy IPv4, 526adresy IPv6, 526agregacja, 122, 301, 303AJAX, Asynchronous JavaScript and XML, 476akcesor
get, 82, 260set, 82, 260
aktualizacja encji, 585aktualizacje, 480algorytm
asymetryczny, 445kryptograficzny, 445mieszaj�cy, 604symetryczny, 445
analiza obiektowa, 80animacje, 757anulowanie operacji, 193, 669Any CPU, 719API, 85API HTTP, 482API XML, 456aplikacja konsolowa, 31, 597
ChatHost, 490
aplikacjaNetwork Monitor, 489niepodpisana, 438podpisana, 437Silverlight, 698, 737WWW, 476
APM, Asynchronous Programming Model, 656,658
architektura x86, 717args, 36, 57argumenty opcjonalne, 731argumenty tablicowe, 237ASCII, 369asocjacje, associations, 122, 559ASP.NET, 21, 489, 777asynchroniczne metody, 518asynchroniczne operacje wej�cia-wyj�cia, 430asynchroniczne uzyskiwanie odpowiedzi, 520atak typu SQL injection, 544atak typu zeroday, 505Atom, 517AtomPub, 588atrybut, attribute, 675
[Flags], 99address, 492AttributeUsage, 678baseAddress, 492DefaultParameterValueAttribute, 109DllImport, 721Namespace, 498OptionalAttribute, 109PublicKeyToken, 603XmlIgnoreAttribute, 473
atrybutykonstruowanie, 678mo�liwe cele, 676nazywanie, 678podzespo�ów, 677u�ywanie, 679
818 � Skorowidz
atrybutyw�asne, 677XML, 460, 740
automatyzacja COM, COM automation, 25, 693,697
automatyzacja programu Word, 693
Bbardziej znacz�cy bajt, 376baza danych, 547, 550bezpieczestwo, 493bezpieczestwo w�tków, 508bia�e znaki, whitespace, 83, 277, 364biblioteka, 37
.NET Framework, 20, 35, 182ChatServerLibrary, 490kernel32.dll, 720mscorlib, 40, 604Task Parallel Library, 623, 625, 660TPL, 667
bibliotekiklas, Class Library, 20, 597kontrolek i XAML, 763typu, type library, 713
bie��cy katalog roboczy, 384BigInteger, 49BlockingCollection, 654blok case, 63blok catch, 222blok finally, 226blokada, 645blokada hierarchiczna, lock leveling, 645blokada referencji this, 643blokada SpinLock, 650blokady odczytu i zapisu, 651b��d BadImageFormatException, 718b��dy
programistyczne, 700sprawdzane jawnie, 216typograficzne, 362wyst�puj�ce najcz��ciej, 200
buforowanie, 428
CC# 4.0, 16camelCase, 83camelCasing, 113cecha, feature, 664chronione klasy wirtualne, 187ciasteczka, cookies, 506, 524CLI, Common Language Infrastructure, 24, 104
CLR, Common Language Runtime, 21, 23COM, Component Object Model, 626, 712, 715CPU, central processing unit, 616CRUD, Create, Read, Update, and Delete, 577Ctrl+Alt+C, 213Ctrl+D, 805Ctrl+F5, 31, 226Ctrl+O, 805Ctrl+Shift+A, 64Ctrl+Shift+N, 29Ctrl+T, 805cykl �ycia strony, 780czas bie��cy, 538czas UTC, 534czas �ycia kontekstu, 586czcionka, font, 324czyszczenie danych, 357
DDDoS, 538debugger, 67, 213debugowanie, 500debugowanie programów wielow�tkowych, 621debugowanie warto�ci zwracanych, 213defekt, bug, 199definicja
EDM, 575interfejsu ISet<T>, 318izolowania, 436operatora Where, 570
definiowanieinterfejsów, 149klas, 35, 81konstruktora, 86kontraktu, 484metod, 112typów, 35w�asnych atrybutów, 678w�asnych znaczników, 456
deklaracja pola, 91deklaracja typu wyliczeniowego, 97deklaracja w�a�ciwo�ci, 182deklarowanie metod statycznych, 115deklarowanie typów delegacji, 167deklarowanie zmiennej tablicowej, 236dekodowanie, 371dekompilator, 734dekompozycja funkcjonalna, 79delegacja, 166, 180
Action, 174anonimowa, 177Check, 175
Skorowidz � 819
DocumentProcess, 169EventHandler, 186QuickCheck, 175
delegacje do funkcji, 182delegacje i zmienne, 167delegacje predykatów, 243delegacje we w�a�ciwo�ciach, 180deserializacja XML, 469deszyfracja, 444, 450Dijkstra Edsger, 71dll, dynamic link library, 37DLR, Dynamic Language Runtime, 704d�ugo�� transakcji, 582DNS, Domain Name Service, 526dodawanie
blokowania do klasy, 644elementów, 256encji, 578formularzy, 792komponentu COM, 712kontrolek, 783, 792metody rozszerzenia, 279odwo�ania, 595odwo�ania do us�ugi, 498w�a�ciwo�ci, 82, 87
dokument RFC867, 530dokumentacja biblioteki .NET, 41dokumentacja MSDN, 101, 227, 659DOM, Document Object Model, 456domena aplikacji, appdomain, 231, 609domkni�cie, closure, 184dostawca bazy danych LINQ, 547, 570dost�p do danych, 542, 550dost�p do encji, 574dost�p do klasy, 600dost�p do �acuchów po��cze, 576dost�p do wspó�dzielonych danych, 583Double.NaN, 205Double.NegativeInfinity, 205Double.PositiveInfinity, 205drzewa wyra�e, expression trees, 179, 571dwustronne kontrakty, duplex contracts, 504dwustronny klient, 511dynamiczne wywo�ywanie metody, 688dyrektywa using, 32dyrektywa using System.Linq, 276dyski SSD, Solid State Driver, 629dzia�anie równoleg�e, parallel execution, 611dzieci, child elements, 454dziedziczenie, 124, 132, 565dziedzina aplikacji, 609dziel i rz�d, 77dzielenie ca�kowite, 53
dzielenie �acucha znaków, 354dzielenie przez zero, 204dzielenie zmiennoprzecinkowe, 53
EEDM, Entity Data Model, 552element, 742
behavior, 494ContentPresenter, 767endpoint, 492, 502g�ównt, root element, 454host, 492Image, 756MediaElement, 756Path, 752PostNote, 487przodka, 454serviceDebug, 494w�a�ciwo�ci, property element, 743
elementy, 453formatu, 345graficzne, 752interfejsu, 739potomne, 454XML, 459
encja SalesOrderHeader, 573encje, 553Entity Framework, 541, 551, 570
modele, 551odwzorowywanie, 551
enumeratory, 265ESQL, Entity SQL, 570exe, executable, 37
Ffiltr, 708filtr dynamiczny, 708filtrowanie, 285filtrowanie za pomoc� LINQ, 708finalizacja, 670flaga FileOptions.Asynchronous, 432flaga FileOptions.None, 432format
big-endian, 376daty, 341dziesi�tny, 332JPEG, 757JSON, 588liczbowy, 335liczbowy niestandardowy, 337ogólny, 334
820 � Skorowidz
formatPNG, 757powrotny, round trip, 336procentowy, 335sta�oprzecinkowy, 334szesnastkowy, 332uniwersalny, 342wyk�adniczy, 333wyk�adniczy bez okre�lonej precyzji, 334
formatowanie, 348formatowanie danych, 330formatowanie warto�ci walutowych, 331formularz, 806formularz z powi�zanymi kontrolkami, 810funkcja, 78, 178
CreateCustomerList, 458CreateFile, 725get_NazwaWlasciwosci, 147MoveFile, 720ReadFile, 726set_NazwaWlasciwosci, 147
funkcjeJavaScript, 699mieszaj�ce, 308MIME, 540
funkcyjne j�zyki programowania, 283
GGAC, global assembly cache, 606garbage collector, 20generator liczb losowych, 446generowanie podpisu cyfrowego, 604globalna przestrze nazw, 34globalny bufor podzespo�ów, 606g�ówny podzespó� wspó�dzia�ania, 27, 716gniazda, 480, 505, 525gniazda dzia�aj�ce w podwójnym trybie, 535gniazda TCP, 530, 533gniazda uk�adu, 747gradient, 754grafika trójwymiarowa, 758Griffiths Ian, 819grupowanie, 289grupowanie znaków w pary, 370gubienie pakietów, 529
Hhash publicznego klucza, 604hermetyzacja metody w obiekcie, 166hierarchia elementów, 453hierarchia katalogów, 394
hierarchia klas, 138, 147hiperprostok�t, orthotope, 251host, 490host us�ugi, 493
IIANA, Internet Assigned Numbers Authority, 530IL, Intermediate Language, 23, 38implementacja
interfejsu, 150, 153interfejsu IClockIn, 156interfejsu IEnumerable<T>, 268operatorów LINQ, 280
importowanie kontrolek, 712indeks, 234indeksator, 349indeksator klasy String, 349indeksator niestandardowy, 257informacje o b��dach, 208, 216informacje o pliku, 381, 385informacje o typie anonimowym, 295informacje o zdarzeniach, 195infrastruktura TLS/SSL, 540inicjalizator obiektu, 108, 110inicjalizator pola, 92inicjalizator tablicy, 236inicjowanie kolekcji, 236inkrementacja, 635instrukcja
fixed, 728for, 67foreach, 65goto, 63if, 58if … else, 61switch oraz case, 62throw, 215try-catch, 221while oraz do, 69yield return, 268, 270
instrukcjeiteracji, 64przypisania, 55sterowania przep�ywem, 56
integracja systemów, 482inteligentny znacznik, smart tag, 784IntelliSense, 180interfejs
IChatService, 498IClockIn, 156ICryptoTransform, 447IDataReader, 542
Skorowidz � 821
IDictionary, 316IEnumerable<T>, 265, 268, 317IEnumerator<T>, 265IFormatProvider, 348INamedPerson, 151INotifyPropertyChanged, 772klienta, 504komunikacji zwrotnej, 512
interoperacyjno��, 707IP, Internet Protocol, 526iterowanie dynamicznych w�a�ciwo�ci, 705izolowanie, 436, 439, 440
Jjawna implementacja interfejsu, 153jawne odwo�anie, 113jednow�tkowy kod asynchroniczny, 660j�zyk
C#, 13Eiffel, 215ESQL, 571F#, 22IronPython, 705IronRuby, 705JavaScript, 741kompilowany, 38LINQ, 275maszynowy, 38ML, 22obiektowy, 35, 80po�redni, Intermediate Language, 24, 38UML, 123VB.NET, 20WSDL, 485XAML, 735XHTML, 455XML, 453XPath, 468
JIT, just in time, 717JSON, JavaScript Object Notation, 476
Kkana� alfa, 754karta .NET, 595karta Browse, 596karta COM, 596karta Debug, 58karta Projects, 599kaskadowe operacje usuwania, 579katalog mechanizmu Isolated Storage, 443
katalogikontrola dost�pu, 395prawa dost�pu, 396usuwanie rekurencyjne, 405specjalne, 390testowe, 393
klasa, 80abstrakcyjna, 139Activator, 687Administrator, 142, 146APIFileReader, 725ApplicationException, 231argumentów zdarzenia, 190AutoResetEvent, 653AxHost, 714bazowa, 124, 140bazowa Array, 242BindingList, 813BindingSource, 799CalendarEvent, 243, 292CancelEventArgs, 192CancellationTokenSource, 668ChatServiceClient, 500ChatServiceProxy, 507ConfigurationManager, 576Console, 33, 36, 354ContentControl, 759Control, 742, 765, 801, 802CountdownEvent, 654CredentialCache, 521, 522CryptoStream, 444CultureInfo, 346Customer, 458DataSet, 545DataTable, 545DbException, 230Delegate, 166, 168Directory, 382, 384Dns, 658Document, 159DocumentProcessor, 162, 176, 195Encoding, 372Enumerable, 279Environment, 117, 390Exception, 215ExpandoObject, 705File, 277FileContents, 415, 421FileInfo, 385FileStream, 420, 428FileWebRequest, 518FileWebResponse, 518FireChief, 140
822 � Skorowidz
klasaFirefighterBase, 142FireStation, 145, 155Foo, 280FrameworkElement, 802FtpWebRequest, 518FtpWebResponse, 518GetFolderPath, 390HashSet<T>, 318HttpListener, 514HttpWebRequest, 518, 521HttpWebResponse, 518Image, 756Interlocked, 633InvalidOperationException, 215IPAddress, 526IsolatedStorageFile, 434, 442LinkList<T>, 320List<T>, 254, 262, 264ManualResetEvent, 653MemoryStream, 444, 448, 450Monitor, 646Mutex, 652NamedPerson, 146NetworkCredential, 522NetworkStream, 533Object, 144ObjectContext, 555Panel, 743Parallel, 671Path, 383pochodna, 124Polyline, 752ProcessEventArgs, 190Queue<T>, 319, 321RecordCache, 317Shape, 752Socket, 531, 537SortedSet<T>, 318SqlConnection, 542Stack<T>, 321Stopwatch, 262Stream, 516StreamReader, 405StreamWriter, 403String, 349StringBuilder, 143, 357, 362StringComparer, 288SynchronizationContext, 626System.Console, 21System.Globalization.CultureInfo, 346System.Math, 32, 686Task, 662
TaskFactory, 667TaskScheduler, 666Thread, 618ToDoEntry, 809TrademarkFilter, 170TraineeFirefighter, 139, 140TransactionScope, 581Turtle, 200, 223TurtleException, 230Type, 682Uri, 515VideoBrush, 757VisualStateManager, 769WaitForIt, 646WebClient, 514, 518WebProxy, 523WebRequest, 518WebResponse, 518XmlReader, 456XmlSerializer, 470XmlWriter, 456zagnie�d�ona, nested class, 174
klasy bazowe ADO.NET, 543klauzula
from, 276, 296group, 277, 290, 386into, 290let, 280ORDER BY, 568orderby, 286select, 277where, 277, 469, 547WHERE, 568
klauzule stra�nicze, guard clauses, 215klawisz F11, 67klawisz F5, 67klawisz F7, 738klawisz skrótu, 805klient .NET, 480klient Silverlight, 478, 491klient WCF, 496klient zewn�trzny, 483klienty aplikacji WWW, 477, 514klucz, 308, 445klucz g�ówny, 589klucz obcy, 558klucz publiczny, 604kod
ASCII, 354, 369kod b��du, 207filtruj�cy, 591funkcyjny, 36, 283generuj�cy zdarzenia, 191
Skorowidz � 823
HTML, 778, 789JavaScript, 698modyfikuj�cy informacje, 283niebezpieczny, 726polimorficzny, 264proceduralny, 36synchronizuj�cy, 644ukryty, code behind, 737, 795uzale�niony od interfejsu, 772wielow�tkowy, 637wykonywany na serwerze, 778XAML, 738, 774zarz�dzany, managed code, 23zewn�trzny, 32
kodowanie, 371kodowanie Base64, 449kodowanie Latin-1, 368kodowanie Mac-Roman, 369kodowanie tekstu, 371kodowanie znaków, 368kolejka, 319
FIFO, 321, 664LIFO, 321, 664
kolejkowanie elementów, 625kolejno��
bloków catch, 221elementów tablicy, 244inicjalizatorów pól statycznych, 118parametrów, 105wywo�ywania metod, 135
kolekcja, 264kolekcja BlockingCollection, 654kolekcja ogólna List<T>, 145kolekcja unikalnych warto�ci, 318kolekcje enumerowalne, 266kolumna dyskryminatora, 565kolumna rowguid, 558kombinacja warto�ci, 99komentarz, 43kompilacja, 38kompilator C#, 35kompozycja, composition, 123komunikacja dwukierunkowa, 503komunikacja pomi�dzy programami, 496komunikat o b��dzie, 84, 86, 103, 105, 125, 139,
141, 154, 221, 260, 598konfiguracja
polecenia Select, 790procesora dokumentów, 165proxy, 522serwera, 511
WCF, 490ród�a wi�zania, 800
konflikt nazw, 152konkatenacja, 289, 296konkatenacja �acuchów znaków, 353konkatenacja tablicy, 353konstruktor, 86
bezargumentowy, 109domy�lny, 104, 109klasy StringBuilder, 358statyczny, 117
kontekst obiektu, object context, 555, 574kontekst w�tków, 625kontrakt, contract, 484, 492kontrakt dwustronny, 504kontrakt us�ugi, service contract, 484kontrakty WCF, 484kontrolka
ListBox, 761, 773, 802, 814ListView, 802, 804, 813SplitContainer, 802TreeView, 762
kontrolki, 742, 759, 801ActiveX, 711, 715ASP.NET, 778serwerowe, 785serwerowe ASP.NET, 785sieciowe, web controls, 778u�ytkownika, user controls, 762Windows Forms, 797z wieloma elementami, 760z zawarto�ci�, 759zadokowane, 806zakotwiczone, 807
kontynuacje, 665konwersja, 305konwersja danych na Base64, 450konwersja liczb, 330konwersja �acuchów, 343koordynacja w�tków, 646kopiowanie warto�ci, 101kowariantne argumenty typów, 267kradzie� zada, 665krotno��, multiplicity, 563krój pisma, typeface, 324kryptografia, 445kryterium sortowania, 287krzywa Beziera, 753kszta�ty, 752kwantyfikator egzystencjalny, 301kwantyfikator ogólny, 301
824 � Skorowidz
LLearning WCF, 488leniwa enumeracja, 273leniwe kolekcje, 270leniwe przetwarzanie, 271Liberty Jesse, 819liczba logicznych procesorów, 629liczba w�tków, 616, 623liczby ca�kowite, 46liczby zmiennoprzecinkowe, 49limit, 452LINQ, Language Integrated Query, 20, 233, 275
generowanie elementów XML, 463przeszukiwanie kodu XML, 464tworzenie kodu XML, 463
LINQ to Entities, 544, 566LINQ to Objects, 275, 383, 547LINQ to SQL, 546, 548, 570LINQ to XML, 456Liskov Barbara, 125lista, 264
ACL, 493bibliotek w projekcie, 40inicjalizatora s�ownika, 309inicjalizatorów, 234, 235kontroli dost�pu, 493metod, 700metod na stosie, 74parametrów, 36plików, 381przycisków, 784szablonów, 483us�ug, 487
listy list, 258listy po��czone, 320litera�, 52litera� �acuchowy, 326litera� znakowy, 327litera�y XML, 23localhost, 528losowa nazwa pliku, 390losowo��, 446LSB, least-significant byte, 376LSP, Liskov Substitution Principle, 125
��adowanie encji dla asocjacji, 561�adowanie jawne, 607�adowanie podzespo�ów, 605�adowanie z bufora GAC, 606�adowanie z folderu aplikacji, 606
�adowanie z pliku Silverlight, 607�acuch formatuj�cy, 345�acuch jako klucz w s�owniku, 350�acuch po��czenia z SQL Serverem, 576�acuch UserAgent, 518�acuch znaków, 72, 324�acuchy URL, 514��czenie, 304��czenie elementów �cie�ek, 393��czenie klienta z serwerem, 496��czenie leniwych enumeracji, 272��czenie �acuchów znakowych, 143, 571��czenie si� z us�ugami, 531
Mmagazyn, store, 434magazyn ciasteczek, 524magazyn u�ytkownika, 440magazyny izolowane, 436ma�y odst�p, thin space, 366MapReduce, 303mechanizm
Hibernate, 548IntelliSense, 701Isolated Storage, 433, 440komunikacji, 491odwzorowywania, 557odzyskiwania pami�ci, 724ORM, 548P/Invoke, 720, 722szereguj�cy, scheduler, 615, 666wymiany metadanych, 512zmiany nazw, 139
media, 756MEF, Managed Extensibility Framework, 608metadane, metadata, 512, 593, 675metoda, 35, 71, 78
AddAnything, 702AddFirst, 320AddLast, 320AddNumbers, 235, 270AddProcess, 175AddRange, 256Aggregate, 303APM, 667Array.Copy, 246Array.Resize, 247, 254Array.Sort, 245Backwards, 279BeginGetRequestStream, 520BeginTransaction, 583BeginWrite, 431
Skorowidz � 825
ClockIn, 145, 157CompareBytes, 422CompareFiles, 415CompareTo, 245Compile, 570Configure, 169Connect, 513Console.ReadKey, 374Console.ReadLine, 692Contains, 318ContinueWith, 665Convert.FromBase64String, 450Convert.ToBase64String, 450CopyTo, 246, 425Cos, 687CreateComInstanceFrom, 687CreateEncryptor, 447CreateInstance, 687CreateInstanceFrom, 687CreateTestFiles, 401DateTime.ParseExact, 345Delete, 389Directory.CreateDirectory, 394Directory.EnumerateFiles, 276Directory.GetFile, 412Directory.SetAccessControl, 410Disconnect, 507DisplayMatches, 380, 385, 414, 422Dispose, 587Dns.GetHostEntry, 535double.Parse, 57DownloadData, 514DownloadFile, 514DownloadString, 514, 655Drive, 202DynamicWhere, 710Element, 468Elements, 468Encoding, 324EncryptString, 446End, 658EndGetRequestStream, 520EnlistTransaction, 583Enqueue, 319Equals, 308ExecuteReader, 543ExtinguishFire, 140File, 402File.Create, 431File.CreateText, 435File.EndWrite, 432File.Exists, 406File.OpenRead, 420, 426
File.OpenWrite, 426File.ReadAllBytes, 419File.ReadAllLines, 72File.ReadAllText, 628Find, 244FindAll, 242FindIndex, 244FindLast, 244FindLastIndex, 244First, 299Flush, 429FlushFinalBlock, 448GenerateIV, 445GenerateKey, 445GetAccessControl, 410GetAllFilesInDirectory, 271, 275, 276GetBytes, 372GetCurrentDirectory, 384GetEnumerator, 265GetEventsByDay, 289GetFiles, 383GetFolderPath, 392GetFullPath, 384GetHashCode, 308GetLength, 253GetRandomFileName, 389GetStream, 520GetTempFileName, 388GetType, 470GetValue, 234GetWebRequest, 518GetWebResponse, 518HandleError, 217Include, 561IncreaseQuotaTo, 441IndexOf, 244, 361InspectDirectories, 380, 381, 386Invoke, 168IsNullOrEmpty, 143Join, 620LastIndexOf, 244Listen, 536Load, 561LoadFile, 608Main, 36, 115, 189MakeTestDirectories, 388, 409Monitor.Enter, 642Monitor.Exit, 642myString.Replace, 692odczytuj�ca liczby z pliku, 72OpenReadAsync, 517OpenWrite, 517OpenWriteAsync, 517
826 � Skorowidz
metodaParallel.For, 671Parallel.ForEach, 673Path.Combine, 394POST, 517PostNote, 503, 509Process, 164, 169QueueUserWorkItem, 624ReadAllBytes, 414ReadAllLines, 414ReadAllText, 414ReadKey, 658ReadNumbersFromFile, 73Refresh, 585, 586RemoveAccessRuleSpecific, 410RemoveFirst, 320RollCall, 145Rotate, 202RunFor, 227SaveChanges, 583SecretKeyAndIV, 445Seek, 424Select, 278SendMessage, 107SetCurrentDirectory, 384SetValue, 234Sort, 244Split, 236String.Concat, 353String.Format, 345String.Join, 354String.Split, 237, 355Substring, 351, 367Task.WaitAll, 663Thread.Sleep, 649ToArray(), 73ToBuffer, 450ToLower, 355ToString, 330, 460ToUpper, 355Trim, 365, 366TrimEnd, 365TrimStart, 365, 367TryGetValue, 313, 315TryParse, 344UploadData, 516UploadFile, 516UploadString, 516WaitUntilReady, 648Where, 278WriteAllLines, 402WriteLine, 36
metodyabstrakcyjne, 138, 139anonimowe, anonymous methods, 177asynchroniczne, 516klasy List<T>, 264klasy Path, 383przeci��one, 106rozszerze, extension methods, 278, 703rozszerze dla klasy String, 352statyczne, 115metody wirtualne, 130metody wytwórcze, factory methods, 108, 110metody zagnie�d�one, 622
mniej znacz�cy bajt, 376mobilny profil, 392model
DOM, 698encji danych, 552jednow�tkowy, 660koncepcyjny, conceptual model, 552MVC, 777programowania asynchronicznego, 520, 656widoku, view model, 775
modelowanie oprogramowania, 123M-odst�p, em space, 366modyfikacja kontraktu, 485modyfikacja nag�ówka, 519modyfikacja procesora dokumentów, 172modyfikacja zmiennych zewn�trznych, 184modyfikator
abstract, 130, 150const, 92dost�pu, 85, 132new, 127out, 214, 267override, 129protected, 132protected internal, 132readonly, 638ref, 214, 730sealed, 136unsafe, 724virtual, 130
modyfikowanie encji, 577monitor, 639MSB, most-significant byte, 376multipleksing, 612muteks, 652
Skorowidz � 827
Nnadekspresja, overexpression, 664narz�dzie ildasm, 147narz�dzie SQL Profiler, 567nas�uchiwanie przychodz�cych po��cze TCP, 535na�ladowanie, impersonation, 437nawias klamrowy, 35, 65nawias kwadratowy, 36nazwa Control, 33nazwa podzespo�u, 602nazwa zast�pcza, alias, 48NHibernate, 548niejawna konwersja, 54niezmienno��, 638niezmienno�� �acucha znaków, 349NIST, National Institute of Standards and
Technology, 531N-odst�p, en space, 366no-PIA, 27notatka, 486numer portu, 530numer wersji, 603numerowanie elementów, 297
Oobci��enie procesora, 630obiekt, 80
APIFileReader, 727ASCIIEncoding, 727CalendarEvent, 244CancellationToken, 668COM, 696, 697DirectorySecurity, 410Encoding, 405FileDetails, 381FileInfo, 281FileNameGroup, 381FileSecurity, 429ImageSource, 776INamedPerson, 152IntPtr, 428IsolatedStorageFile, 443List<double>, 73List<T>, 641po�rednicz�cy, proxy, 500SafeFileHandle, 428ServiceHost, 495Socket, 534StreamReader, 451StreamWriter, 435StringBuilder, 378
TrademarkFilter, 171TransactionScope, 581typu Program, 72
obiekty .NET, 699obiekty ExpandoObject, 705obliczanie odleg�o�ci, 115obrazy, 755obs�uga
anulowania, 668b��dów, 211, 413, 669powinowactwa, 626stronicowania, 590wariancji, 267w�tków, 617wyj�tków, 219, 406, 412zdarze, 811, 813
ochrona, 599ochrona wewn�trzna, internal, 600odliczanie, 654odnajdywanie warto�ci, 310odpytywanie, polling, 656odwo�anie, reference, 594odwo�anie do pliku DLL, 596odwo�anie do tablicy, 253odwo�anie do zasobów EDM, 576odwo�ywanie zdarzenia, 192odwzorowywanie, mapping, 551odzwierciedlanie, reflection, 675, 682
badanie metadanych, 681na rzecz typu, 684, 686odkrywanie typów, 681, 683póne wi�zanie, 681, 686tworzenie typów, 681
odzyskiwanie pami�ci, 20ognisko wprowadzania, input focus, 770okno
Add Connection, 789Add New Item, 552Add Reference, 595Add Service Reference, 496, 501Configure Data Source, 787Data Source Configuration Wizard, 787debuggera, 218konsoli, 495Mapping Details, 554Mapping Details, 555Model Browser, 554New Project, 30Solution Explorer, 557wiersza polece, 31
opakowanie obiektu komunikacji zwrotnej, 512opcja Remove and Sort, 34operacja wykonywana bez po��czenia, 545
828 � Skorowidz
operacjeasynchroniczne, 660na katalogach, 382na plikach, 382na �cie�kach, 383wej�cia-wyj�cia, 407
operator&&, 60/, 52||, 61+=, 93, 634=, 92Aggregate, 302All, 301AND, 99Any, 301as, 157Average, 302Cast, 305Concat, 289, 304Count, 302dekrementacji --, 56Distinct, 304Except, 304First, 299group, 384inkrementacji ++, 56Intersect, 304Last, 299LastOrDefault, 299Max, 302Min, 302new, 108, 118OR, 99porównania, 60rzutowania, 54SelectMany, 297Single, 300Sum, 302Take, 299ToArray, 305ToDictionary LINQ, 317ToList, 305trójargumentowy, 61Union, 304Zip, 298
operatory LINQ, 279, 283, 285opónione wykonanie, deferred execution, 566opró�nianie buforów, 429optymistyczna wspó�bie�no��, optimistic
concurrency, 584ORM, Object Relational Mapper, 548osadzanie us�ugi WCF, 495osie wyszukiwania, 468
Ppakiet, 526pakowanie, boxing, 144pami�� izolowana, isolated storage, 379pami�� podr�czna, 523panel
Canvas, 746DockPanel, 747Grid, 743, 744Properties, 784Solution Explorer, 39, 594, 713StackPanel, 745, 749Toolbox, 712, 783
parametr domy�lny, 107parametry nazwane, 109parametry typów, type parameters, 255PascalCase, 83PascalCasing, 113peer-to-peer, 476pe�na wersja .NET Framework, 733p�tla
do while, 70for, 68foreach, 65while, 69
PIA, primary interop assembly, 27, 716pisanie bibliotek, 597platforma .NET, 13platforma ASP.NET, 33platforma WCF, 483, 505platforma Windows Form, 21plik
App.config, 490, 497, 502, 574AssemblyInfo.cs, 39, 602ChatService.cs, 484Class1.cs, 597DisplayShippers.aspx.cs, 795IChatService.cs, 484MyData.svc, 589Program.cs, 30Reference.cs, 498standardsettings.txt, 443web.config, 495Web.config, 782
plikipobieranie informacji, 385porównywanie zawarto�ci, 414powtarzaj�ce si�, 379tworzenie, 388usuwanie, 389wczytywanie do pami�ci, 414wykrywanie duplikatów, 433zapisywanie, 402
Skorowidz � 829
aspx, 778, 793exe, 38dll, 38edmx, 553, 555kodu ukrytego, 782msi, 39testowe, 387tymczasowe, 388XAML, 738, 764xap, 607
PLINQ, równoleg�e LINQ, 673pobieranie
adresów IP, 528ciasteczek, 524danych, 514, 517danych ASCII, 533plików, 382znaków, 351
POCO, Plain Old CLR Object, 556podpis cyfrowy, 603podzespo�y o silnych nazwach, 603podzespo�y wspó�dzia�ania, interop assemblies,
714podzespó�, 437, 593, 683pojedyncza instancja us�ugi, 507pojemno�� obiektu StringBuilder, 360pola bitowe, bit fields, 99pole, field, 90pole logiczne canGo, 646pole statyczne, 116, 508pole tylko do odczytu, 95, 118pole wyboru Create directory for solution, 30polecenie Select, 790polecenie Set as Startup Project, 495polimorfizm, polimorphism, 125, 264po��czenie z baz� danych, 567, 574po��czenie ze ród�em danych, 788pomiar wydajno�ci listy, 262porównywanie, 308porównywanie elementów, 245porównywanie nazw, 707port, 530, 536porz�dkowanie, 286powiadomienia, 645powi�zania, 160powinowactwo do w�tku, thread affinity, 625powrót karetki, carriage return, 354poziom ochrony, 84, 599
internal, 84privat, 84protected, 85protected internal, 85
póne �adowaniea danych, lazy loading, 561
póne wi�zanie, late binding, 687prawa dost�pu, 395prawo Moore’a, 629predykat, predicate, 175prezentacja oddzielona, separated presentation,
775priorytety operatorów, 54proces wdra�ania oprogramowania, 482procesor dokumentów, 164, 171, 173procesor logiczny, 616procesory wielordzeniowe, 616profil podstawowy, basic profile, 477program
Adobe Illustrator, 755Adobe Photoshop, 755charmap.exe, 373Expression Blend, 740storeadm.exe, 441WCF Test Client, 487Wireshark, 489
programowanieasynchroniczne, 612, 655dynamiczne, 26funkcyjne, 20wielow�tkowe, 612
projekcja, projection, 291projekt, 37
bazy danych, 551biblioteki klas, 597ChatClient, 499ChatHost, 495ChatServerLibrary, 490Mono, 25Moonlight, 25, 734
projektowanie wed�ug kontraktu, 215protoko�y TCP/IP, 526protoko�y us�ug sieciowych WS-*, 506protokó�
Daytime Protocol, 530HTTP, 311, 505, 513HTTPS, 540IP, 526kontroli transmisji, 528TCP, 505, 529
proxy, 500, 522przechowywanie danych, 311przechwytywanie b��dów, 213przechwytywanie wyj�tków, 221przeci��anie, 105przekazanie delegacji, 243przekazywanie danych, 695przekszta�cenia afiniczne, affine transformations,
750
830 � Skorowidz
przekszta�cenie RotateTransform, 752prze�adowanie, 704prze��czenie kontekstu, 623przerwanie dzia�ania p�tli, 71przerwanie operacji, 192przes�anianie udost�pnionych metod, 133przes�anianie w�a�ciwo�ci, 769przestrze kodowa, code space, 370przestrze nazw, namespace, 32, 41
ChatService, 498Reflection, 681System, 33System.Collections.Concurrent, 654System.Collections.Generic, 33, 307System.Collections.Generics, 254System.Data.EntityClient, 574System.Data.SqlClient, 32System.Diagnostics, 262System.Dynamic, 706System.IO, 32, 277System.Linq, 33, 279System.Net, 526System.Net.Mail, 540System.Net.Mime, 540System.Net.NetworkInformation, 540System.Net.PeerToPeer, 540System.Net.Security, 540System.Reflection, 608, 682System.Text, 33System.Threading.Tasks, 661System.Transactions, 581System.Xml.Serialization, 469
przesy�anie danych, 516przetwarzanie dokumentów, 160, 163przetwarzanie �acuchów znaków, 356przycisk Show All Files, 498przyciski z marginesami, 750przypinanie deklaratywne, declarative pinning,
726pula w�tków, thread pool, 624, 625punkt kocowy
adres, address, 491kontrakt, contract, 491wi�zanie, binding, 491
punkt przerwania, breakpoint, 67punkt wej�cia, entry point, 37, 594punkt wstrzymania, 213punkty kodowe, code points, 370pusta referencja, 364pusty �acuchów znaków, 363pusty wiersz, 364
Rrachunek lambda, 178RAD, Rapid Application Development, 777redukowanie, reduce, 303refaktoryzacja, 74, 128referencja, 100, 125, 128referencje do obiektów, 238, 304referencje do referencji do obiektu, 730regu�a dost�pu, 410rejestrowanie komunikatów, 183relacja, 559relacja dziedziczenia, 124relacja rodzic-dziecko, 663, 667relacje pomi�dzy tabelami, 304relacyjna baza danych, 551relacyjny magazyn danych, 549renderowanie obrazów, 479REST, Representational State Transfer, 479RIA, Rich Internet Application, 19, 476, 733rodzaj izolacji, 439rodzestwo, sibling elements, 454rodzic, parent element, 454router, 526rozpakowywanie, 145rozproszona odmowa us�ugi, 538rozszerzenie j�zyka C#, 215równoleg�e LINQ, 673równoleg�o�� danych, 671równowa�no�� typów, type equivalence, 716ró�nica pomi�dzy tablicami i indeksatorami, 261rzadkie tablice, sparse array, 314rzutowanie, cast, 144
Sscenariusz dzia�ania wielow�tkowego, 643schemat przechowywania danych, store schema, 552Schemat XML, XML Schema, 471sekcja References, 40separacja kodu, code separation, 243, 778separator, 237serializacja, serialization, 231serializacja XML, 469, 472Service Pack, 199serwer .NET, 480sesja, 506siatka, 743siatka danych, data grid, 814silna nazwa, strong name, 437, 604Silverlight, 25, 477, 549, 733
dost�p do danych, 549elementy graficzne, 752
Skorowidz � 831
gniazda uk�adu, 747typy paneli, 743
sk�adnia C# 4.0, 729sk�adnia indeksatorów, 729sk�adnia zapyta LINQ, 281sk�adowa klasy, 113sk�adowe zdarze, 190s�ownik, dictionary, 195, 307, 416, 508
przegl�danie zawarto�ci, 316rzadka tablica, 314w�a�ciwo�ci dynamiczne, 313
s�ownik Properties, 313s�owo
Callback, 512pop, 74push, 74System, 32
s�owo kluczoweabstract, 139base, 134break, 63, 70catch, 219class, 136, 138, 238do, 70dynamic, 27, 295, 313, 689, 699enum, 96event, 186finally, 219in, 278interface, 150lock, 642, 674namespace, 34new, 127, 293null, 100params, 237partial, 557ref, 694static, 35, 72, 114, 691struct, 103this, 104, 279try, 219using, 32value, 88VALUE, 573var, 691void, 35, 86
SMT, simultanous multithreading, 616solucja, solution, 37sortowanie danych, 245, 287sortowanie przy u�yciu LINQ, 283specyfikacja CDMA, 24specyfikacja Daytime Protocol, 532specyfikacja oprogramowania, 81spinanie, 298
SpinLock, 650sp�aszczanie list, 296sprawdzanie b��dów, 208sprawdzanie pojemno�ci, 359sprawdzanie typów, 157sprawdzanie zakresów, 205SQL Server, 543SQL Server 2008 Express, 550sta�a, 92
Environment.NewLine, 354String.Empty, 362
stan nas�uchu, 537stan statyczny, 116stan widoku, 779standard OCX, 711sterta, 101stopie tablicy, ang. rank, 253stos, 101, 321stos wywo�a, call stack, 74, 214stos wywo�a w�tku, 617stra�nik, guard, 215strefa czasowa GMT, 342strona kodowa, code page, 369strona kodowa Windows-1252, 369strumienie
aktualne po�o�enie, 425buforowanie, 428odczyt, 419porównywanie, 423szyfrowanie, 444zamykanie, 422zapis danych, 425
strumie, stream, 379, 418adaptuj�cy, 447CryptoStream, 447IsolatedStorageFileStream, 436MemoryStream, 448obiektów, 292szyfrowania i deszyfracji, 451szyfruj�cy, 444wyj�ciowy, 448
styl dynamiczny, 693, 696styl funkcyjny, 283styl przycisku, 768styl statyczny, 691style, 767subskrybent, 195subskrypcja zdarze, 188symbol
#, 337, (przecinek), 337. (kropka), 3370, 337
832 � Skorowidz
symulator robota, 201synchronizacja, 639, 653synchronizacja w�tków, 508system 64-bitowy, 717systemowy mechanizm obs�ugi b��dów, 226szablon, template, 765
ADO.NET Entity Data Model, 552Console Application, 30Empty ASP.NET Web Application, 588WCF Service Library, 484
szablonydanych, 773kontrolek, 765, 769projektów ASP.NET, 781
szybko�� dzia�ania procesorów, 629szyfrowanie, 444szyfrowanie �acucha znaków, 446
��cie�ka, 384�lad stosu, 494�miertelny u�cisk, deadly embrace, 636�rodowisko uruchomieniowe, 23
Ttabela SalesOrderDetail, 578tabela SalesOrderHeader, 557tablica, array, 233tablica bajtów, 448, 776tablica �acuchów znaków, 233tablice
elementy typu referencyjnego, 239elementy typu warto�ciowego, 240kopiowanie elementów, 246odwo�ania do elementów, 253odwo�ania do jednego obiektu, 239okre�lanie typu elementów, 236porz�dkowanie elementów, 244tworzone dynamicznie, 235typ i liczba elementów, 235wyszukiwanie elementów, 242, 264
tablice nieregularne, jagged arrays, 247, 250tablice o zmiennej wielko�ci, 254tablice prostok�tne, 251, 252tablice tablic, 248TCP, Transmission Control Protocol, 528, 529technologia
.NET, 21ActiveX, 626AJAX, 476, 778ASP, 783
ASP.NET, 13Authenticode, 603COM, 626, 711Entity Framework, 546Flash, 733IntelliSense, 715LINQ, 275ODBC, 542RIA, 476Silverlight, 19, 25, 436, 468Silverlight 2, 13Silverlight 3, 698Silverlight 4, 699SMT, 616WCF, 313WCF Data Services, 549Web Forms, 777Windows Forms, 310, 797WPF, 310, 626, 743, 797
tekst jawny, plain text, 445tekst zaszyfrowany, 445test procesu przetwarzania, 174testowanie
aplikacji, 513kodu, 64kolekcji, 300programu, 58robota, 202zapytania, 791
testowy host, 490testowy host us�ugi WCF, 486testowy klient WCF, 486testy us�ugi, 484TPL, Task Parallel Library, 661transakcja niejawna, implicit transaction, 582transakcje, 579transakcje automatyczne, 583tre��, content, 454tryb ConcurrencyMode.Single, 508tryb debugowania, 31tworzenia
interfejsu u�ytkownika, 733aplikacji internetowych, 781aplikacji Silverlight, 735aplikacji w ASP.NET, 777asocjacji, 122delegacji, 172dokumentu XML, 457, 461hierarchii klas, 135interfejsów, 152interfejsu u�ytkownika, 736, 740klucza i wektora pocz�tkowego, 445kodu wielow�tkowego, 634
Skorowidz � 833
kodu XML, 463�acuchów znaków, 358niebezpiecznego kontekstu, 726nowego typu, 294nowego wyj�tku, 225obiektu argumentu zdarzenia, 191obiektu Thread, 623programu, 29projektu WCF, 483solucji, 597tablicy, 234, 238tablicy dynamiczne, 235tablicy tablic, 248typów, 681w�tków, 613, 624w�asnych klas wyj�tków, 231w�asnych typów enumerowalnych, 268w�a�ciwo�ci, 90
typ, 32Action<>, 172anonimowy, anonymous type, 293bazowy, governing type, 97BigInteger, 49, 273Boolean, 59Char, 325, 385Control, 33DateTime, 340DateTimeOffset, 340, 341Dictionary, 315dynamic, 694, 701, 707, 731enum, 96FileAccess, 427FileMode, 426FileOptions, 430FileShare, 427Object, 295ogólny, generic type, 172, 255Predicate<T>, 175referencyjny, 619String, 325System.Double, 205TimeSpan, 107var, 696warto�ciowy, 102wygenerowany przez kompilator, 281wyliczeniowy, 96
typyatrybutów, 676liczbowe, 47liczbowe wbudowane, 144obiektów, 697referencyjne, 100, 238
tablic, 236wyj�tków, 228zmiennoprzecinkowe, 49zmiennych, 46
Uudost�pnianie
danych, 588encji, 589metod, 133us�ug, 489
ujednolicone identyfikatory zasobów, 515ujednolicone lokalizatory zasobów, 515ukrywanie metod, 128ukrywanie sk�adowych klasy bazowej, 127UML, Unified Modeling Language, 123Unicode, 369unikatowo�� u�ytkowników, 509uprawnienia, 396, 400
administracyjne, 493czynne, 396do nas�uchiwania komunikatów, 493odbieranie, 398, 409okre�lanie, 411pe�ne do katalogu, 410przydzielanie, 410przywracanie, 410specjalne, 396
uprawnienie ListDirectory, 409URI, Uniform Resource Identifier, 479, 515URL, Uniform Resource Locator, 515uruchamianie debuggera, 217uruchamianie mechanizmu obs�ugi b��dów, 226uruchamianie wielu projektów, 501us�uga
ChatService, 487RESTful, 479Service1, 484WCF, 477, 489WWW, 482WWW .NET, 483
ustanowienie sesji, 507ustawienia kulturowe, 347usuwanie
bia�ych znaków, 365dyrektyw using, 34encji, 579katalogu, 401plików, 389podzespo�u, 608znaków, 366
834 � Skorowidz
uszkodzenie danych, 641UTF-16, 370, 375UTF-8, 370, 405uwierzytelnianie, 521uwierzytelnianie podstawowe, basic
authentication, 522uwierzytelnianie skrótowe, digest authentication,
522uwierzytelnianie zintegrowane, 521uwi�zienie, livelock, 636
VVBA, Visual Basic for Applications, 693Visual Studio, 29Visual Studio 2010, 25
WW3C, World Wide Web Consortium, 453warstwa, 160warto�ci domy�lne parametrów, 109warto�ci typu FileMode, 427warto�� FileSystemRights, 429warto�� inicjuj�ca, seed, 446warto�� null, 158warto�� SeekOrigin.Current, 425warto�� typu bool, 59w�tek g�ówny, 614, 649w�tki, threads, 613
blokada SpinLock, 650blokowanie, 639izolacja, 637koordynacja, 630, 646liczba, 637monitor, 649niezmienno��, 638synchronizacja, 638uwi�zienie, 636wspó�dzielenie informacji, 637wspó�u�ytkowanie informacji, 633wy�cig, 634zablokowanie, 628zakleszczenie, 636
w�tki programowe, 616WCF, Windows Communication Foundation, 13,
21, 475, 483WCF Data Services, 548, 587WCF Service Host, 486, 490WCF Service Library, 490WCF Test Client, 486, 488Web Forms, 777
cykl �ycia strony, 780
wektor pocz�tkowy, initialization vector, 445wi�zanie, 491
WS-ADDRESSING, 491wsDualHttpBinding, 511wsHttpBinding, 491, 511WS-SECURITY, 491
wi�zanie danych, 771, 786, 808widok zapytania, query view, 558wielko�� pliku, 385wielokrotne dziedziczenie implementacji, 149wielokrotne dziedziczenie interfejsów, 149wielow�tkowo��, 612wielow�tkowo�� wspó�bie�na, simultanous
multithreading, 616wi�zy, 577, 578Win32, 711Win32 API, 720Windows Forms, 797
tworzenie aplikacji, 798witryna MSDN, 83w�asne interfejsy, custom interfaces, 698w�asne szablony, 766w�asny obiekt dynamiczny, 706w�a�ciwo�ci do��czone, attached properties, 744w�a�ciwo�ci dynamiczne, 313w�a�ciwo�ci indeksowane, indexed properties, 729w�a�ciwo�ci kontrolki, 714w�a�ciwo�ci nawigacji, navigation properties, 559w�a�ciwo�ci uk�adów, 747w�a�ciwo��, 82
AddressFamily, 528AutoReverse, 758CachePolicy, 523Capacity, 358CompareTo, 245ConcurrencyMode, 508Content, 767ContentTemplate, 776Count, 47Credentials, 521Direction, 96Exception.Data, 230HeaderTemplate, 776ID, 300includeExceptionDetailInFaults, 494InnerException, 225ItemTemplate, 776LayoutTransform, 751Length, 247, 358LongLength, 247Message, 215Method, 167MyProperty, 729
Skorowidz � 835
nawigacji, 578Position, 112, 814provider, 575Quota, 441SalesOrderHeaders, 561SessionMode, 505StartTime, 245, 288statyczna, 116stream.Length, 420SystemDirectory, 117Target, 167Template, 765tylko do odczytu, 94typu bool, 95typu wyliczeniowego, 97VisualStateGroups, 770zawieraj�ca delegacj�, 180
w�ókna, fibers, 617WPF, Windows Presentation Foundation, 13, 733,
757WSDL, Web Service Definition Language, 485wskanik do bufora, 724wskaniki, 724, 727wspó�bie�no��, 612, 671wspó�bie�no�� precyzyjna, fine-grained
concurrency, 664wspó�dzia�anie, interoperatibility, 711wspó�dzielenie kontraktów, 499wspó�dzielenie stanu przez w�tki, 618wspó�u�ytkowany stan programu, 622wstrzykni�cie kodu SQL, 791wyj�tek, exception, 214
AddressAlreadyInUseException, 501ArgumentException, 228ArgumentNullException, 229DirectoryNotFoundException, 407DriveNotFoundException, 407FileLoadException, 407FileNotFoundException, 407FormatException, 57IndexOutOfRangeException, 234InvalidCastException, 145InvalidOperationException, 245, 300, 306IOException, 407NotSupportedException, 448, 569NullReferenceException, 245OptimisticConcurrencyException, 585OverflowException, 420PathTooLongException, 407RuntimeBindeException, 703SqlException, 230Unauthorized AccessException, 409UpdateException, 578
wyj�tkiblok catch, 221blok finally, 227generowane przez FileInfo, 413istniej�ce, 230operacji wej�cia-wyj�cia, 406ponowne zg�aszanie, 223przechwytywanie, 221przekazywanie na wy�szy poziom, 226sygnalizowanie b��dów, 214systemu zabezpiecze, 406testowanie, 229typowe, 406typy, 227w�asne, 230zg�aszanie, 224, 228
wykonywanie odroczone, deffered execution, 273,547
wy�adowywanie, 608wy��czenie programu WCF Service Host, 496wyra�enia o postaci instrukcji, 179wyra�enia zapyta, query expressions, 275, 566wyra�enie, 52wyra�enie lambda, 178, 244, 281, 662wyrównanie elementu, 748wysuni�cie wiersza, line feed, 354wyszukiwanie
nazwy ustawienia, 494plików, 379pojedynczego w�z�a, 467tekstu, 361w dokumencie XML, 465
wy�cig, race, 634wy�wietlenie kategorii na li�cie, 773wyw�aszczenie w�tku, 617wywo�ywanie
funkcji Win32 API, 722konstruktora, 104metody Include, 562metod klasy bazowej, 134metody wirtualnej, 131us�ugi sieciowej, 500
wzorzec, 110
XXBAP WPF, 477XBAP, XAML Browser Application, 477XHTML, 455XML, eXtensible Markup Language, 453
836 � Skorowidz
Zzachowania, behaviors, 758zadania zwracaj�ce wyniki, 664zadanie, 661zadanie code-based, 670zaginanie, fold, 303zakleszczenie, deadlock, 508, 636zakres adresów, 493zaleg�o�ci, backlog, 536zapis pliku tekstowego, 402zapis tekstu, 403, 435zapora sieciowa, 505zapytania
ESQL, 572LINQ, 276, 317, 591LINQ to Entities, 569LINQ to Objects, 569SQL, 544, 567
zapytaniedefiniuj�ce, defining query, 558grupuj�ce, 290jako wywo�anie metody, 277�acuchowe, 568oparte na �acuchach znakowych, 572orderedOrders, 568zdegenerowane, 292
zarz�dzaniekluczami, 605magazynami, 441sesj�, 512
zast�powanie tekstu, 361zastrzyk SQL, SQL injection, 544zdalne wywo�anie metody, 478zdarzenia, 653
deklaracja, 186kod, 191nazwa, 186odwo�ywanie, 192przechowywanie informacji, 195rejestracja, 188sk�adowe, 190subskrypcja, 188typ delegacji, 186zg�aszanie, 187
zdarzenie, event, 186domy�lne, 813DownloadProgressChanged, 516OpenReadCompleted, 517przesy�ane, postback event, 779Processing, 192
zg�aszanie wyj�tków, 219zg�aszanie zdarze, 187
ziarno, 446zintegrowany j�zyk zapyta, 275z��czenia, 304z�o�enie, assembly, 593zmiana mechanizmu komunikacji, 511zmienna, 45
iteracyjna, 65lokalna, 113lokalna projected, 295lokalna w zapytaniu, 282myDictionary, 307myKey, 350overlaps, 301result, 315this, 114zakresu, range variable, 276
znacznik, tag, 453<param>, 44<returns>, 44<summary>, 44asp, 783elementu pustego, 455, 459
znak&, 805@, 329dwukropka, 343kropki, 37odst�pu, 42odwrotnego uko�nika (\), 327pusty, null character, 327�rednika, 42uko�nika, 343wykrzyknika, 69
znaki /*, 43//, 43specjalne, 327steruj�ce, 328
zwi�zek, 558jeden-do-jednego, 564jeden-do-wielu, 562potrójny, ternary, 563wiele-do-wielu, 564
zwracanie warto�ci, 219
�ród�o danych, 771ród�o wi�zania, binding source, 799
Recommended