Microsoft Visual Studio 2005 Ksiega eksperta vs25ke

background image

Wydawnictwo Helion

ul. Koœciuszki 1c

44-100 Gliwice

tel. 032 230 98 63

e-mail: helion@helion.pl

Microsoft Visual Studio 2005.

Ksiêga eksperta

Autor: Lars Powers, Mike Snell

T³umaczenie: Tomasz Walczak, Maria Chaniewska

ISBN: 83-246-0837-0

Tytu³ orygina³u:

Microsoft Visual Studio 2005 Unleashed

Format: B5, stron: oko³o 848

oprawa twarda

Zwiêksz swoj¹ produktywnoœæ dziêki Visual Studio 2005 oraz Team System

• Kompletny przegl¹d œrodowiska

• Nowoœci w Visual Studio 2005

• Praca zespo³owa w Team System

Microsoft nie zaprzestaje wysi³ków, doskonal¹c narzêdzia do tworzenia programów

dla platformy .NET. Visual Studio 2005 to nastêpny krok w tym kierunku. Nowe

w³aœciwoœci pozwalaj¹ jeszcze bardziej zwiêkszyæ wydajnoœæ programistów, poprawiæ

komfort ich pracy i zautomatyzowaæ wykonywanie ¿mudnych zadañ, a wersja Team

System umo¿liwia wspó³pracê ca³ych zespo³ów projektowych, w³¹czaj¹c w to

mened¿erów projektu, architektów, programistów, testerów czy administratorów.

Wieloœæ mo¿liwoœci i funkcji œrodowiska Visual Studio 2005 sprawia, ¿e nawet

doœwiadczonym programistom przyda siê wszechstronne Ÿród³o wiedzy.
Ksi¹¿ka „Microsoft Visual Studio 2005. Ksiêga eksperta” to podrêcznik, w którym

wyczerpuj¹co omówiono to rozbudowane œrodowisko. Dziêki niemu poznasz elementy

interfejsu u¿ytkownika potrzebne do utworzenia aplikacji od pocz¹tku do koñca

- od przygotowywania projektu, poprzez pisanie i modyfikowanie kodu, a¿ po

diagnozowanie i testowanie programu. Nauczysz siê korzystaæ z nowych funkcji

Visual Studio 2005 umo¿liwiaj¹cych miêdzy innymi automatyzacjê testów, wydajn¹

refaktoryzacjê czy wi¹zanie danych bez koniecznoœci pisania kodu, co przyczyni siê

do wzrostu Twej produktywnoœci. Dowiesz siê tak¿e, jak u¿ywaæ narzêdzi wersji Team

System pozwalaj¹cych na sprawn¹ wspó³pracê wielu osób pracuj¹cych przy tworzeniu

oprogramowania.

• Przegl¹d okien projektowych i edytorów

• Praca z projektami i rozwi¹zaniami

• Diagnozowanie kodu

• Obs³uga baz danych

• Refaktoryzacja kodu

• Pisanie kreatorów, makr i dodatków

• Tworzenie aplikacji sieciowych w ASP.NET

• Pisanie i konsumowanie us³ug sieciowych

• Automatyzacja testów

• Zarz¹dzanie zmianami i kontrola wersji

• Wspó³praca zespo³owa

• Spo³ecznoœæ programistów .NET

Ta ksi¹¿ka to nieoceniona pomoc dla wszystkich u¿ytkowników Visual Studio 2005.

background image

Spis treści

O autorach ..................................................................................................15
Wprowadzenie ............................................................................................17

Część I Wprowadzenie do Visual Studio 2005 i .NET ..........................21

Rozdział 1. Krótki przegląd Visual Studio 2005 .........................................23

Kilka przydatnych usprawnień ............................................................................................................ 23

Projektowanie, pisanie i przeglądanie kodu .................................................................................. 24
Edycja i diagnozowanie kodu ........................................................................................................ 32
Współdzielenie (i wykorzystywanie) kodu w społeczności programistów ................................... 37
Uwzględnianie potrzeb różnych klientów ..................................................................................... 38
Połączenie z danymi ...................................................................................................................... 43
Automatyzacja testów aplikacji ..................................................................................................... 45

Przegląd wersji ..................................................................................................................................... 46

Wersje Express .............................................................................................................................. 47
Wersja Standard ............................................................................................................................. 48
Wersja Professional ....................................................................................................................... 48
Visual Studio Team System .......................................................................................................... 49

Podsumowanie ..................................................................................................................................... 53

Rozdział 2. Krótki przegląd środowiska IDE ..............................................55

Instalacja .............................................................................................................................................. 55

Wybór języka ................................................................................................................................. 55
Instalowanie narzędzi do kontroli kodu źródłowego ..................................................................... 56
Konfigurowanie środowiska programistycznego .......................................................................... 57

Strona startowa ..................................................................................................................................... 59

Opcje uruchomieniowe .................................................................................................................. 60

Pierwszy projekt ................................................................................................................................... 60
Pasek menu .......................................................................................................................................... 61
Liczne paski narzędzi ........................................................................................................................... 66

Standardowy pasek narzędzi ......................................................................................................... 66

Okno narzędzi ...................................................................................................................................... 68
Graficzne okna projektowe .................................................................................................................. 69
Edytory tekstu ...................................................................................................................................... 70

Edytory kodu ................................................................................................................................. 70
Dostosowywanie edytorów ............................................................................................................ 73

Solution Explorer ................................................................................................................................. 74
Okno Properties ................................................................................................................................... 74

background image

6

Microsoft Visual Studio 2005. Księga eksperta

Zarządzanie wieloma oknami środowiska IDE ....................................................................................75

Przyczepianie .................................................................................................................................75
Dokowanie .....................................................................................................................................76

Podsumowanie ......................................................................................................................................78

Rozdział 3. Rozszerzenia platformy i języków .NET w wersji 2005 ........... 79

Rozszerzenia wspólne dla różnych języków .NET ...............................................................................79

Typy ogólne ....................................................................................................................................80
Typy dopuszczające wartość null....................................................................................................85
Typy (klasy) częściowe...................................................................................................................88
Właściwości z mieszanym poziomem dostępu ...............................................................................89
Wieloznaczne przestrzenie nazw ....................................................................................................89

Rozszerzenia języka Visual Basic .........................................................................................................90

Instrukcja Continue .........................................................................................................................91
Typy bez znaku ...............................................................................................................................91
Operator IsNot.................................................................................................................................91
Blok Using ......................................................................................................................................92
Dostęp do formularzy podobny jak w Visual Basic 6.....................................................................92
Jawne zerowe dolne ograniczenie w tablicach................................................................................92
Przeciążanie operatorów .................................................................................................................93
Niestandardowe zdarzenia ..............................................................................................................93

Rozszerzenia języka C#.........................................................................................................................93

Metody anonimowe.........................................................................................................................94
Klasy statyczne................................................................................................................................95
Używanie dwóch wersji tego samego podzespołu..........................................................................96
Podzespoły zaprzyjaźnione .............................................................................................................97

Rozszerzenia platformy .NET 2.0 .........................................................................................................98

Nowe właściwości w podstawowych technologiach ......................................................................99

Podsumowanie.....................................................................................................................................100

Część II Środowisko Visual Studio 2005 — szczegóły ......................101

Rozdział 4. Rozwiązania i projekty .......................................................... 103

Wprowadzenie do rozwiązań .............................................................................................................103

Tworzenie rozwiązania ................................................................................................................104
Korzystanie z rozwiązań ..............................................................................................................108

Zapoznawanie się z projektami ..........................................................................................................113

Tworzenie projektu ......................................................................................................................113
Używanie plików definicji projektu .............................................................................................116
Praca z projektami ........................................................................................................................121

Podsumowanie ....................................................................................................................................126

Rozdział 5. Przeglądarki i eksploratory ................................................... 129

Okno Solution Explorer ......................................................................................................................129

Ikony i wskazówki graficzne .......................................................................................................130
Zarządzanie rozwiązaniami ..........................................................................................................134
Zarządzanie projektami ................................................................................................................135

Okno Class View ................................................................................................................................135

Pasek narzędzi ..............................................................................................................................135
Pasek wyszukiwania .....................................................................................................................137

background image

Spis treści

7

Panel obiektów ............................................................................................................................ 137
Panel składowych ........................................................................................................................ 139

Okno Server Explorer ........................................................................................................................ 140

Połączenia z danymi .................................................................................................................... 140
Komponenty serwera ................................................................................................................... 141

Okno Object Browser ........................................................................................................................ 145

Zmiana zasięgu ............................................................................................................................ 145
Przeglądanie obiektów ................................................................................................................. 146

Okno Performance Explorer .............................................................................................................. 148

Tworzenie sesji wydajności ......................................................................................................... 148
Konfigurowanie sesji ................................................................................................................... 149
Jednostki docelowe sesji .............................................................................................................. 153
Raporty ........................................................................................................................................ 154
Czytanie raportów dotyczących wydajności ............................................................................... 154

Okno Macro Explorer ........................................................................................................................ 160

Węzeł główny — Macros ............................................................................................................ 161
Projekty ........................................................................................................................................ 161
Moduły ......................................................................................................................................... 162
Makra ........................................................................................................................................... 162

Okno Document Outline .................................................................................................................... 162

Modyfikowanie elementów ......................................................................................................... 162

Podsumowanie ................................................................................................................................... 164

Rozdział 6. Wprowadzenie do edytorów i okien projektowych ...........165

Podstawy ............................................................................................................................................ 165

Edytor tekstu ................................................................................................................................ 166
Okna projektowe środowiska Visual Studio ............................................................................... 168

Pisanie kodu w edytorze .................................................................................................................... 168

Otwieranie edytora ...................................................................................................................... 169
Pisanie kodu ................................................................................................................................. 169
Budowa okna edytora kodu ......................................................................................................... 171
Narzędzia do nawigowania po kodzie ......................................................................................... 173
Przeszukiwanie dokumentów ...................................................................................................... 175
Diagnozowanie w edytorze kodu ................................................................................................ 183
Drukowanie kodu ........................................................................................................................ 186
Używanie okna Code Definition ................................................................................................. 187

Tworzenie i modyfikowanie dokumentów i szablonów XML .......................................................... 188
Tworzenie aplikacji bazujących na formularzach Windows ............................................................. 191

Dostosowywanie wyglądu formularza ........................................................................................ 192
Dodawanie kontrolek do formularza ........................................................................................... 193
Pisanie kodu ................................................................................................................................. 195

Tworzenie formularzy sieciowych ..................................................................................................... 198

Projektowanie aplikacji bazujących na formularzach sieciowych .............................................. 199

Tworzenie komponentów i kontrolek ................................................................................................ 203

Tworzenie nowego komponentu lub kontrolki ............................................................................ 204
Uwagi na temat pisania kodu komponentów ............................................................................... 205

Podsumowanie ................................................................................................................................... 206

background image

8

Microsoft Visual Studio 2005. Księga eksperta

Rozdział 7. Korzystanie z narzędzi zwiększających produktywność ... 207

Podstawowe narzędzia pomocnicze edytorów kodu ..........................................................................209

Śledzenie zmian ...........................................................................................................................209
Wskazówki dotyczące problemów ...............................................................................................209
Aktywne odnośniki ......................................................................................................................210
Kolorowanie składni ....................................................................................................................211

Schematy i nawigacja .........................................................................................................................212

Schematy kodu .............................................................................................................................212
Nawigowanie po kodzie HTML ...................................................................................................214

Inteligentne znaczniki i operacje ........................................................................................................216

Okno projektowe HTML ..............................................................................................................216
Okno projektowe formularzy Windows .......................................................................................217
Edytor kodu ..................................................................................................................................217

Mechanizm IntelliSense .....................................................................................................................217

Uzupełnianie słów (Complete Word) ...........................................................................................218
Okno z informacjami podręcznymi (Quick Info) .........................................................................219
Okno z listą składowych (List Members) ....................................................................................220
Okno z informacjami o parametrach (Parameter Info) ................................................................220
Fragmenty kodu i kod szablonowy ..............................................................................................221
Dopasowywanie nawiasów ..........................................................................................................229
Dostosowywanie mechanizmu IntelliSense do własnych potrzeb ...............................................230

Okno Task List ...................................................................................................................................231

Zadania związane z komentarzami ..............................................................................................232
Zadania związane ze skrótami .....................................................................................................233
Zadania użytkownika ...................................................................................................................234

Podsumowanie ....................................................................................................................................234

Rozdział 8. Refaktoryzacja kodu ............................................................. 235

Podstawy refaktoryzacji w Visual Studio ...........................................................................................236

Uruchamianie narzędzi do refaktoryzacji ....................................................................................237
Podgląd zmian ..............................................................................................................................240

Zmienianie nazw ................................................................................................................................241

Uruchamianie operacji Rename ...................................................................................................242
Używanie okna dialogowego Rename .........................................................................................243

Pobieranie metod ................................................................................................................................244

Uruchamianie refaktoryzacji Extract Method ..............................................................................244
Pobieranie metod ..........................................................................................................................245
Generowanie szkieletu metody ....................................................................................................250

Pobieranie interfejsów ........................................................................................................................250

Uruchamianie refaktoryzacji Extract Interface ............................................................................250
Pobieranie interfejsów ..................................................................................................................251

Refaktoryzacja parametrów ................................................................................................................253

Usuwanie parametrów ..................................................................................................................253
Przekształcanie zmiennych lokalnych na parametry ....................................................................254
Zmiana kolejności parametrów ....................................................................................................256

Hermetyzacja pól ................................................................................................................................257

Uruchamianie refaktoryzacji Encapsulate Field ..........................................................................257
Okno dialogowe Encapsulate Field ..............................................................................................258

Podsumowanie ....................................................................................................................................259

background image

Spis treści

9

Rozdział 9. Diagnozowanie w Visual Studio 2005 ...................................261

Podstawy diagnozowania ................................................................................................................... 261

Scenariusz .................................................................................................................................... 262
Wiele etapów diagnozowania ...................................................................................................... 262
Diagnozowanie aplikacji (samodzielne sprawdzanie) ................................................................. 263
Podsumowanie podstaw diagnozowania ..................................................................................... 272

Debuger środowiska Visual Studio .................................................................................................... 272

Menu i pasek narzędzi Debug ..................................................................................................... 272
Opcje diagnozowania .................................................................................................................. 276
Wkraczanie w kod, wychodzenie z niego i przeskakiwanie ........................................................ 277
Określanie warunków wstrzymania wykonywania kodu ............................................................ 282
Korzystanie z punktów śledzenia (When Hit…) ......................................................................... 289
Podglądanie danych w debugerze ................................................................................................ 291
Korzystanie z funkcji „zmień i kontynuuj” ................................................................................. 297
Zdalne diagnozowanie ................................................................................................................. 298

Podsumowanie ................................................................................................................................... 299

Rozdział 10. Obiektowy model automatyzacji środowiska

Visual Studio .........................................................................301

Przegląd obiektowego modelu automatyzacji ................................................................................... 302

Wersje modelu obiektowego ....................................................................................................... 302
Kategorie automatyzacji .............................................................................................................. 302
Obiekt główny DTE (DTE2) ....................................................................................................... 304

Obiekty Solution i Project .................................................................................................................. 306

Kontrolowanie projektów wchodzących w skład rozwiązania .................................................... 308
Dostęp do kodu projektu .............................................................................................................. 308

Okna ................................................................................................................................................... 309

Dostęp do okien ........................................................................................................................... 311
Interakcja z oknami ..................................................................................................................... 312
Okna tekstowe i panele ................................................................................................................ 315
Rodzaje okien narzędzi ................................................................................................................ 317
Okna połączone ........................................................................................................................... 325

Paski poleceń ..................................................................................................................................... 326
Dokumenty ......................................................................................................................................... 330

Dokumenty tekstowe ................................................................................................................... 330

Obiekty polecenia .............................................................................................................................. 341

Wykonywanie poleceń ................................................................................................................ 343
Dodawanie klawiszy skrótu ......................................................................................................... 343

Obiekty debugera ............................................................................................................................... 344
Zdarzenia automatyzacji .................................................................................................................... 345
Podsumowanie ................................................................................................................................... 346

Rozdział 11. Tworzenie makr, dodatków i kreatorów ............................347

Pisanie makr ....................................................................................................................................... 348

Rejestrowanie makr ..................................................................................................................... 348
Korzystanie z okna Macro Explorer ............................................................................................ 349
Używanie środowiska IDE Macros ............................................................................................. 350
Obsługa zdarzeń .......................................................................................................................... 357
Wywoływanie makr ..................................................................................................................... 363

background image

10

Microsoft Visual Studio 2005. Księga eksperta

Tworzenie dodatków w Visual Studio ...............................................................................................366

Zarządzanie dodatkami ................................................................................................................367
Uruchamianie kreatora dodatków ................................................................................................368
Struktura dodatków ......................................................................................................................375
Przykładowy dodatek — paleta do wybierania kolorów .............................................................383

Tworzenie kreatorów dla środowiska Visual Studio ..........................................................................403

Analiza struktury kreatorów .........................................................................................................403
Tworzenie kreatorów typu Add New Item ...................................................................................406

Podsumowanie ....................................................................................................................................411

Rozdział 12. Społeczność .NET: wykorzystanie

i tworzenie współdzielonego kodu ................................ 413

Możliwości Visual Studio związane ze społecznością .......................................................................413

Strona startowa Visual Studio ......................................................................................................414
Menu Community ........................................................................................................................419

Wykrywanie i wykorzystanie współdzielonych zasobów ..................................................................430

Rodzaje współdzielonych zasobów ..............................................................................................430
Wyszukiwanie odpowiednich zasobów .......................................................................................431
Instalowanie i przechowywanie udostępnianych zasobów ..........................................................431

Własny wkład w społeczność .............................................................................................................433

Tworzenie udostępnianych elementów (szablonów projektów i elementów) .............................433
Tworzenie szablonów projektów .................................................................................................433
Tworzenie szablonów elementów ................................................................................................439
Tworzenie pakietów .....................................................................................................................440
Udostępnianie własnych rozwiązań .............................................................................................447

Podsumowanie ....................................................................................................................................448

Część III Visual Studio 2005 w praktyce ...........................................449

Rozdział 13. Tworzenie interfejsów użytkownika w ASP.NET .................. 451

Podstawy witryn w ASP.NET ............................................................................................................451

Tworzenie nowego projektu aplikacji sieciowej ..........................................................................452
Kontrolowanie właściwości i opcji projektu ................................................................................460
Tworzenie stron internetowych ....................................................................................................465

Projektowanie interfejsu użytkownika ...............................................................................................470

Określanie układu strony i położenia kontrolek ...........................................................................470
Tworzenie jednolitego wyglądu i zachowania .............................................................................472
Tworzenie UI konfigurowanego przez użytkownika ...................................................................482

Praca z kontrolkami ASP.NET ...........................................................................................................491

Udoskonalenia kontrolek ASP.NET ............................................................................................491
Nowe kontrolki wewnątrz ASP.NET ...........................................................................................492

Podsumowanie ....................................................................................................................................498

Rozdział 14. Budowanie formularzy Windows ........................................ 499

Podstawy projektowania formularzy ..................................................................................................499

Uwzględnianie użytkownika końcowego ....................................................................................500
Rola standardów UI ......................................................................................................................500
Planowanie interfejsu użytkownika .............................................................................................501

Tworzenie formularza ........................................................................................................................502

Typ projektu Windows Application .............................................................................................503
Właściwości i zdarzenia formularza ............................................................................................504

background image

Spis treści

11

Dodawanie kontrolek i komponentów ............................................................................................... 506

Układ i pozycjonowanie kontrolek .............................................................................................. 507
Używanie kontenerów ................................................................................................................. 511
Wygląd i zachowanie kontrolek .................................................................................................. 515
Praca z kontrolkami ToolStrip ..................................................................................................... 516
Wyświetlanie danych ................................................................................................................... 523

Tworzenie własnych kontrolek .......................................................................................................... 527

Dziedziczenie z istniejącej kontrolki ........................................................................................... 527
Definiowanie kontrolki użytkownika .......................................................................................... 528
Tworzenie własnej kontrolki ....................................................................................................... 531

Podsumowanie ................................................................................................................................... 531

Rozdział 15. Praca z bazami danych ......................................................533

Tworzenie tabel i związków .............................................................................................................. 533

Tworzenie nowej bazy danych SQL Server ................................................................................ 534
Definiowanie tabel ....................................................................................................................... 535
Korzystanie z Database Diagram Designer ................................................................................. 537

Praca z poleceniami SQL ................................................................................................................... 541

Pisanie zapytań ............................................................................................................................ 541
Tworzenie widoków .................................................................................................................... 545
Programowanie procedur składowanych ..................................................................................... 545
Tworzenie wyzwalaczy ............................................................................................................... 549
Tworzenie funkcji definiowanych przez użytkownika ................................................................ 549

Korzystanie z projektów bazy danych ............................................................................................... 551

Tworzenie projektu bazy danych ................................................................................................. 551
Automatyczne generowanie skryptów ......................................................................................... 552
Wykonywanie skryptu ................................................................................................................. 553

Tworzenie obiektów bazy danych w kodzie zarządzanym ................................................................ 554

Rozpoczynanie projektu SQL Server .......................................................................................... 554
Tworzenie procedury składowanej w C# .................................................................................... 555

Wiązanie kontrolek z danymi ............................................................................................................ 557

Wprowadzenie do wiązania danych ............................................................................................ 557
Automatyczne generowanie związanych kontrolek Windows Forms ......................................... 559
Ręczne wiązanie kontrolek formularzy Windows ....................................................................... 564
Wiązanie danych z kontrolkami sieciowymi ............................................................................... 568

Podsumowanie ................................................................................................................................... 572

Rozdział 16. Usługi sieciowe i Visual Studio ............................................573

Definicja usług sieciowych ................................................................................................................ 574

Terminy dotyczące usług sieciowych .......................................................................................... 574

Komponenty projektu usługi sieciowej ............................................................................................. 575

Usługi sieciowe .NET .................................................................................................................. 575
Projekt ASP.NET Web Service ................................................................................................... 576
Pliki usługi sieciowej ................................................................................................................... 577

Programowanie usługi sieciowej ....................................................................................................... 578

Tworzenie usługi sieciowej ......................................................................................................... 578
Dostęp i wywoływanie usługi sieciowej ..................................................................................... 582

Konsumowanie usługi sieciowej ........................................................................................................ 588

Definiowanie referencji sieciowej ............................................................................................... 588
Wyświetlanie referencji sieciowej ............................................................................................... 590
Wywoływanie usługi sieciowej ................................................................................................... 590

background image

12

Microsoft Visual Studio 2005. Księga eksperta

Zarządzanie wyjątkami usług sieciowych ..........................................................................................592

Tworzenie wyjątku usługi sieciowej ............................................................................................592
Obsługa wyjątków usług sieciowych ...........................................................................................593

Podsumowanie ....................................................................................................................................593

Część IV Visual Studio 2005 Team System ........................................595

Rozdział 17. Praca zespołowa i Visual Studio Team System ................. 597

Przegląd projektów tworzenia oprogramowania ................................................................................597

MSF Agile ....................................................................................................................................598
MSF dla CMMI ............................................................................................................................600

Wprowadzenie do Visual Studio Team System .................................................................................601

Visual Studio Team Architect ......................................................................................................603
Visual Studio Team Developer ....................................................................................................603
Visual Studio Team Test ..............................................................................................................605
Team Foundation Server ..............................................................................................................606

Podsumowanie ....................................................................................................................................608

Rozdział 18. Zarządzanie i praca z projektami zespołowymi ............... 611

Anatomia Team Foundation Server ....................................................................................................611

Warstwa aplikacji .........................................................................................................................612
Warstwa danych ...........................................................................................................................614
Bezpieczeństwo ............................................................................................................................615

Zarządzanie projektem zespołowym ..................................................................................................617

Tworzenie nowego projektu zespołowego ...................................................................................618
Dodawanie użytkowników do zespołu projektu ..........................................................................621
Kontrolowanie struktury projektu i iteracji ..................................................................................626

Przyłączanie się do zespołu projektowego .........................................................................................628

Łączenie się z Team Foundation Server ......................................................................................628
Korzystanie z Team Explorer .......................................................................................................629
Korzystanie z portalu projektu .....................................................................................................629
Korzystanie z Microsoft Office ....................................................................................................631
Korzystanie z alarmów projektu ..................................................................................................633
Praca z raportami projektu ...........................................................................................................634

Podsumowanie ....................................................................................................................................636

Rozdział 19. Kontrola kodu źródłowego ................................................. 637

Podstawy systemu kontroli kodu źródłowego serwera Team Foundation .........................................638

Podstawowa architektura .............................................................................................................638
Uprawnienia w systemie zabezpieczeń ........................................................................................639

Pierwsze kroki w korzystaniu z kontroli kodu źródłowego serwera Team Foundation ......................640

Konfigurowanie środowiska Visual Studio .................................................................................641
Używanie okna Source Control Explorer ....................................................................................642
Zarządzanie obszarami roboczymi ...............................................................................................644
Dodawanie plików do systemu kontroli kodu źródłowego ..........................................................647

Modyfikowanie plików objętych kontrolą kodu źródłowego ............................................................648

Pobieranie plików z repozytorium kodu źródłowego ..................................................................648
Przesyłanie zmian .........................................................................................................................649
Wprowadzenie do zbiorów zmian ................................................................................................654
Odkładanie kodu ..........................................................................................................................655
Scalanie zmian .............................................................................................................................656

background image

Spis treści

13

Rozgałęzianie i scalanie ..................................................................................................................... 659

Rozgałęzianie ............................................................................................................................... 660
Scalanie ........................................................................................................................................ 661

Podsumowanie ................................................................................................................................... 662

Rozdział 20. Śledzenie elementów roboczych .......................................663

Wprowadzenie do elementów roboczych ......................................................................................... 664

Funkcje elementów roboczych i SDLC ....................................................................................... 664
Wybieranie zestawu elementów roboczych dla własnego projektu ............................................ 664
Identyfikowanie wspólnych cech elementów roboczych ............................................................ 669

Zarządzanie elementami roboczymi za pomocą narzędzi Team Explorer ........................................ 678
Wprowadzenie do ról zespołowych ................................................................................................... 684

Wizja projektu ............................................................................................................................. 684
Menedżer projektu ....................................................................................................................... 685
Analityk biznesowy ..................................................................................................................... 692
Programista .................................................................................................................................. 694
Tester ........................................................................................................................................... 698

Dostosowywanie elementów roboczych do własnych potrzeb .......................................................... 699

Umieszczanie w procesie elementów roboczych ........................................................................ 700
Dostosowywanie istniejących elementów roboczych ................................................................. 705

Podsumowanie ................................................................................................................................... 707

Rozdział 21. Modelowanie .......................................................................709

Elementy Team Architect .................................................................................................................. 710

Szablony projektów ..................................................................................................................... 710
Szablony elementów .................................................................................................................... 711

Projektowanie aplikacji ...................................................................................................................... 711

Korzystanie ze schematów aplikacji ............................................................................................ 712

Definiowanie systemów ..................................................................................................................... 720

Schemat systemu ......................................................................................................................... 720

Definiowanie infrastruktury ............................................................................................................... 722

Schemat logicznego centrum danych .......................................................................................... 723

Wdrażanie aplikacji ........................................................................................................................... 731

Schemat wdrażania ...................................................................................................................... 732
Sprawdzanie poprawności wdrożenia ......................................................................................... 733
Raport dotyczący wdrożenia ....................................................................................................... 733

Implementowanie aplikacji ................................................................................................................ 735

Ustawianie właściwości implementacji ....................................................................................... 735
Generowanie projektów ............................................................................................................... 736

Graficzne tworzenie kodu .................................................................................................................. 736

Schematy klasy ............................................................................................................................ 737
Dodawanie elementów ................................................................................................................ 738
Definiowanie relacji między klasami .......................................................................................... 739
Definiowanie metod, właściwości, pól i zdarzeń ........................................................................ 742

Podsumowanie ................................................................................................................................... 743

Rozdział 22. Testowanie ............................................................................745

Tworzenie i konfigurowanie testów oraz zarządzanie nimi .............................................................. 746

Projekty testów ............................................................................................................................ 746
Elementy testów .......................................................................................................................... 748

background image

14

Microsoft Visual Studio 2005. Księga eksperta

Menedżer testów ..........................................................................................................................749
Konfigurowanie testów ................................................................................................................750

Testy programistów ............................................................................................................................751

Przykładowy test jednostki ..........................................................................................................751
Pisanie efektywnych testów jednostek .........................................................................................752
Używanie klas i metod testów jednostek .....................................................................................753
Tworzenie testów jednostek .........................................................................................................754
Uruchamianie testów jednostek ...................................................................................................755
Analiza pokrycia kodu .................................................................................................................757

Testy sieciowe ....................................................................................................................................759

Rejestrowanie testów sieciowych ................................................................................................759
Zarządzanie żądaniami w testach aplikacji sieciowych ...............................................................761
Uruchamianie testów sieciowych i przeglądanie wyników .........................................................762
Dodawanie danych do testów sieciowych ....................................................................................762
Pobieranie wartości z testów sieciowych .....................................................................................768
Zasady sprawdzania poprawności w żądaniach ...........................................................................769

Testy obciążenia .................................................................................................................................771

Tworzenie testów obciążenia .......................................................................................................772
Przeglądanie i modyfikowanie testów obciążenia .......................................................................777
Uruchamianie testów obciążenia i wyświetlanie wyników .........................................................778

Ręczne testy ........................................................................................................................................779

Tworzenie testów ręcznych ..........................................................................................................779
Wykonywanie testów ręcznych ....................................................................................................779

Testy ogólne .......................................................................................................................................780
Testy uporządkowane .........................................................................................................................782

Tworzenie testów uporządkowanych ...........................................................................................782

Podsumowanie ....................................................................................................................................783

Rozdział 23. Team Foundation Build ........................................................ 785

Przegląd Team Foundation Build .......................................................................................................785

Architektura Team Foundation Build ..........................................................................................786

Tworzenie nowej wersji .....................................................................................................................789

Określanie informacji o nowej wersji ..........................................................................................789
Modyfikowanie typu wersji .........................................................................................................793
Funkcje MSBuild .........................................................................................................................797

Uruchamianie budowania ...................................................................................................................798

Szeregowanie wersji .....................................................................................................................798
Wywoływanie procesu budowania ..............................................................................................799

Monitorowanie i analizowanie wersji ................................................................................................800

Wprowadzenie do przeglądarki Team Build Browser .................................................................800
Raporty dotyczące wersji .............................................................................................................803

Podsumowanie ....................................................................................................................................804

Skorowidz ................................................................................................... 805

background image

Rozdział 3.

Rozszerzenia platformy

i języków .NET w wersji 2005

Większa część niniejszej książki dotyczy głównie narzędzi IDE Visual Studio służących
poprawie produktywności. Uważamy jednak, że warto zapoznać się także z nowinkami
w językach .NET i samej platformie. Te elementy (IDE, języki i platforma) są udostęp-
niane przez Microsoft w jednym pakiecie. Z tego powodu wszelkie opisy dotyczące IDE
byłyby niepełne bez wzmianki o pozostałych produktach.

W rozdziale opisano nowinki w językach Visual Basic .NET i C#. Opisujemy także nie-
które z kluczowych poprawek w samej platformie. Zakładamy, że większość Czytelników
ma przynajmniej podstawową wiedzę na temat albo Visual Basic, albo któregoś ze starszych
języków bazujących na C, a także w miarę dobrze zna platformę .NET. Dlatego kon-
centrujemy się głównie na tych rozszerzeniach, dzięki którym .NET 2.0 stanowi krok
naprzód w porównaniu z poprzednimi wersjami.

Rozszerzenia wspólne

dla różnych języków .NET

Języki z rodziny .NET otrzymały sporo rozszerzeń w wyniku poprawek wprowadzonych
we wspólnym środowisku uruchomieniowym (ang. Common Language Runtime — CLR).
Choć niektóre z rozszerzeń są specyficzne dla poszczególnych języków, liczne istotne
usprawnienia w wersji 2005 dotyczą ich obu. Dlatego przedstawiamy je wspólnie wraz
z przykładowym kodem w obu tych językach. Ta grupa rozszerzeń języków .NET obej-
muje następujące kluczowe usprawnienia:

Typy ogólne.

Typy dopuszczające wartość "null".

Typy częściowe.

Właściwości o mieszanym poziomie dostępu.

Wieloznaczne przestrzenie nazw.

background image

80

Część I

Wprowadzenie do Visual Studio 2005 i .NET

W następnych punktach szczegółowo opisujemy każdy z tych elementów. Przedstawiamy
przykłady w językach C# i Visual Basic, ponieważ powyższe nowinki dotyczą ich obu.
Rozszerzenia specyficzne dla każdego z tych języków opisane są w dalszej części rozdziału.

Typy ogólne

Typy ogólne (ang. generics) to bez wątpienia najważniejsza nowość w .NET 2.0, dlatego
żadna książka opisująca tę platformę nie byłaby kompletna bez opisu ich działania. Ty-
py ogólne początkowo mogą się wydawać skomplikowane, szczególnie jeśli zaczniesz
analizować kod zawierający dziwne nawiasy ostre w przypadku języka C# czy słowo
kluczowe

Of

w Visual Basic. Poniższe podpunkty zawierają definicję typów ogólnych,

wyjaśniają ich znaczenie oraz pokazują, jak używać ich w kodzie.

Definicja typów ogólnych

Działanie typów ogólnych jest stosunkowo proste. Czasem trzeba utworzyć obiekt (lub
zdefiniować parametr metody), jednak na etapie pisania kodu nie wiadomo, jakiego typu
będzie ten obiekt. Typ powinien być ogólny i umożliwiać osobie korzystającej z niego
określenie faktycznego typu obiektu.

Do rozwiązania tego problemu można użyć klasy

System.Object

— tak postępowali

programiści używający wersji starszych od 2.0. Jednak wyobraź sobie, że chcesz uniknąć
konieczności pakowania typów, sprawdzania ich w czasie wykonywania programu i jaw-
nego rzutowania w wielu miejscach kodu. Pozwala to zrozumieć, do czego mogą służyć
typy ogólne.

Zalety stosowania typów ogólnych najlepiej pokazać na przykładzie. Najprostszy to two-
rzenie klasy kolekcji zawierającej inne obiekty. Wyobraź sobie, że chcesz zapisać grupę
obiektów. Można to zrobić, dodając je do kolekcji

ArrayList

. Jednak kompilator i środo-

wisko uruchomieniowe mają informacje jedynie o tym, że przechowywana jest lista ja-
kichś obiektów. Może ona zawierać obiekty typu

Order

,

Customer

lub obu tych typów

(lub dowolnych innych). Jedyny sposób, aby dowiedzieć się, co przechowuje lista, to
napisać kod sprawdzający typ przechowywanych obiektów.

Oczywiście można obejść ten problem i napisać własną silnie typowaną listę. Choć takie
rozwiązanie jest możliwe, wymaga to żmudnego pisania niemal takiego samego kodu dla
każdego typu, który ma być przechowywany w kolekcji. Jedyną istotną różnicą w kodzie
jest typ obiektów, jakie lista może przechowywać. Ponadto wciąż trzeba rzutować obiekty,
ponieważ używana lista zawiera obiekty typu

System.Object

.

Teraz wyobraź sobie, że możesz napisać klasę, która umożliwia użytkownikom definio-
wanie typu. Można napisać jedną ogólną klasę listy, która zamiast zawierać obiekty typu

System.Object

, będzie zawierała obiekty typu użytego w miejscu definiowania tej klasy.

Umożliwia to określenie w kodzie wywołującym ogólną listę tego, czy na przykład ma
ona przechowywać obiekty typu

Order

lub

Customer

. Właśnie to umożliwiają typy ogólne.

Można myśleć o klasach ogólnych jako o szablonach klas.

background image

Rozdział 3.

Rozszerzenia platformy i języków .NET w wersji 2005

81

Są dwa rodzaje elementów ogólnych: typy ogólne i metody ogólne. Typy ogólne to klasy,
których typ jest definiowany w miejscu tworzenia egzemplarza danej klasy. Metoda ogólna
ma przynajmniej jeden parametr o typie ogólnym. W tym przypadku w metodzie używany
jest ogólny parametr, ale jego typ jest określany dopiero w momencie wywołania metody.
Ponadto można zdefiniować różne ograniczenia związane z tworzeniem typów ogólnych.
W następnych podpunktach przedstawimy różne związane z nimi zagadnienia.

Zalety stosowania typów ogólnych

Teraz jasno widać niektóre z zalet stosowania typów ogólnych. Bez takich typów klasy
mające zarządzać różnymi typami muszą używać typu

System.Object

. Powoduje to

liczne problemy. Po pierwsze, nie ma możliwości nałożenia ograniczeń ani sprawdzenia
przez kompilator, co jest zapisywane w obiekcie. Istotne są wynikające z tego wnioski
— nie wiadomo, co znajduje się w kolekcji, jeśli nie można ograniczyć typu zapisywanych
w niej obiektów. Po drugie, używając obiektu, trzeba sprawdzić jego typ, a następnie zrzu-
tować z powrotem na oryginalny typ. Oczywiście powoduje to spadek wydajności. Po-
nadto jeśli programista używa typów skalarnych i zapisuje je w obiektach

System.Object

,

typy są pakowane. W momencie pobierania typu skalarnego trzeba go rozpakować. Także
to wymaga zbędnego kodu i niepotrzebnie pogarsza wydajność. Typy ogólne rozwiązują
wszystkie te problemy. Poniżej opisujemy, jak jest to możliwe.

W jaki sposób .NET obsługuje typy ogólne?

Kompilacja typu ogólnego, podobnie jak pozostałego kodu dla platformy .NET, powoduje
utworzenie kodu w języku pośrednim Microsoftu (ang. Microsoft Intermediate Language
— MSIL) oraz metadanych. Oczywiście w przypadku typów i metod ogólnych kompi-
lator generuje kod MSIL definiujący sposób ich stosowania.

Kiedy kod MSIL jest wykonywany po raz pierwszy, kompilator JIT (ang. just-in-time)
kompiluje go do kodu natywnego. Kiedy taki kompilator natrafi na typ ogólny, „wie”, że
w jego miejsce należy wstawić typ rzeczywisty i robi to. Ten proces nazywany jest two-
rzeniem egzemplarza typu ogólnego.

W następnych wywołaniach używany jest świeżo skompilowany typ kodu natywnego.
W rzeczywistości wszystkie typy referencyjne mogą współdzielić jeden egzemplarz typu
ogólnego, ponieważ w kodzie natywnym te referencje to po prostu wskaźniki na ten sam
obiekt. Oczywiście jeśli w procesie tworzenia egzemplarza typu ogólnego używany jest no-
wy typ skalarny, środowisko uruchomieniowe „w locie” utworzy nową kopię tego typu
ogólnego.

Dlatego korzystanie z typów ogólnych niesie zalety zarówno na etapie pisania kodu,
jak i w czasie jego wykonywania. W czasie wykonywania cały oryginalny kod jest prze-
kształcany na natywny, silnie typowany kod. Przyjrzyjmy się teraz, jak tworzyć typy ogólne.

background image

82

Część I

Wprowadzenie do Visual Studio 2005 i .NET

Tworzenie typów ogólnych

Typy ogólne to klasy zawierające przynajmniej jeden element, którego typ należy określić
w czasie tworzenia obiektu (a nie na etapie tworzenia klasy). Aby zdefiniować typ
ogólny, należy najpierw zadeklarować klasę, a następnie zdefiniować dla niej parametry
typu. Parametr typu jest przekazywany do klasy w celu zdefiniowania rzeczywistego
typu dla typu ogólnego. Parametry typu działają podobnie do parametrów metod. Istotna
różnica polega na tym, że zamiast wartości lub referencji do obiektu przekazywany jest
typ używany w typie ogólnym.

Większość typów ogólnych służy do zarządzania kolekcjami obiektów lub listami
wiązanymi. Nie jest to jednak jedyne zastosowanie tych typów. Dowolna klasa
może być typem ogólnym.

Załóżmy, że programista chce napisać klasę

Fields

, która obsługuje pary nazwa-wartość,

podobnie jak robią to kolekcje

Hashtable

czy

Dictionary

. Można zadeklarować tę klasę

w następujący sposób:

C#:

public class Fields

VB:

Public Class Fields

Załóżmy ponadto, że ta klasa może używać różnych typów jako kluczy i wartości. Klasa
ma w ogólny sposób obsługiwać wiele typów, jednak po utworzeniu jej egzemplarza
należy je ograniczyć do tych, które zostały określone w procesie tworzenia tego egzem-
plarza. Aby dodać parametry typu do deklaracji klasy, należy użyć następującej składni:

C#:

public class Fields<keyType, valueType>

VB:

Public Class Fields(Of keyType, valueType)

W tym przypadku

keyType

i

valueType

to parametry typu, których można używać w resz-

cie kodu klasy zamiast typów, które zostaną określone w czasie tworzenia jej egzemplarza.
Można na przykład dodać do klasy metodę

Add

, której sygnatura wygląda tak:

C#:

public void Add(keyType key, valueType value)

VB:

Public Sub Add(key as keyType, value as valueType)

Stanowi to informację dla kompilatora o tym, że typu użytego do utworzenia klasy należy
także używać w tej metodzie. Aby korzystać z klasy, w kodzie trzeba najpierw utworzyć
jej egzemplarz i przekazać do niego argumenty typu. Argumenty typu to typy przekazy-
wane jako parametry typu, takie jak w poniższym kodzie:

background image

Rozdział 3.

Rozszerzenia platformy i języków .NET w wersji 2005

83

C#:

Fields<int, Field> myFields = new Fields<int, Field>();

VB:

Dim myFields As New Fields(Of Integer, Field)

W tym przypadku nowy egzemplarz ogólnej klasy

Field

musi zawiera liczbę typu

int

(

Integer

) jako klucz i obiekt typu

Field

jako wartość. Wywołanie metody

Add

świeżo

utworzonego obiektu

Field

wygląda teraz tak:

C#:

myFields.Add(1, new Field());

VB:

myFields.Add(1, New Field())

Próba przekazania parametru innego typu wywoła błąd kompilacji, ponieważ wymagany
jest obiekt określonego typu.

Kiedy stosuje się typy ogólne, często do definiowania nazw typów używa się
pojedynczych liter (szczególnie widoczne jest to w języku C#). Nierzadko można
zobaczyć zapis typu

<T> lub <K>. Nie trzeba ograniczać się do stosowania takich

krótkich nazw. Zawsze lepiej jest używać nieco bardziej opisowego zapisu.

Tworzenie metod ogólnych

Przedstawiliśmy już parametry typów ogólnych. Te parametry typu definiują zmienne
o zasięgu klasy. Oznacza to, że zmienna definiująca typ ogólny jest dostępna w całej kla-
sie. Podobnie jak w przypadku każdej innej klasy, nie trzeba używać zmiennych o zasięgu
całej klasy. Czasem wystarczy zdefiniować elementy przekazywane do danej metody.
Elementy ogólne działają zawsze tak samo. Można zdefiniować je na poziomie klasy (co
już pokazaliśmy) lub na poziomie metody (co pokażemy wkrótce).

Metody ogólne dobrze nadają się do obsługi często używanych funkcji narzędziowych,
które wykonują operacje na różnych typach. Metody ogólne definiuje się poprzez określenie
przynajmniej jednego typu ogólnego po nazwie metody. Następnie można używać tych ty-
pów ogólnych na liście parametrów metody jako zwracanego typu oraz oczywiście w ciele
metody. Poniżej przedstawiona jest składnia służąca do definiowania metod ogólnych:

C#:

public void Save<instanceType>(instanceType type)

VB:

Public Sub Save(Of instanceType)(ByVal type As instanceType)

Aby wywołać tę ogólną metodę, trzeba zdefiniować w jej wywołaniu typ przekazywany
do metody. Załóżmy, że metoda

Save

zdefiniowana w poprzednim fragmencie kodu

background image

84

Część I

Wprowadzenie do Visual Studio 2005 i .NET

znajduje się w klasie

Field

, a programista utworzył egzemplarz tej klasy i zapisał referen-

cję do niego w zmiennej

myField

. Poniższy kod przedstawia, jak można wywołać metodę

Save

, przekazując typ argumentu:

C#:

myField.Save<CustomerOrder>(new CustomerOrder());

VB:

myField.Save(Of CustomerOrder)(New CustomerOrder())

Warto pamiętać o kilku sprawach związanych z metodami ogólnymi. Po pierwsze, często
można pominąć parametr typu w miejscu wywołania metody ogólnej. Kompilator po-
trafi wykryć ten typ na podstawie przekazanych parametrów, dlatego parametr typu jest
opcjonalny. Jednak zwykle warto go określić, ponieważ dzięki temu kod jest bardziej
czytelny, a kompilator nie musi sprawdzać typu. Po drugie, metody ogólne można dekla-
rować jako statyczne (lub współdzielone). Po trzecie, można zdefiniować ograniczenia
dla metod (i klas) ogólnych, co opisano w następnym podpunkcie.

Specyficzne typy ogólne (ograniczenia)

Przy pierwszym napotkaniu metod ogólnych łatwo myśleć o nich jako o prostych narzę-
dziach ułatwiających przechowywanie danych. Na pierwszy rzut oka wydaje się, że cała
ta technika ma poważną wadę. Najlepiej można ją przedstawić za pomocą pytań, które
przychodzą do głowy: „Typy ogólne są świetne, ale co zrobić, jeśli chcemy wywołać
metodę lub właściwość ogólnego obiektu, którego typ jest z definicji nieznany?”. Ta
wada wydaje się ograniczać przydatność typów ogólnych. Jednak po dalszym zastanowieniu
się można zauważyć, że ograniczenia typów ogólnych pozwalają rozwiązać ten problem.

Ograniczenia typów ogólnych działają tak, jak wskazuje na to ich nazwa — pozwalają
zdefiniować ograniczenia dotyczące typów, których nadawca może używać do tworzenia
egzemplarza klasy ogólnej lub wywoływania jednej z metod ogólnych. Ograniczenia
typów ogólnych mają trzy odmiany:

Ograniczenia dotyczące dziedziczenia — pozwalają określić, że typ ogólny
musi implementować określone interfejsy lub dziedziczyć po danej klasie bazowej.

Ograniczenia dotyczące konstruktora domyślnego — pozwalają określić,
że typ ogólny musi udostępniać konstruktor bezargumentowy.

Ograniczenia dotyczące typu (referencyjne lub skalarne) — pozwalają
określić, że parametr typu musi być albo typem referencyjnym, albo skalarnym.

Używanie ograniczenia dotyczącego dziedziczenia umożliwia określenie jednego lub
kilku interfejsów (lub typów obiektu), które można przekazywać do klasy ogólnej. To po-
zwala rozwiązać opisany wcześniej problem. Jeśli zdefiniowana wcześniej ogólna klasa

Fields

ma umożliwiać wywoływanie metody lub właściwości ogólnego typu

valueType

(na przykład właściwości ułatwiającej sortowanie grup obiektów typu

Fields

), można

to wymusić, o ile dana metoda lub właściwość jest zdefiniowana w interfejsie lub klasie
bazowej określonej w ograniczeniu. Poniższy kod pokazuje, jak zdefiniować ograniczenie
dotyczące dziedziczenia:

background image

Rozdział 3.

Rozszerzenia platformy i języków .NET w wersji 2005

85

Ograniczenie klasy w C#:

public class Field<keyType, valueType> where keyType : ISort

Ograniczenie klasy w VB:

Public Class Fields(Of keyType, valueType As ISort)

W powyższym kodzie klasa

Fields

zawiera definicje dwóch typów ogólnych,

valueType

i

keyType

, oraz ma ograniczenie związane z parametrem

keyType

. To ograniczenie polega

na tym, że

keyType

musi implementować interfejs

ISort

. Umożliwia to używanie metod

tego interfejsu w klasie

Fields

bez konieczności rzutowania.

Ograniczenia dotyczące dziedziczenia można definiować dla klas i metod ogólnych.

Można określić dowolną liczbę interfejsów, które typ ogólny ma implementować, ale
tylko jedną klasę bazową, po której ma dziedziczyć. Oczywiście można przekazać jako
typ ogólny obiekt, który dziedziczy po klasie bazowej określonej jako ograniczenie.

Jeśli programista przesłoni ogólną metodę w klasie bazowej, nie może dodać
(ani usunąć) ograniczenia z ogólnej metody. Uwzględniane są jedynie ograniczenia
zdefiniowane w klasie bazowej.

Przestrzeń nazw z kolekcjami ogólnymi

Wiesz już, jak utworzyć własną klasę ogólną. Platforma .NET udostępnia liczne klasy ogól-
ne, których można używać w aplikacjach. Przestrzeń nazw

System.Collections.Generics

definiuje liczne ogólne klasy kolekcji, które są zaprojektowane tak, aby współpracowały
z grupami obiektów określonego typu. Kolekcja ogólna to klasa kolekcji, która umożliwia
programiście określenie typu przechowywanego w kolekcji w miejscu jej deklaracji.

Visual Studio domyślnie dodaje referencję do przestrzeni nazw

System.Collections.

åGenerics do wszystkich plików z kodem języków Visual Basic i C#.

Klasy ogólne zdefiniowane w tej przestrzeni nazw różnią się zastosowaniami. Klasa

List

służy do obsługi prostych list i tablic obiektów. Dostępne są także klasy

SortedList

,

LinkedList

,

Queue

,

Stack

i kilka klas

Dictionary

. Dzięki tym klasom można korzystać

z wszystkich podstawowych operacji bez konieczności używania typizowanych klas
kolekcji. Ponadto w tej przestrzeni nazw zdefiniowanych jest wiele interfejsów, których
można używać do tworzenia własnych kolekcji ogólnych.

Typy dopuszczające wartość null

Większość programistów od czasu do czasu musi utworzyć w aplikacji zmienną i określić
jej domyślną wartość, zanim jeszcze wiadomo, jaką wartość ta zmienna powinna zawierać.
Wyobraź sobie, że programista utworzył klasę

Osoba

ze zmienną logiczną

JestKobieta

.

Jeśli na etapie tworzenia egzemplarza nie wiadomo, jaka jest płeć osoby, trzeba wybrać
domyślną wartość lub zaimplementować tę właściwość jako trójstanowe wyliczenie o war-
tościach

Mezczyzna

,

Kobieta

i

Nieznana

.

background image

86

Część I

Wprowadzenie do Visual Studio 2005 i .NET

To ostatnie rozwiązanie może być niewygodne, szczególnie jeśli w bazie danych wartość
jest przechowywana jako zmienna logiczna. Można wymyślić podobne sytuacje. Wyobraź
sobie, że w programie znajduje się klasa

Test

zawierająca zmienną całkowitoliczbową

Ocena

. Jeśli nie wiadomo, jaka jest wartość tej zmiennej, jest ona inicjowana liczbą zero (0).

Ta wartość oczywiście nie reprezentuje rzeczywistej oceny. Następnie trzeba uwzględnić
ten fakt albo traktując zero jako magiczną liczbę, albo używając następnej zmiennej, na
przykład

OcenaJestUstawiona

.

Ten problem jest tym większy, że wszystkie współczesne bazy danych uwzględniają warto-
ści

null

(lub nieustawione). Często nie można użyć tej właściwości bez napisania dodat-

kowego kodu, który przekształca wartości w czasie transakcji wstawiania i pobierania
danych.

Typy dopuszczające wartość

null

w .NET 2.0 mają rozwiązać ten problem. Typ dopusz-

czający wartość

null

to specjalny typ skalarny, który może mieć wartość

null

. Inaczej

działają standardowe typy skalarne (

int

,

bool

,

double

i tak dalej), które po prostu nie są

inicjowane w momencie deklarowania. Z kolei dzięki typom dopuszczającym wartość

null

można tworzyć liczby całkowite, wartości logiczne, liczby zmiennoprzecinkowe

o podwójnej precyzji i inne, a następnie przypisać do nich wartość

null

. Nie trzeba już

zgadywać, czy zmienna została ustawiona (lub używać do tego specjalnego kodu). Zwal-
nia to też programistę z konieczności określania wartości domyślnej. W zamian można
zainicjować zmienną wartością

null

lub przypisać ją do zmiennej. Dzięki temu można

pisać kod bez domyślnych założeń. Ponadto typy dopuszczające wartość

null

rozwiązują

problem pobierania wartości

null

z bazy danych i umieszczania ich w niej. Przyjrzymy

się teraz, jak działają te typy.

Deklarowanie typów dopuszczających wartość null

Deklarowanie typów dopuszczających wartość

null

znacznie różni się między językami

C# i Visual Basic. Jednak w obu przypadkach deklarowana jest ta sama struktura typu
dopuszczającego wartość

null

platformy .NET (

System.Nullable

). Ta ogólna struktura

jest zdefiniowana przez typ używany w jej deklaracji. Na przykład jeśli programista defi-
niuje liczbę całkowitą dopuszczającą wartość

null

, ta ogólna struktura zwraca wersję liczby

całkowitej. Poniższe fragmenty kodu demonstrują, w jaki sposób typy dopuszczające
wartość

null

są deklarowane w językach C# i VB:

Typ dopuszczający wartość

null

w C#:

bool? hasChildren = null;

Typ dopuszczający wartość

null

w VB:

Dim hasChildren As Nullable(Of Boolean) = Nothing

Warto zauważyć, że w kodzie języka C# można użyć modyfikatora typu

?

do wskazania,

że typ bazowy należy traktować jako typ dopuszczający wartość

null

. Jest to po prostu

skrót. Pozwala to programistom używać standardowej składni tworzenia typów i dodać
znak zapytania, żeby przekształcić dany typ na dopuszczający wartość

null

. Z drugiej strony

w języku Visual Basic trzeba bardziej bezpośrednio zdefiniować klasę

Nullable

, używając

background image

Rozdział 3.

Rozszerzenia platformy i języków .NET w wersji 2005

87

składni podobnej do typów ogólnych. Można także użyć podobnej składni w języku C#,
tak jak w poniższym przykładzie:

System.Nullable<bool> hasChildren = null;

Jedynie typy skalarne mogą dopuszczać wartość

null. Dlatego nie jest poprawne

tworzenie dopuszczających wartość

null łańcuchów znaków czy egzemplarzy klas

zdefiniowanych przez użytkownika. Można jednak tworzyć dopuszczające wartość
null egzemplarze struktur, ponieważ są one typami skalarnymi.

Używanie typów dopuszczających wartość null

Ogólna struktura

System.Nullable

zawiera dwie właściwości służące tylko do odczytu:

HasValue

i

Value

. Te właściwości umożliwiają wydajne korzystanie z typów dopuszczają-

cych wartość

null

. Właściwość

HasValue

to wartość logiczna, która określa, czy dany typ

dopuszczający wartość

null

ma nadaną wartość. Można użyć tej właściwości w instrukcji

If

, aby określić, czy do danej zmiennej została już przypisana wartość. Ponadto można

po prostu sprawdzić, czy zmienna ma wartość

null

(jedynie w C#). Poniżej przedstawiony

jest przykładowy kod:

HasValue

w C#:

if (hasChildren.HasValue) {...}

HasValue

w VB:

If hasChildren.HasValue Then

Sprawdzanie zmiennej w C# ze względu na wartość

null

:

if (hasChildren != null) {...}

Sprawdzanie zmiennej w VB ze względu na wartość

null

:

If hasChildren.Value <> Nothing Then

Właściwość

Value

zwraca wartość zawartą w strukturze dopuszczającej wartość

null

.

Wciąż można uzyskać dostęp do wartości tej zmiennej, wywołując ją bezpośrednio (bez
używania właściwości

Value

). Różnica polega na tym, że kiedy właściwość

HasValue

ma wartość

false

, próba wywołania właściwości

Value

spowoduje zgłoszenie wyjątku.

Z kolei bezpośrednia próba dostępu do zmiennej w warunku (

HasValue = false

) nie po-

woduje tego. Dlatego ważne jest ustalenie, jak powinien działać program, a następnie na-
leży używać tych opcji w odpowiedni sposób. Poniżej znajduje się przykład zastosowania
właściwości

Value

:

Właściwość

Value

w C#:

System.Nullable<bool> hasChildren = null;

Console.WriteLine(hasChildren); //

Nie jest zgłaszany wyjątek

if (hasChildren != null) {

Console.WriteLine(hasChildren.Value.ToString());

}

Console.WriteLine(hasChildren.Value); //

Zgłasza wyjątek InvalidOperationException

background image

88

Część I

Wprowadzenie do Visual Studio 2005 i .NET

Właściwość

Value

w VB:

Dim hasChildren As Nullable(Of Boolean) = Nothing

Console.WriteLine(hasChildren) '

Nie jest zgłaszany wyjątek

If hasChildren.HasValue Then

Console.WriteLine(hasChildren.Value.ToString())

End If

Console.WriteLine(hasChildren.Value) '

Zgłasza wyjątek InvalidOperationException

W powyższych fragmentach kodu bezpośrednie wywołania zmiennej

hasChildren

nie po-

wodują zgłoszenia wyjątku. Jednak próba sprawdzania wartości właściwości

Value

w sytuacji, kiedy zmienna ma wartość

null

, spowoduje zgłoszenie przez platformę .NET

wyjątku

InvalidOperationException

.

Typy (klasy) częściowe

Typy częściowe to mechanizm służący do definiowania pojedynczych klas, struktur lub in-
terfejsów w kilku plikach. W rzeczywistości w czasie kompilacji kodu nie ma czegoś takiego
jak typ częściowy. Takie typy istnieją jedynie w czasie tworzenia aplikacji. Na etapie kom-
pilacji zawartość plików definiujących typ częściowy jest łączona w pojedynczą klasę.

Typy częściowe mają rozwiązywać dwa problemy. Po pierwsze, umożliwiają programistom
rozbijanie dużych klas na kilka plików. Pozwala to różnym członkom zespołu pracować
nad tą samą klasą bez konieczności korzystania z tego samego pliku (dzięki czemu uni-
ka się związanych z tym problemów z łączeniem kodu). Po drugie, pozwalają na od-
dzielenie kodu wygenerowanego przez narzędzia od kodu autorstwa programisty. Dzięki
temu plik z kodem programisty będzie przejrzysty (ponieważ jedynie on go pielęgnuje),
a na zapleczu narzędzie może generować inne elementy klasy. Programiści używający
Visual Studio 2005 natychmiast zauważą to, kiedy będą korzystać z formularzy Windows,
nakładek na usługi sieciowe, stron z kodem ukrytym ASP i podobnych narzędzi. Jeśli
korzystałeś z tych elementów w poprzednich wersjach .NET, szybko spostrzeżesz, że
w wersji 2005 w plikach nie ma wygenerowanego kodu, a klasa pisana przez programistę
jest oznaczona jako

partial

.

Używanie typów częściowych

Typy częściowe zarówno w C#, jak i w Visual Basic deklaruje się za pomocą słowa klu-
czowego

Partial

. Można stosować to słowo kluczowe do klas, struktur i interfejsów. Musi

ono być pierwszym słowem w deklaracji (przed

Class

,

Structure

czy

Interface

). Wska-

zanie, że typ jest częściowy, informuje kompilator o tym, że należy połączyć części tej
klasy w pojedynczym pliku .dll lub .exe.

Przy definiowaniu typów częściowych trzeba stosować się do kilku prostych wskazówek.
Po pierwsze, w deklaracji wszystkich typów o tej samej nazwie w tej samej przestrzeni
nazw musi znajdować się słowo kluczowe

Partial

. Nie można na przykład zadeklarować

klasy

Partial Public Person

w jednym pliku, a klasy

Public Person

w innym pliku tej

samej przestrzeni nazw — trzeba dodać słowo kluczowe

Partial

także do drugiej dekla-

racji. Po drugie, trzeba pamiętać, że wszystkie modyfikatory typu częściowego są łączone
w czasie kompilacji. Obejmuje to atrybuty klasy, komentarze XML i implementacje in-
terfejsu. Na przykład jeśli programista użył atrybutu

System.SerializableAttribute

dla

background image

Rozdział 3.

Rozszerzenia platformy i języków .NET w wersji 2005

89

typu częściowego, ten atrybut zostanie zastosowany do tego typu w czasie jego łączenia
i kompilacji. Po trzecie, warto pamiętać, że wszystkie typy częściowe muszą zostać skom-
pilowane do tego samego podzespołu (inaczej pakietu, czyli pliku .dll lub .exe; ang. as-
sembly). Nie można skompilować typu częściowego obecnego w kilku podzespołach.

Właściwości z mieszanym poziomem dostępu

W poprzednich wersjach .NET można było określić poziom dostępu (publiczny, prywatny,
chroniony, wewnętrzny) jedynie dla całej właściwości. Jednak często potrzebna jest wła-
ściwość umożliwiająca publiczny odczyt (

get

), ale tylko wewnętrzny zapis (

set

). Jedy-

nym sensownym rozwiązaniem w poprzednich wersjach .NET było pominięcie metody

set

właściwości. Następnie trzeba było utworzyć nową metodę wewnętrzną służącą do

ustawiania wartości tej właściwości. Kod byłby łatwiejszy do napisania i zrozumienia,
gdyby możliwa była bardziej precyzyjna kontrola nad modyfikatorami dostępu w obrębie
właściwości.

.NET 2.0 daje kontrolę nad modyfikatorami dostępu metod

set

i

get

właściwości. Dla-

tego można oznaczyć właściwość jako publiczną, ale oznaczyć metodę

set

jako prywatną

lub chronioną. Poniżej znajduje się przykładowy kod:

Właściwość z mieszanym poziomem dostępu w C#:

private string _userId;

public string UserId {

get { return _userId; }

internal set { userId = value; }

}

Właściwość z mieszanym poziomem dostępu w VB:

Private _userId As String

Public Property UserId() As String

Get

Return _userId

End Get

Friend Set(ByVal value As String)

_userId = value

End Set

End Property

Wieloznaczne przestrzenie nazw

W przypadku dużych projektów mogą wystąpić konflikty przestrzeni nazw między sobą
oraz z platformą .NET (przestrzeń nazw

System

). Wcześniej nie można było rozwiązać

takich wieloznacznych referencji i na etapie kompilacji pojawiał się wyjątek.

.NET 2.0 umożliwia programistom zdefiniowanie własnej przestrzeni nazw

System

bez

blokowania dostępu do wersji platformy .NET. Załóżmy, że programista zdefiniował prze-
strzeń nazw

System

i nagle utracił możliwość dostępu do jej globalnej wersji. W języku C#

background image

90

Część I

Wprowadzenie do Visual Studio 2005 i .NET

należy dodać wtedy słowo kluczowe

global

wraz z kwalifikatorem aliasu przestrzeni

nazw

::

, tak jak w poniższym wierszu:

global::System.Double myDouble;

W Visual Basic składnia jest podobna, ale używane słowo kluczowe to

Global

:

Dim myDouble As Global.System.Double

Ponadto można zdefiniować alias, kiedy używa się przestrzeni nazw lub importuje je.
Tego aliasu można następnie używać do wskazywania typów danej przestrzeni nazw.
Załóżmy, że wystąpił konflikt z przestrzenią nazw

System.IO

. Można wtedy zdefiniować

alias przy jej importowaniu:

C#

using IoAlias = System.IO;

VB

Imports IoAlias = System.IO

Następnie można używać typów za pomocą aliasu. Oczywiście Visual Studio udostępnia
pełną obsługę mechanizmu IntelliSense dla tych elementów. Poniżej znajduje się kod
przedstawiający sposób używania zdefiniowanego wcześniej aliasu. Warto zwrócić uwagę
na nową składnię języka C#, która umożliwia stosowanie operatora w postaci podwójnego
dwukropka:

Nowa składnia języka C#

IoAlias::FileInfo file;

Stara składnia języka C#

IoAlias.FileInfo file;

VB

Dim file as IoAlias.FileInfo

Rozszerzenia języka Visual Basic

Doświadczeni użytkownicy języka Visual Basic ucieszą się na wieść, że w Visual Stu-
dio 2005 została przywrócona właściwość zmień i kontynuuj! Jednak jest to funkcja śro-
dowiska IDE. W rzeczywistości wiele nowych cech IDE jest specyficznych dla języka.
W niniejszej książce chcemy opisać większość z nich (jeśli nie wszystkie). Rozszerzenia
IDE specyficzne dla języka Visual Basic obejmują poniższe właściwości:

Programowanie za pomocą skrótów

My

.

Właściwość zmień i kontynuuj.

Fragmenty kodu.

Rozszerzenia mechanizmu IntelliSense.

Modyfikowanie atrybutów w oknie Properties.

background image

Rozdział 3.

Rozszerzenia platformy i języków .NET w wersji 2005

91

Poprawianie błędów i ostrzeżenia.

Asystent do obsługi wyjątków.

Dokumentacja XML.

Okno Document Outline.

Okno projektowe dla projektów.

Okno projektowe dla ustawień.

Okno projektowe dla zasobów.

Dzięki powyższym rozszerzeniem (a także innym) korzystanie z języka Visual Basic
jest bardzo wygodne. W następnych podpunktach skoncentrujemy się jednak na samym
języku. Wskażemy nowinki specyficzne dla Visual Basic, które są niezwykle atrakcyjne
w wersji 2005.

Instrukcja Continue

Nowa instrukcja

Continue

w języku VB umożliwia programistom przeskoczenie do na-

stępnej iteracji pętli. Instrukcji

Continue

można używać w pętlach

Do

,

For

i

While

. Jeśli

potrzebne jest skrócenie pętli i natychmiastowe przejście do następnej iteracji, wystarczy
użyć instrukcji

Continue For

/

Do

/

While

, tak jak w poniższym kodzie:

Sub ProcessCustomers(ByVal customers() As Customer)

Dim i As Integer

For i = 0 To customers.GetUpperBound(0)

If customers(i).HasTransactions = False Then Continue For

ProcessCustomer(customers(i))

Next

End Sub

Typy bez znaku

Programiści języka Visual Basic mogą teraz używać typów całkowitoliczbowych bez
znaku (

UShort

,

UInteger

i

ULong

). Ponadto najnowsza wersja Visual Basic udostępnia

dodatkowy typ ze znakiem,

SByte

. Te nowe typy umożliwiają programistom łatwiejsze

wywoływanie funkcji interfejsu API systemu Windows, które często zwracają typy bez
znaku. Jednak takie typy bez znaku nie są obsługiwane przez specyfikację wspólnego
języka (ang. Common Language Specification — CLS), dlatego jeśli programista napisze
kod bazujący na tych nowych typach, kod zgodny z CLS może z nim nie współpracować.

Operator IsNot

Nowy operator

IsNot

języka Visual Basic umożliwia programistom sprawdzenie, czy

dwa obiekty różnią się od siebie. Oczywiście można to było zrobić także w poprzednich
wersjach, łącząc instrukcje

Not

i

Is

, na przykład

If Not myCustomer Is Nothing

. Jednak te-

raz programiści mogą korzystać z prostszej składni operatora

IsNot

, takiej jak w poniższym

background image

92

Część I

Wprowadzenie do Visual Studio 2005 i .NET

wierszu kodu. Warto zauważyć, że działanie tego wiersza jest takie samo, jak przestawionej
wcześniej instrukcji

Not...Is

.

If cust IsNot Nothing Then

Blok Using

Programiści języka Visual Basic, którzy używali przez pewien czas języka C#, bez wąt-
pienia ucieszą się z możliwości definiowania zasięgu obiektów za pomocą bloku

Using

.

Dzięki temu blokowi programiści języka C# mogą zagwarantować zwolnienie zasobów
w momencie zakończenia wykonywania danego bloku przez aplikację. Obecnie ta właści-
wość została dodana także do języka Visual Basic. Załóżmy, że programista chce nawiązać
połączenie z bazą danych. Teraz może to zrobić w bloku

Using

. Dzięki temu gdy program

z jakiegoś powodu zakończy wykonywanie tego bloku, obiekt zdefiniowany w instrukcji

Using

(obiekt połączenia SQL) zostanie usunięty w odpowiedni sposób. Poniższy kod ilu-

struje używanie tej nowej właściwości:

Using cnn As New System.Data.SqlClient.SqlConnection(cnnStr)

'

Tu kod używający połączenia z SQL

End Using

Dostęp do formularzy podobny jak w Visual Basic 6

Programiści znający wersję 6. języka Visual Basic (jeszcze sprzed platformy .NET) przy-
pomną sobie możliwość bezpośredniego dostępu do właściwości i metod formularza
poprzez jego nazwę. W poprzednich wersjach .NET programiści musieli utworzyć egzem-
plarz formularza, aby uzyskać dostęp do jego właściwości. W Visual Basic 8 ponownie
możliwy jest dostęp do składowych formularza poprzez jego nazwę.

Jawne zerowe dolne ograniczenie w tablicach

W starszych wersjach języka Visual Basic (sprzed .NET) programiści mogli określić górne
i dolne ograniczenie tablicy, używając słowa kluczowego

To

. Można było na przykład

zdefiniować tablicę rozpoczynającą się od 1, a kończącą na 10. Dzięki temu kod, w którym
używane były tablice, był bardzo czytelny. Jednak pojawienie się platformy .NET i specy-
fikacji CLS spowodowało, że dolne ograniczenie we wszystkich tablicach musiało być
równe zero (0). Oznacza to, że każda tablica platformy .NET musi rozpoczynać się od ele-
mentu zerowego. W Visual Basic 8 nie uległo to zmianie, znów można jednak określić,
że tablica rozpoczyna się od 0, a kończy na górnym ograniczeniu, co sprzyja czytelności
kodu. Dlatego można definiować tablice w poniższy sposób, jednak dolne ograniczenie
musi równać się zero (0):

Dim myIntArray(0 To 9) As Integer

background image

Rozdział 3.

Rozszerzenia platformy i języków .NET w wersji 2005

93

Przeciążanie operatorów

Jeśli często piszesz biblioteki, w końcu natrafisz na klasę, w której będziesz musiał zdefi-
niować działanie operatorów dodawania (

+

), odejmowania (

), mnożenia (

*

), większości (

>

)

i innych. Jeśli na przykład trzeba obliczyć wynik dodawania dwóch wersji klasy za pomocą
operatora

+

, potrzebna jest definicja jego działania dla tej klasy. W poprzednich wersjach

języka Visual Basic nie można było utworzyć takiej definicji, jednak Visual Basic 8 umoż-
liwia to. Jest to tak zwane przeciążanie operatorów.

Do definiowania nowego operatora służy słowo kluczowe

Operator

(używane zamiast

Sub

lub

Function

), po którym następuje symbol przeciążanego operatora (

+

,

&

,

*

,

<>

i tak

dalej). Można następnie dodać ciało tej „funkcji” jak każdej innej. Może ona przyjmować
parametry i zwracać wartość. Jeśli programista chce umożliwić dodawanie do siebie
dwóch obiektów, może zdefiniować operator

+

przyjmujący te obiekty jako parametry

i zwracający trzeci obiekt jako wynik. Ilustruje to poniższy kod:

Public Operator +(ByVal obj1 As MyObject, ByVal obj2 As MyObject) As MyObject

'

Obliczanie wartości nowego obiektu i zwracanie go

End Operator

Niestandardowe zdarzenia

Programiści języka Visual Basic mają teraz kontrolę nad rejestrowaniem delegatów, po-
nieważ mogą używać zdarzeń zdefiniowanych przez użytkownika. Nowa wersja Visual
Basic obejmuje słowo kluczowe

Custom

, którego można używać przy definiowaniu zdarzeń.

Po użyciu tego słowa kluczowego do zadeklarowania zdarzenia trzeba zdefiniować ak-
cesory dla metod

AddHandler

,

RemoveHandler

i

RaiseEvent

. Te akcesory przesłaniają do-

myślne działanie zdarzenia kodem napisanym przez programistę. Jest to przydatne w sy-
tuacjach, kiedy wszystkie zdarzenia mają być uruchamiane asynchronicznie lub potrzebna
jest pełna kontrola nad tymi operacjami.

Rozszerzenia języka C#

W wersji 2005 język C# został rozszerzony o nowe możliwości. Opisaliśmy już kilka
wspólnych nowinek, takich jak typy ogólne i dopuszczające wartość

null

. Ponadto pro-

gramiści języka C# mają dostęp do nowych właściwości środowiska IDE. Niektóre z tych
funkcji to:

Fragmenty kodu.

Refaktoryzacja.

Rozszerzenie mechanizmu IntelliSense.

Kreatory kodu.

Właściwości projektów.

background image

94

Część I

Wprowadzenie do Visual Studio 2005 i .NET

W niniejszej książce opiszemy te właściwości. Jednak w tym miejscu skoncentrujemy się
na specyficznych rozszerzeniach języka C# w wersji 2005.

Więcej informacji dotyczących języka C# i omawianych tu zagadnień znajduje się
w udostępnianym przez Microsoft dokumencie „C# Language Specification 2.0”.
Ten dokument można pobrać ze strony http://msdn.microsoft.com/library/
default.asp?url=/library/en-us/dnvs05/html/cs3spec.asp. Pod tym samym adresem
znajduje się kompletny przegląd języka C# oraz zestaw samouczków. Ponadto gotowa
jest już specyfikacja języka C# 3.0, która jest dostępna do przeglądu i recenzji.

Metody anonimowe

Pojęcie metody anonimowe może przy pierwszym napotkaniu wydawać się nieco skom-
plikowane. Są to jednak po prostu nienazwane bloki kodu (nie metody) przekazywane
bezpośrednio do delegata. Po pierwsze, ta właściwość jest dostępna tylko w języku C#.
Po drugie, jest przydatna tylko wtedy, kiedy nie są potrzebne wszystkie możliwości, jakie
dają delegaty — nie trzeba używać wielu jednostek nasłuchujących ani nie jest potrzebna
możliwość kontroli tego, jakie jednostki nasłuchują (poprzez ich dodawanie i usuwanie).

Metody anonimowe najłatwiej jest zrozumieć, porównując je ze standardowym sposobem
używania delegatów. Aby użyć delegatów w poprzednich wersjach języka C#, trzeba było
napisać metodę wywoływaną przez tego delegata, a następnie powiązać ją z delegatem.

Przyjrzyjmy się na przykład sposobowi łączenia kodu ze zdarzeniem

Click

przycisku

(

System.Windows.Forms.Button

). Po pierwsze, zdarzenie

Click

to

System.EventHandler

(lub delegat). Trzeba upewnić się, że kod metody jest powiązany z delegatem. Załóżmy,
że kod znajduje się w metodzie, która wygląda następująco:

private void button1_Click(object sender, EventArgs e) {

label1.Text = "textBox.Text";

}

Następnie należy powiązać metodę z delegatem. Oczywiście Visual Studio wykonuje na
zapleczu wszystkie potrzebne operacje. Można jednak samodzielnie napisać służący do
tego kod. Ponadto Visual Studio obsługuje jedynie wiązanie delegatów kontrolek interfej-
su użytkownika (zdarzeń) z metodami. Programista odpowiada za wiązanie wszystkich
pozostałych delegatów — zarówno tych niestandardowych, jak i będących częścią platfor-
my. Poniższy kod pokazuje, w jaki sposób Visual Studio wiąże metodę

button1_Click

ze zdarzeniem

Click

klasy

Button

:

this.button1.Click += new System.EventHandler(this.button1_Click);

Jak widać, trzeba napisać metodę z kodem oraz powiązać ją z delegatem. Przyjrzyjmy
się teraz, jakie możliwości dają metody anonimowe. Jak już wspomnieliśmy, można
przekazać kod bezpośrednio do delegata. Dlatego można dodać poniższy wiersz kodu
do konstruktora formularza (po wywołaniu metody

InitializeComponents

):

this.button1.Click += delegate {

label1.Text = "Do widzenia";

};

background image

Rozdział 3.

Rozszerzenia platformy i języków .NET w wersji 2005

95

Jak widać w powyższym kodzie, używanie metod anonimowych wiąże się z używaniem
słowa kluczowego

delegate

. Oczywiście delegaty mogą przyjmować parametry, dlatego

po słowie

delegate

można umieścić opcjonalną listę parametrów (nie ma jej w powyż-

szym kodzie). Na końcu znajduje się lista instrukcji (blok kodu). To ten kod, ograniczony
nawiasami klamrowymi, jest przekazywany do delegata anonimowo (bez nazwy metody).

Metoda anonimowa ma dostęp do zmiennych znajdujących się w zasięgu w miejscu
tworzenia takiej metody. Te zmienne to tak zwane zmienne zewnętrzne metody
anonimowej (dla odróżnienia od zmiennych wewnętrznych, które są definiowane
wewnątrz metody). Jeśli zmienna zewnętrzna jest używana w metodzie anonimowej,
zostaje przez nią przechwycona. Czas życia takiej przechwyconej zmiennej jest zależny
od usunięcia przez mechanizm przywracania pamięci delegata, a nie samej metody.

Ten punkt stanowi jedynie krótkie wprowadzenie do metod anonimowych. Umożliwiają
one pisanie dość złożonego kodu (który może być mało czytelny). Jak łatwo się domyślić,
przekazywanie wierszy kodu jako parametrów wymaga starannego namysłu, jeśli chce
się uniknąć problemów.

Klasy statyczne

Nowa wersja platformy .NET zapewnia obsługę klas statycznych. Klasa statyczna to taka,
w której każda składowa jest zadeklarowana jako składowa statyczna (w przeciwień-
stwie do składowych egzemplarza). Użytkownicy tej klasy nie muszą tworzyć jej egzem-
plarzy. Platforma gwarantuje nawet, że nie można utworzyć egzemplarza klasy statycz-
nej. Platforma .NET udostępnia wiele takich klas, jednak język Visual Basic na razie ich
nie obsługuje. Robi to jednak język C#. Dlatego to tu przedstawiamy przykładowy kod
bazujący na klasach statycznych.

W języku Visual Basic można utworzyć coś podobnego do klas statycznych, tworząc
klasę o prywatnym konstruktorze. Ponadto należy oznaczyć wszystkie składowe tej
klasy jako

Shared. Wadą takiego rozwiązania jest brak obsługi tego mechanizmu

przez kompilator czy brak możliwości używania konstruktora statycznego.

Definiowanie klas statycznych

Klasy statyczne tworzy się poprzez dodanie słowa kluczowego

Static

do deklaracji

klasy, tak jak w poniższym wierszu kodu:

static class ProjectProperties { ...

Jak już wspomnieliśmy, nie można tworzyć egzemplarzy klasy, która została zadeklaro-
wana jako statyczna. Trzeba jednak pamiętać o zadeklarowaniu wszystkich jej składo-
wych jako statycznych (kompilator nie zakłada, że są właśnie takie). Jednak kompilator
może sprawdzić w klasie statycznej, czy przypadkowo nie znalazła się w niej składowa
egzemplarza. Próba umieszczenia zmiennej niestatycznej w klasie statycznej wywoła błąd
kompilacji. Dotyczy to zarówno składowych publicznych, jak i prywatnych. Listing 3.1
przedstawia prostą klasę statyczną i jej składowe.

background image

96

Część I

Wprowadzenie do Visual Studio 2005 i .NET

Listing 3.1. Klasa statyczna

namespace StaticClasses {

static class ProjectProperties {

static string _projectName;

static ProjectProperties() {

_projectName = "JakiśNowyProjekt";

}

public static string Name {

get { return _projectName; }

}

public static DateTime GetDueDate() {

//

Pobiera datę planowanego oddania projektu

DateTime dueDate = DateTime.Now.AddDays(10);

return dueDate;

}

}

}

Klasy statyczne są automatycznie oznaczane jako zamknięte. Oznacza to, że nie
można dziedziczyć po klasach statycznych.

Konstruktory i klasy statyczne

Nie można utworzyć konstruktora dla klasy statycznej. Jednak jeśli potrzebna jest funkcja
podobna do konstruktora (na przykład do ustawiania początkowych wartości), można
napisać tak zwany konstruktor statyczny. Listing 3.1 przedstawia przykładowy konstruktor
statyczny o nazwie

ProjectProperties

. Warto zauważyć, że inicjuje on wartość składowej

statycznej

_projectName

.

Środowisko CLR platformy .NET wczytuje klasy statyczne automatycznie w czasie wczy-
tywania zawierających je przestrzeni nazw. Ponadto w momencie wywołania składowej
statycznej środowisko CLR automatycznie wywołuje konstruktor statyczny. W celu wy-
wołania tego specjalnego konstruktora nie trzeba tworzyć egzemplarza klasy statycznej
(nie jest to nawet możliwe).

Używanie dwóch wersji tego samego podzespołu

Programiści czasem potrzebują właściwości starszej wersji komponentu, a jednocześnie
chcą używać jego najnowszej wersji. Często jest to wynikiem zmian wprowadzanych
w komponentach bez uwzględnienia zgodności wstecz. W takich przypadkach możliwości
są ograniczone do całkowitego przerzucenia się na nowy komponent lub pozostania
przy starszej wersji. Język C# umożliwia trzecie rozwiązanie — używanie obu wersji za
pomocą zewnętrznego aliasu podzespołu.

Podstawowym problemem związanym z korzystaniem z wielu wersji tego samego podze-
społu jest rozwiązywanie konfliktów między nazwami składowych znajdujących się w tej
samej przestrzeni nazw. Załóżmy, że programista używa podzespołu generującego wy-
kresy. Odpowiedzialna jest za to klasa

Chart

działająca w przestrzeni nazw

Charting

.

Kiedy zostanie udostępniona następna wersja podzespołu, programista będzie chciał za-

background image

Rozdział 3.

Rozszerzenia platformy i języków .NET w wersji 2005

97

chować cały istniejący kod, jednak w nowym kodzie będzie chciał używać najnowszej
wersji. W języku C# można to zrobić, wykonując kilka operacji.

Po pierwsze, trzeba zdefiniować alias nowego podzespołu. W tym celu należy użyć okna
Properties dla wybranej referencji. Rysunek 3.1 pokazuje, jak ustawić taki alias. Warto za-
uważyć, że ustawiany jest alias dla drugiej wersji podzespołu (

ChartV2

). Gwarantuje to, że

wywołania do klasy

Charting.Chart

wciąż będą kierowane do pierwszej wersji (

ChartV1

).

Rysunek 3.1.
Definiowanie aliasu

Następnie w pliku z kodem, który ma używać nowej wersji podzespołu, trzeba zdefi-
niować zewnętrzny alias. W tym celu należy przejść do początku pliku (przed instrukcje

Using

) i wpisać instrukcję rozpoczynającą się od słowa kluczowego

extern

. Poniższy

wiersz pokazuje, jaki kod należy umieścić na początku pliku, aby używać drugiej wersji
komponentu

Charting

:

extern alias ChartV2;

Do używania składowych nowej wersji podzespołu służy operator

::

(podobnie jak w przy-

padku innych, podobnych aliasów języka C#), tak jak w poniższym wierszu kodu:

ChartV2::Charting.Chart.GenerateChart();

Podzespoły zaprzyjaźnione

Język C# 2.0 umożliwia połączenie podzespołów ze względu na dostęp do wewnętrznych
mechanizmów. Oznacza to, że można zdefiniować wewnętrzne składowe, ale udostępnić
je zewnętrznym podzespołom. Ta możliwość jest przydatna, jeśli zamierzasz rozbić pod-
zespół na kilka plików fizycznych, ale wciąż chcesz, aby ich elementy były dostępne we
wszystkich podzespołach.

background image

98

Część I

Wprowadzenie do Visual Studio 2005 i .NET

Podzespoły zaprzyjaźnione nie umożliwiają dostępu do składowych prywatnych.

Do oznaczania podzespołów udostępniających swe wewnętrzne składowe zaprzyjaźnionym
podzespołom służy nowy atrybut,

InternalsVisibleToAttribute

. Ten atrybut jest sto-

sowany na poziomie podzespołu. Do tego atrybutu należy przekazać nazwę oraz znacznik
klucza publicznego zewnętrznego podzespołu. Kompilator będzie traktował te podze-
społy jako zaprzyjaźnione. Podzespół zawierający atrybut

InternalsVisibleToAttribute

udostępnia swe wewnętrzne składowe drugiemu podzespołowi (ale już nie na odwrót).
Można uzyskać ten sam efekt, używając opcji kompilatora ustawianych w wierszu poleceń.

Podzespoły zaprzyjaźnione, jak to często bywa, mają pewne wady. Zdefiniowanie podze-
społu jako zaprzyjaźnionego z innym podzespołem powoduje ich ścisłe powiązanie. Takie
podzespoły muszą współwystępować, aby były przydatne. Oznacza to, że nie stanowią
już odrębnych jednostek. Może to spowodować nieład, a takimi podzespołami trudniej jest
zarządzać. Często lepiej jest nie korzystać z tej właściwości dopóty, dopóki nie zajdzie
istotna potrzeba.

Rozszerzenia platformy .NET 2.0

Ponieważ w platformie .NET wprowadzono tak wiele nowinek, nie warto rozpoczynać ich
opisu w tym miejscu. Oczywiście postaramy się przedstawić je w następnych rozdziałach.
Chcemy jednak wyróżnić kilka kluczowych rozszerzeń, które sprawiają, że nowa wersja
platformy .NET to poważny krok naprzód. Poniżej przedstawiamy niektóre z tych nowości:

Obsługa systemów 64-bitowych — teraz można kompilować aplikacje .NET
przeznaczone dla 64-bitowych wersji systemów operacyjnych. Obejmuje
to obsługę systemów natywnych oraz zgodność z emulatorem WOW64
(umożliwia uruchamianie 32-bitowych aplikacji w systemach 64-bitowych).

Obsługa ACL — programiści używający .NET mogą teraz korzystać z listy
kontroli dostępu (ang. Access Control List — ACL) do zarządzania z poziomu
kodu uprawnieniami do zasobów. W przestrzeni nazw

IO

(i innych) znajdują się

nowe klasy, które pomagają użytkownikiem nadawać uprawnienia do plików
i wykonywać inne operacje.

Strumienie uwierzytelnione — nowa klasa

NegotiateStream

umożliwia

bezpieczne (zaszyfrowane przy użyciu SSL) uwierzytelnianie między klientem
a serwerem (jednostką nasłuchującą) w czasie przesyłania informacji w sieci.
Dzięki tej klasie można bezpiecznie przesyłać dane uwierzytelniające klienta
poprzez personifikację lub delegację. Ponadto nowa klasa

SslStream

umożliwia

szyfrowanie danych w czasie ich przesyłania.

Data Protection API (DPAPI) — w .NET 2.0 zmieniła się obsługa interfejsu
DPAPI. Obecnie obejmuje ona możliwość szyfrowania po stronie serwera hasła
i łańcuchów znaków połączenia. Programiści mogli używać tych opcji także
w poprzednich wersji .NET, pobierając specjalną nakładkę. W wersji 2.0
dostęp do tego interfejsu jest wbudowany w platformę.

background image

Rozdział 3.

Rozszerzenia platformy i języków .NET w wersji 2005

99

Wykrywanie zmian w sieci — aplikacja może teraz otrzymywać
powiadomienia o utracie połączenia z siecią. Dzięki klasie

NetworkChange

programiści wiedzą, kiedy komputer, na którym działa aplikacja, utracił
bezprzewodowe połączenie lub zmienił adres IP.

Obsługa protokołu FTP — przestrzeń nazw

System.Net

udostępnia obecnie

klasy służące do obsługi protokołu FTP. Programiści mogą używać klas

WebRequest

,

WebResponse

i

WebClient

do przesyłania oraz pobierania plików

poprzez ten protokół.

Rozszerzenia dotyczące globalizacji — nowa wersja platformy umożliwia
programistom definiowanie własnych niestandardowych ustawień lokalnych.
Daje to niezwykłą elastyczność w zakresie obsługi w aplikacjach informacji
dotyczących kultury. Ponadto platforma .NET 2.0 zapewnia ulepszoną obsługę
Unicode.

Większa kontrola nad pamięcią podręczną — programiści mogą teraz
używać przestrzeni nazw

System.Net.Cache

do programowej kontroli pamięci

podręcznej.

Obsługa szeregowych urządzeń wejścia-wyjścia — w przestrzeni nazw

System.IO

znajduje się nowa klasa

SerialPort

. Ta klasa umożliwia

programistom używanie urządzeń, które łączą się z portami szeregowymi
komputera.

Rozszerzona obsługa protokołu SMTP — przestrzeń nazw

System.Net.Mail

umożliwia programistom przesyłanie listów elektronicznych za pomocą
serwera SMTP.

Transakcje — programiści używający .NET mogą teraz korzystać z nowej
przestrzeni nazw

System.Transactions

, która umożliwia klasom utworzonym

dla platformy .NET łatwe uczestniczenie w transakcjach rozproszonych.
Do obsługi transakcji służy koordynator transakcji rozproszonych Microsoftu
(ang. Microsoft Distributed Transaction Coordinator — MSDTC).

Nowe właściwości w podstawowych technologiach

ADO.NET, ASP.NET i formularze Windows zostały rozbudowane w wersji 2005. Każda
z tych technologii mogłaby być tematem odrębnej książki. Na przykład ADO.NET ob-
sługuje obecnie typy definiowane przez użytkownika (ang. User-Defined Type — UDT)
i asynchroniczne operacje w bazie danych. Zarówno ASP, jak i formularze Windows
udostępniają wiele nowych kontrolek (oraz rozbudowane wersje starych). W obu tych tech-
nologiach możliwe jest wiązanie danych bez konieczności pisania kodu. Radzimy do-
kładnie zapoznać się z tymi zagadnieniami i przyjrzeć się wielu nowym właściwościom
w zakresie tych technologii.

background image

100

Część I

Wprowadzenie do Visual Studio 2005 i .NET

Podsumowanie

W tym rozdziale przedstawiliśmy podstawowe rozszerzenia języka .NET, które są klu-
czowe dla programistów, ponieważ ułatwiają szybsze pisanie lepszego kodu. Nowinki
takie jak typy ogólne pomagają zapewnić bezpieczeństwo typów w kolekcjach, co po-
zwala zmniejszyć liczbę błędów. Typy dopuszczające wartość

null

pozwalają pisać kod

bez konieczności przypisywania wartości niezainicjowanym zmiennym i obsługi „ma-
gicznych liczb”. Te i podobne nowości wprowadzone w językach C# i Visual Basic
przyczyniają się do ewolucji omawianego zestawu narzędzi i zwiększają produktywność
programistów.

Na zakończenie rozdziału pokrótce opisaliśmy niektóre z nowych elementów platformy
.NET. Dostępnych jest mnóstwo nowinek. Platforma staje się tak rozbudowana, że progra-
miści (i książki) często są wyspecjalizowani w danym obszarze. Radzimy przejrzeć listę
rozszerzeń, a następnie kontynuować eksplorację w zakresie interesującej Cię dziedziny.


Wyszukiwarka

Podobne podstrony:
Microsoft Visual C 2005 Ksiega eksperta

więcej podobnych podstron