SlideShare a Scribd company logo
IDZ DO
         PRZYK£ADOWY ROZDZIA£

                           SPIS TREŒCI
                                         C#. Programowanie
                                         Autor: Jesse Liberty
           KATALOG KSI¥¯EK               T³umaczenie: Tomasz Walczak
                                         ISBN: 83-246-0213-5
                      KATALOG ONLINE     Tytu³ orygina³u: Programming C#
                                         Format: B5, stron: 600
       ZAMÓW DRUKOWANY KATALOG


              TWÓJ KOSZYK                          Podrêcznik podstawowego jêzyka programowania dla platformy .NET
                                             • Poznaj elementy jêzyka C#
                    DODAJ DO KOSZYKA         • Stwórz w³asn¹ aplikacjê
                                             • Komunikuj siê z bazami danych
                                         Jêzyk C# zosta³ opracowany przez firmê Microsoft jako podstawowe narzêdzie
         CENNIK I INFORMACJE             programistyczne dla platformy .NET. C# ³¹cz¹cy w sobie najlepsze cechy jêzyków C,
                                         C++, Java i Visual Basic doskonale nadaje siê do tworzenia aplikacji bazuj¹cych
                   ZAMÓW INFORMACJE      na komponentach. Jest prosty, bezpieczny ze wzglêdu na typy, oparty na obiektach
                     O NOWOŒCIACH        i komponentach i przygotowany do obs³ugi mechanizmów komunikacji sieciowej.
                                         Za pomoc¹ C# tworzone s¹ nie tylko aplikacje na „du¿e” komputery, ale tak¿e
                       ZAMÓW CENNIK      programy dla platformy PocketPC. Popularnoœæ C# nadal roœnie, a jego producent
                                         stale inwestuje w dalszy rozwój tego narzêdzia i platformy .NET.
                                         „C#. Programowanie” to podrêcznik przedstawiaj¹cy tajniki tworzenia aplikacji dla
                 CZYTELNIA               .NET w jêzyku C#. Przeczytasz w nim o podstawowych elementach i strukturach C#,
                                         zasadach programowania obiektowego oraz obs³udze wyj¹tków i b³êdów. Poznasz
          FRAGMENTY KSI¥¯EK ONLINE
                                         sposoby tworzenia aplikacji z wykorzystaniem podstawowych technologii tworzenia
                                         aplikacji dla platformy .NET — ASP.NET, Windows Forms i ADO.NET. Nauczysz siê
                                         wykorzystywaæ metadane i ³¹czyæ swoje aplikacje z API Windows oraz obiektami COM.
                                             • Typy w jêzyku C#
                                             • Zmienne i sta³e
                                             • Instrukcje, operatory i dyrektywy preprocesora
                                             • Regu³y programowania obiektowego
                                             • Operacje na ³añcuchach znaków
                                             • Stosowanie wyra¿eñ regularnych
                                             • Tworzenie aplikacji dla systemu Windows
                                             • £¹czenie z bazami danych za pomoc¹ ADO.NET
Wydawnictwo Helion                           • Pisanie aplikacji i us³ug sieciowych
ul. Chopina 6                                • Zdalne korzystanie z obiektów
44-100 Gliwice                               • W¹tki i synchronizacja
tel. (32)230-98-63                           • Operacje na plikach
e-mail: helion@helion.pl
                                                              Poznaj nowoczesne techniki programowania
Spis treści

       Przedmowa .................................................................................................................... 9


Część I        Język C#                                                                                                            17

  1. Język C# i platforma .NET .............................................................................................19
       Platforma .NET                                                                                                              19
       .NET Framework                                                                                                              20
       Kompilacja i język MSIL                                                                                                     22
       Język C#                                                                                                                    22

  2. Pierwszy program — „Witaj świecie” ........................................................................ 25
       Klasy, obiekty i typy                                                                                                       25
       Tworzenie programu „Witaj świecie”                                                                                          31
       Usuwanie błędów w Visual Studio .NET                                                                                        36

  3. Podstawy języka C#..................................................................................................... 39
       Typy                                                                                                                        39
       Zmienne i stałe                                                                                                             43
       Wyrażenia                                                                                                                   50
       Odstępy                                                                                                                     51
       Instrukcje                                                                                                                  51
       Operatory                                                                                                                   65
       Dyrektywy preprocesora                                                                                                      73

  4. Klasy i obiekty ...............................................................................................................77
       Definiowanie klas                                                                                                           78
       Tworzenie obiektów                                                                                                          82
       Używanie składowych statycznych                                                                                             88
       Usuwanie obiektów                                                                                                           92
       Przekazywanie parametrów                                                                                                    95
       Przeciążanie metod i konstruktorów                                                                                        101



                                                                                                                                     3
Hermetyzacja danych za pomocą właściwości                                                                                  103
          Pola tylko do odczytu                                                                                                      107

    5. Dziedziczenie i polimorfizm .......................................................................................109
          Specjalizacja i uogólnianie                                                                                                109
          Dziedziczenie                                                                                                              111
          Polimorfizm                                                                                                                112
          Klasy abstrakcyjne                                                                                                         118
          Klasa główna — Object                                                                                                      122
          Pakowanie i rozpakowywanie typów                                                                                           124
          Zagnieżdżanie klas                                                                                                         126

    6. Przeciążanie operatorów ...........................................................................................129
          Używanie słowa kluczowego operator                                                                                         129
          Obsługa innych języków platformy .NET                                                                                      130
          Tworzenie użytecznych operatorów                                                                                           130
          Pary logiczne                                                                                                              130
          Operator równości                                                                                                          131
          Operatory konwersji                                                                                                        131

    7. Struktury......................................................................................................................137
          Definiowanie struktur                                                                                                      137
          Tworzenie struktur                                                                                                         140

    8. Interfejsy .................................................................................................................... 145
          Definiowanie i implementowanie interfejsu                                                                                  146
          Dostęp do metod interfejsu                                                                                                 154
          Przesłanianie implementacji interfejsu                                                                                     160
          Jawna implementacja interfejsu                                                                                             164

    9. Tablice, kolekcje i mechanizm indeksowania ............................................................173
          Tablice                                                                                                                    173
          Instrukcja foreach                                                                                                         178
          Mechanizm indeksowania                                                                                                     191
          Interfejsy kolekcji                                                                                                        199
          Ograniczenia                                                                                                               202
          Klasa List<T>                                                                                                              207
          Kolejki                                                                                                                    217




4     |    Spis treści
Stosy                                                                                                                219
       Słowniki                                                                                                             221

 10. Łańcuchy znaków i wyrażenia regularne ................................................................. 225
       Łańcuchy znaków                                                                                                      225
       Wyrażenia regularne                                                                                                  239

 11. Obsługa wyjątków......................................................................................................251
       Zgłaszanie i przechwytywanie wyjątków                                                                                252
       Wyjątki jako obiekty                                                                                                 261
       Własne wyjątki                                                                                                       263
       Ponowne zgłaszanie wyjątków                                                                                          266

 12. Delegaty i zdarzenia ...................................................................................................271
       Delegaty                                                                                                             272
       Delegaty zbiorowe                                                                                                    281
       Zdarzenia                                                                                                            285
       Używanie anonimowych metod                                                                                           296
       Pobieranie wartości delegatów zbiorowych                                                                             297


Część II Programowanie w języku C#                                                                                          305

 13. Tworzenie aplikacji dla systemu Windows............................................................... 307
       Tworzenie prostego formularza                                                                                        308
       Tworzenie aplikacji dla systemu Windows                                                                              313
       Komentarze w stylu języka XML                                                                                        334

 14. Obsługa danych za pomocą ADO.NET....................................................................... 337
       Relacyjne bazy danych i SQL                                                                                          337
       Model obiektowy ADO.NET                                                                                              341
       Używanie ADO.NET                                                                                                     343
       Używanie zarządzanych dostawców danych OLE DB                                                                        345
       Używanie kontrolek DataBound                                                                                         347

 15. Tworzenie aplikacji ASP.NET i Web Services ............................................................ 355
       Czym jest Web Forms?                                                                                                 356
       Tworzenie formularza Web Form                                                                                        360
       Dodawanie kontrolek                                                                                                  363




                                                                                                          Spis treści   |     5
Wiązanie danych                                                                                                 366
            Usługi Web Service                                                                                              375
            SOAP, WSDL i Discovery                                                                                          375
            Tworzenie usługi Web                                                                                            376
            Tworzenie pośrednika                                                                                            380

    16. Łączenie różnych technik........................................................................................... 387
            Ogólny projekt                                                                                                  387
            Tworzenie klienta usługi Web                                                                                    387
            Wyświetlanie informacji                                                                                         396
            Przeszukiwanie na podstawie kategorii                                                                           404


Część III CLR i platforma .NET                                                                                            409

    17. Podzespoły i kontrola wersji ...................................................................................... 411
            Pliki wykonywalne                                                                                               411
            Metadane                                                                                                        411
            Granice zabezpieczeń                                                                                            412
            Manifesty                                                                                                       412
            Podzespoły wielomodułowe                                                                                        413
            Podzespoły prywatne                                                                                             421
            Podzespoły współdzielone                                                                                        421

    18. Atrybuty i mechanizm refleksji ................................................................................. 427
            Atrybuty                                                                                                        427
            Mechanizm refleksji                                                                                             433

    19. Szeregowanie i zdalne korzystanie z obiektów.......................................................443
            Domeny aplikacji                                                                                                444
            Kontekst                                                                                                        453
            Zdalne korzystanie z obiektów                                                                                   455

    20. Wątki i synchronizacja............................................................................................... 465
            Wątki                                                                                                           466
            Synchronizacja                                                                                                  473
            Sytuacja wyścigu i zakleszczenie                                                                                483




6       |    Spis treści
21. Strumienie ..................................................................................................................485
       Pliki i katalogi                                                                                                            485
       Odczyt i zapis danych                                                                                                       495
       Asynchroniczne operacje wejścia i wyjścia                                                                                   502
       Sieciowe operacje wejścia i wyjścia                                                                                         506
       Strumienie w internecie                                                                                                     523
       Serializacja                                                                                                                525
       Izolowana pamięć                                                                                                            533

 22. Platforma .NET a model COM .................................................................................... 537
       Importowanie kontrolek ActiveX                                                                                              537
       Importowanie komponentów COM                                                                                                544
       Eksportowanie komponentów .NET                                                                                              552
       P/Invoke                                                                                                                    555
       Wskaźniki                                                                                                                   557


Dodatki                                                                                                                            563

  A Słowa kluczowe języka C# ........................................................................................ 565

       Skorowidz ...................................................................................................................571




                                                                                                                Spis treści    |     7
ROZDZIAŁ 2.

          Pierwszy program — „Witaj świecie”



Zgodnie z niepisaną tradycją wiele książek programistycznych rozpoczyna się od opisu pro-
gramu wyświetlającego napis „Witaj świecie”. W tym rozdziale opisuję, jak stworzyć, skom-
pilować i uruchomić prosty program napisany w języku C#. Analiza tego programu pozwoli
zaprezentować kluczowe cechy języka C#.
Kod na listingu 2.1 zawiera podstawowe elementy bardzo prostego programu w języku C#.

Listing 2.1. Prosty program w języku C#
   class Hello
   {
      static void Main()
      {
         // Używa konsoli systemowej
         System.Console.WriteLine("Witaj świecie");
      }
   }

Po skompilowaniu i uruchomieniu programu w konsoli zostanie wyświetlony napis „Witaj
świecie”. Jednak przed kompilacją i uruchomieniem warto przyjrzeć się bliżej temu prostemu
programowi.


Klasy, obiekty i typy
Istotą programowania obiektowego jest tworzenie nowych typów. Typ to reprezentacja jakie-
goś bytu. Czasem jest to byt abstrakcyjny, jak tabela danych lub wątek, czasem zaś coś bar-
dziej widocznego, jak przycisk w oknie. Typ definiuje ogólne właściwości i zachowanie bytu.
Jeśli w programie znajdują się trzy egzemplarze klasy przycisku, na przykład przyciski OK,
Anuluj i Pomoc, wszystkie one mają rozmiar, ale konkretny rozmiar każdego przycisku może
być inny. Podobnie wszystkie przyciski obsługują te same operacje (wyświetlenie, kliknięcie),
ale sposób wykonywania tych operacji może być odmienny. Dlatego poszczególne przyciski
mogą się różnić szczegółami, ale wszystkie są tego samego typu.
Podobnie jak w wielu innych obiektowych językach programowania, w C# typ definiowany
jest przez klasę, a konkretne egzemplarze klasy są znane jako obiekty. W kolejnych rozdziałach
przedstawiam również inne typy języka C#, między innymi wyliczenia, struktury i delegaty,
ale na razie proponuję skoncentrować się na klasach.


                                                                                            25
W programie wyświetlającym napis „Witaj świecie” znajduje się deklaracja tylko jednego ty-
pu — klasa Hello. Aby zdefiniować typ w języku C#, wystarczy zadeklarować go jako klasę
za pomocą słowa kluczowego class, nadać mu nazwę — w tym przypadku Hello — i zde-
finiować potrzebne właściwości i zachowanie. Właściwości i zachowanie klasy w języku C#
muszą znajdować się wewnątrz nawiasów ({}).

                    Dla programistów języka C++. Po zamykającym nawiasie klasy nie ma średnika.




Metody
Do cech klasy należą właściwości i zachowanie. Zachowanie zdefiniowane jest za pomocą
metod składowych. Właściwości opisuję w rozdziale 3.
Metoda to funkcja należąca do klasy. Metody składowe są nawet czasem nazywane funkcjami
składowymi. Metody definiują, co klasa może zrobić i jak się zachowuje. Zwykle nazwy metod
odzwierciedlają ich działanie, na przykład WriteLine() lub AddNumbers(). Jednak w tym
przypadku metoda klasy ma specjalną nazwę, Main(), która nie opisuje działania, ale infor-
muje środowisko CLR, że jest to główna metoda klasy.

                    Dla programistów języka C++. Nazwa Main() w języku C# jest pisana wielką literą
                    i musi być składową klasy (nie może być globalna). Metoda Main() może zwracać
                    typ int lub void.

Środowisko CLR wywołuje metodę Main() w momencie uruchomienia programu. Main() to
punkt startowy programu i każdy program w języku C# musi zawierać tę metodę1.
Deklaracje metod to kontrakt między twórcą metody i jej użytkownikiem. Często autor me-
tody i jej użytkownik to ta sama osoba, ale nie musi tak być. Zdarza się, że jeden z programi-
stów w zespole tworzy metodę, a inny jej używa.

                    Dla programistów języka Java. Main() jest punktem startowym wszystkich progra-
                    mów języka C#, co w pewien sposób przypomina metodę run() w apletach i meto-
                    dę main() w programach w języku Java.

Aby zadeklarować metodę, należy określić zwracany przez nią typ oraz podać jej nazwę. De-
klaracje metod wymagają także nawiasów, niezależnie od tego, czy metoda przyjmuje para-
metry. Na przykład wyrażenie:
      int myMethod(int size)

to deklaracja metody o nazwie myMethod, która przyjmuje jeden parametr — liczbę całkowitą,
która w metodzie jest dostępna jako size. Metoda zwraca liczbę całkowitą. Typ zwracanej
wartości informuje użytkownika, jaki typ danych zwraca metoda po zakończeniu działania.

1
    Teoretycznie możliwe jest umieszczenie w programie w języku C# wielu metod Main(). W takim przypadku
    należy użyć opcji /main wiersza poleceń i wybrać, która klasa zawierająca metodę Main() powinna służyć
    jako punkt startowy.


26     |   Rozdział 2. Pierwszy program — „Witaj świecie”
Niektóre metody nie zwracają żadnej wartości. Mówi się, że zwracają typ void, określany
przez specjalne słowo kluczowe. Na przykład:
   void myVoidMethod();

to deklaracja metody zwracającej typ void i nieprzyjmującej parametrów. W języku C# zaw-
sze trzeba pamiętać o określaniu zwracanego typu, nawet jeśli jest to void.


Komentarze
W programach C# mogą się znajdować komentarze. Na listingu 2.1 w pierwszym wierszu po
początkowym nawiasie metody Main() znajduje się komentarz:
   // Używa konsoli systemowej

Tekst rozpoczyna się od dwóch ukośników (//). Oznaczają one komentarz. Komentarz to no-
tatka wpisana przez programistę, która nie wpływa na działanie programu. W języku C# moż-
na używać trzech rodzajów komentarzy.
Pierwszy rodzaj, przedstawiony powyżej, oznacza, że cały tekst od symboli (//) do końca
wiersza jest traktowany jako komentarz. Jest to komentarz w stylu języka C++.
Drugi rodzaj komentarzy, nazywany komentarzem w stylu języka C, rozpoczyna się od sym-
boli (/*) i kończy parą znaków (*/). Pozwala to na dodania komentarza ciągnącego się przez
kilka wierszy bez konieczności wpisywania w każdym wierszu symboli (//). Przykład zasto-
sowania tego rodzaju komentarzy znajduje się na listingu 2.2.

Listing 2.2. Przykład zastosowania komentarzy w stylu języka C
   namespace HalloWorld
   {
      class HelloWorld
      {
         static void Main()
         {
            /* Używa konsoli systemowej,
                jak jest to wyjaśnione w tekście */
            System.Console.WriteLine("Witaj świecie");
         }
      }
   }

Choć zagnieżdżanie komentarzy języka C++ nie jest możliwe, można zagnieżdżać komenta-
rze w stylu języka C++ w komentarzach w stylu języka C. Dlatego zwykle używa się komen-
tarzy w stylu języka C++, a komentarze w stylu języka C służą głównie do „wykomentowa-
nia” bloków kodu.
Trzeci i ostatni rodzaj komentarzy obsługiwanych w języku C# służy do powiązania z kodem
zewnętrznej dokumentacji opartej na XML, co opisuję w rozdziale 13.


Aplikacje konsolowe
„Witaj świecie” to przykład programu konsolowego. Aplikacja konsolowa zwykle nie ma gra-
ficznego interfejsu użytkownika (ang. graphical user interface — GUI). Nie ma tam list rozwija-
nych, przycisków ani okien. Dane wejściowe i wyjściowe przekazywane są przez standardo-
wą konsolę — zwykle jest to wiersz poleceń systemu. Ograniczenie się na tym etapie książki


                                                                       Klasy, obiekty i typy   |   27
do aplikacji konsolowych pozwala uprościć przykłady i ułatwia przedstawienie podstawo-
wych właściwości języka. W kolejnych rozdziałach częściej występują aplikacje okienkowe
i internetowe, przy okazji których przedstawiam narzędzia środowiska Visual Studio .NET
służące do projektowania GUI.
Metoda Main() w prostym przykładzie przedstawionym na listingu 2.1 przekazuje tekst „Witaj
świecie” do standardowego urządzenia wyjścia, którym najczęściej jest okno konsoli. Standardo-
wym urządzeniem wyjścia zarządza obiekt zwany Console. Jedna z metod tego obiektu na-
zywa się WriteLine(). Przyjmuje ona jako parametr łańcuch znaków, który następnie wyświe-
tla w standardowym urządzeniu wyjścia. Kiedy program zostanie uruchomiony, na ekranie
monitora pojawi się okno konsoli wiersza poleceń lub okno DOS-a z napisem „Witaj świecie”.
Metody wywoływane są za pomocą operatora kropki (.). Dlatego aby wywołać metodę Wri-
teLine() obiektu Console, należy napisać Console.WriteLine(…), podając w miejscu trzech
kropek tekst, który ma zostać wyświetlony.


Przestrzenie nazw
Console to tylko jeden z wielu użytecznych typów wchodzących w skład biblioteki klas plat-
formy .NET. Każda klasa nazywa się inaczej, dlatego FCL zawiera tysiące nazw, jak Array-
List, Hashtable, FileDialog, DataException czy EventArgs. Istnieją setki, tysiące, a może
nawet dziesiątki tysięcy nazw.
Powoduje to pewne problemy. Żaden programista nie jest w stanie zapamiętać wszystkich
nazw używanych przez platformę .NET, a wcześniej czy później może zdarzyć się, że pro-
gramista stworzy obiekt i użyje dla niego nazwy, która jest już wykorzystywana przez inną
jednostkę. Co się stanie, kiedy programista kupi klasę Hashtable i odkryje, że powoduje ona
konflikt nazw z klasą Hashtable udostępnianą przez .NET? Należy pamiętać, że każda klasa
w języku C# musi mieć niepowtarzalną nazwę, a zwykle nie jest możliwa zmiana nazw w za-
kupionym kodzie.
Rozwiązaniem tego problemu jest używanie przestrzeni nazw. Ograniczają one zasięg nazwy,
w wyniku czego nazwa ma znaczenie tylko wewnątrz zdefiniowanej przestrzeni nazw.

                  Dla programistów języka C++. Przestrzenie nazw w języku C++ są ograniczane opera-
                  torem zakresu (::). W języku C# służy do tego operator kropki (.).
                  Wskazówka dla programistów języka Java. Przestrzenie nazw mają wiele podobnych za-
                  let co pakiety.

Jacek jest inżynierem. Słowo „inżynier” może być związane z wieloma zawodami i wprowa-
dzać niepewność. Czy Jacek projektuje budynki? A może opracowuje architekturę systemu
operacyjnego?
Można dookreślić to stwierdzenie mówiąc, że Jacek skończył Wyższą Szkołę Budownictwa
lub pracuje przy komputerach. Programista języka C# mógłby powiedzieć, że Jacek to raczej
system.inzynier niż budynki.inzynier. Przestrzeń nazw, w tym przypadku system lub
budynki, ogranicza zasięg słowa występującego po operatorze kropki. Pozwala to utworzyć
„przestrzeń”, w której nazwa ma określone znaczenie.
Może się też okazać, że Jacek nie jest dowolnym system.inzynier. Możliwe, że specjalizuje
się w tworzeniu architektury systemów Linux. Wtedy obiekt reprezentujący Jacka można


28   |   Rozdział 2. Pierwszy program — „Witaj świecie”
opisać bardziej szczegółowo jako system.linux.inzynier. Taka klasyfikacja sugeruje, że
przestrzeń nazw linux ma znaczenie w obrębie przestrzeni nazw system, a inzynier w tym
kontekście ma znaczenie w przestrzeni linux. Jeśli w przyszłości okaże się, że Krzysztof jest
budynki.gospodarcze.inzynier, łatwo będzie się zorientować, jakim jest inżynierem i czym
się zajmuje. Dwa wystąpienia nazwy inzynier mogą współistnieć dzięki temu, że każda na-
zwa znajduje się we własnej przestrzeni.
Podobnie, jeśli okaże się, że klasa Hashtable platformy .NET znajduje się w przestrzeni
nazw System.Collections, a programista utworzył własną klasę Hashtable w przestrzeni
ProgCSharp.DataStructures, nie spowoduje to konfliktu, ponieważ nazwa klasy występuje
w dwóch różnych przestrzeniach nazw.
Na listingu 2.1 fakt przynależności klasy Console do przestrzeni nazw System jest wyrażony
za pomocą poniższego wiersza:
   System.Console.WriteLine();


Operator kropki (.)
Na listingu 2.1 operator kropki (.) pozwala uzyskać dostęp do metody i danych klasy (w tym
przypadku jest to metoda WriteLine()), a także do określenia przestrzeni nazw (w tym przy-
padku do zaznaczenia, że klasa Console znajduje się w przestrzeni nazw System). Ten me-
chanizm działa poprawnie, ponieważ w obu przypadkach kompilator przeszukuje podaną
przestrzeń, aby znaleźć konkretną nazwę. Przeszukiwanie rozpoczyna się od przestrzeni nazw
System, która zawiera wszystkie obiekty systemowe udostępniane przez FCL. Typ Console
znajduje się właśnie w przestrzeni nazw System, a metoda WriteLine() jest funkcją składo-
wą klasy Console.
W wielu przypadkach przestrzenie nazw są podzielone na podprzestrzenie. Na przykład
przestrzeń nazw System zawiera wiele podprzestrzeni, jak Data, Configuration czy Collec-
tions. Z kolei sama przestrzeń nazw Collections zawiera wiele kolejnych podprzestrzeni.

Przestrzenie nazw pomagają w organizacji i porównywaniu typów. Kiedy programista pisze
złożoną aplikacją w języku C#, może chcieć stworzyć własną hierarchię przestrzeni nazw.
Hierarchia ta może być dowolnie głęboka. Używanie przestrzeni nazw pomaga w podziale
hierarchii obiektów i przezwyciężeniu jej złożoności.


Słowo kluczowe using
Zamiast pisać słowo System przed nazwą klasy Console, można określić, że w kodzie uży-
wane będą nazwy z przestrzeni nazw System. Służy do tego dyrektywa using:
   using System;

umieszczana na początku kodu, jak na listingu 2.3.

Listing 2.3. Słowo kluczowe using
   using System;
   class Hello
   {
      static void Main()
      {




                                                                      Klasy, obiekty i typy   |   29
// Klasa Console z przestrzeni nazw System
                   Console.WriteLine("Witaj świecie");
             }
     }

Warto zwrócić uwagę, że dyrektywa using znajduje się przed definicją klasy Hello. Domyśl-
nie w środowisku Visual Studio .NET do każdej aplikacji konsolowej dodawane są trzy dy-
rektywy using — System, System.Collections.Generics oraz System.Text.
Choć można określić, że w programie używane są obiekty z przestrzeni nazw System, w od-
różnieniu od niektórych języków nie można zrobić tego samego w przypadku obiektu Sys-
tem.Console. Kod przedstawiony na listingu 2.4 nie skompiluje się.

Listing 2.4. Niepoprawny kod w języku C#
     using System.Console;
     class Hello
     {
        static void Main()
        {
           // Konsola z przestrzeni nazw System
           WriteLine("Witaj świecie");
        }
     }

Próba kompilacji takiego kodu spowoduje wygenerowanie błędu:
     error CS0138: A using namespace directive can only be applied
     to namespaces; System.Console is a type not a namespace


                          Użytkownicy Visual Studio będą wiedzieć, kiedy popełnili błąd, ponieważ po wpi-
                          saniu using System i kropki środowisko wyświetla listę poprawnych przestrzeni
                          nazw, a Console nie jest jedną z nich.

Słowo kluczowe using pozwala oszczędzić wpisywania dużych ilości kodu, jednak zmniejsza
korzyści używania przestrzeni nazw, zaśmiecając zasięg wieloma nieodróżnialnymi nazwa-
mi. Często stosowanym rozwiązaniem jest używanie słowa kluczowego using, kiedy korzy-
sta się z wbudowanych i własnych przestrzeni nazw, a unikanie tego w przypadku kompo-
nentów dostarczanych przez innych producentów.

                          Niektóre grupy programistyczne stosują politykę wpisywania długich nazw obiek-
                          tów, wraz z przestrzeniami nazw (na przykład System.Console.WriteLine()
                          zamiast Console.WriteLine()). Ma to służyć jako forma dokumentowania kodu.
                          Jednak w przypadku wielokrotnie zagnieżdżonych przestrzeni nazw takie rozwiąza-
                          nie może szybko stać się niewygodne.


Wrażliwość na wielkość znaków
W języku C# wielkość znaków ma znaczenie. Oznacza to, że writeLine to coś innego niż
WriteLine, a jeszcze czymś innym jest WRITELINE. Niestety, w przeciwieństwie do VB, w śro-
dowisku języka C# błędna wielkość liter nie jest automatycznie poprawiana. Błąd spowodo-
wany przez napisanie tego samego słowa za pomocą liter o odmiennej wielkości może być
trudny do wykrycia.



30       |       Rozdział 2. Pierwszy program — „Witaj świecie”
Użyteczną sztuczką jest umieszczenie kursora nad nazwą, w której jedynym błędem
               jest niepoprawna wielkość znaków, a następnie użycie kombinacji klawiszy Ctrl+Space.
               Mechanizm uzupełniania kodu Intellisense zmieni wtedy nazwę na poprawną.


Aby zapobiec takim czasochłonnym i męczącym błędom, warto ustalić konwencję nazywania
zmiennych, funkcji, stałych i innych elementów kodu. W tej książce do nazw zmiennych sto-
suję notację wielbłądzią (na przykład jakasNazwaZmiennej), a do nazw funkcji, stałych i wła-
ściwości używam notacji z języka Pascal (na przykład JakasFunkcja).

               Jedyna różnica między notacją wielbłądzią a notacją z języka Pascal polega na roz-
               poczynaniu nazw wielką literą w tym drugim przypadku.
               Microsoft udostępnia wskazówki dotyczące stylu kodowania, które są bardzo dobrym
               punktem wyjścia, a często w zupełności wystarczają do tworzenia czytelnego kodu.
               Można je znaleźć na stronie http://msdn.microsoft.com/library/default.asp?url=/library/
               en-us/cpgenref/html/cpconNETFrameworkDesingGuidlines.asp.


Słowo kluczowe static
Przed metodą Main() przedstawioną na listingu 2.1 znajduje się modyfikator. Zaraz przed
zwracanym typem void (co oznacza, że metoda nie zwraca żadnej wartości) znajduje się sło-
wo kluczowe static:
   static void Main()

Słowo kluczowe static informuje kompilator, że można wywołać metodę Main() bez ko-
nieczności tworzenia obiektu typu Hello. To dość złożone zagadnienie opisuję bardziej szcze-
gółowo w kolejnych rozdziałach. Jednym z problemów uczenia się nowego języka progra-
mowania jest konieczność poznawania niektórych skomplikowanych mechanizmów, zanim
możliwe jest ich pełne zrozumienie. Na razie można więc traktować deklarację metody Main()
jako czystą magię.


Tworzenie programu „Witaj świecie”
Istnieją przynajmniej dwa sposoby pisania, kompilowania i uruchamiania programów przed-
stawionych w tej książce. Można użyć zintegrowanego środowiska programowania (ang. In-
tegrated Development Environment — IDE) Visual Studio .NET lub edytora tekstu i kompilato-
ra uruchamianego z wiersza poleceń (wraz z pewnymi dodatkowymi narzędziami opisanymi
w kolejnych rozdziałach).
Choć możliwe jest tworzenie programów bez korzystania z Visual Studio .NET, używanie do-
brego IDE związane jest z wieloma udogodnieniami. Są to między innymi automatyczne wci-
nanie kodu, mechanizm uzupełniania słów Intellisense, kolorowanie składni czy integracja
z systemem pomocy. Co najważniejsze, IDE zawiera wydajne mechanizmy do usuwania błę-
dów i mnóstwo innych narzędzi.
Zakładam po cichu, że Czytelnicy tej książki używają Visual Studio .NET. Jednak opis przy-
kładowych programów kładzie większy nacisk na sam język i platformę niż na używane na-
rzędzia. Można przepisać wszystkie przykłady korzystając z Notatnika lub Emacs, zapisać je


                                                              Tworzenie programu „Witaj świecie”   |     31
z rozszerzeniem .cs i skompilować za pomocą kompilatora uruchamianego z wiersza poleceń,
który udostępniany jest wraz z .NET Framework SDK. Można także użyć jednego ze zgod-
nych z .NET narzędzi, jak Mono lub Microsoft Shared Source CLI. Warto zauważyć, że nie-
które przykłady w późniejszych rozdziałach wymagają użycia narzędzi Visual Studio .NET
do tworzenia formularzy Windows i Web, jednak zdeterminowani programiści mogą nawet
te przykłady wpisać samodzielnie, korzystając z Notatnika.


Pisanie kodu „Witaj świecie”
Aby utworzyć program „Witaj świecie” w środowisku IDE, należy wybrać Visual Studio
.NET z menu Start lub kliknąć ikonę na pulpicie, a następnie wybrać z menu paska narzędzi
File→New→Project. Spowoduje to otwarcie okna New Project. Przy pierwszym użyciu Visual
Studio okno New Project może pojawić się bez dalszych zapytań. Okno New Project przedsta-
wione jest na rysunku 2.1.




Rysunek 2.1. Tworzenie aplikacji konsolowej w środowisku Visual Studio .NET

Aby utworzyć aplikację, należy zaznaczyć Visual C# w oknie Project Types, a następnie wy-
brać opcję Console Application w oknie Templates. W środowisku Express Edition języka Visual
C# wystarczy wybrać opcję Console Application.
Następnie można podać nazwę projektu i wybrać katalog, w którym przechowywane będą
pliki. Potem wystarczy kliknąć przycisk OK i pojawi się nowe okno, w którym można wpisać
kod z listingu 2.1, co pokazane jest na rysunku 2.2.
Warto zwrócić uwagę, że Visual Studio .NET automatycznie tworzy przestrzeń nazw we-
dług nazwy projektu (w tym przypadku jest to HelloWorld), a także dodaje dyrektywy using



32   |   Rozdział 2. Pierwszy program — „Witaj świecie”
Rysunek 2.2. Edytor przygotowany do pracy z nowym projektem

przestrzeni nazw System, System.Collections.Generic i System.Text, ponieważ potrzebu-
je ich prawie każdy program.
Visual Studio .NET tworzy klasę o nazwie Program, którą programista może nazwać w inny
sposób. Przy zmianie nazwy klasy warto zmienić również nazwę pliku. Przy zmianie nazwy
pliku środowisko Visual Studio automatycznie zmienia nazwę klasy. Aby odtworzyć kod
z listingu 2.1, można na przykład zmienić nazwę pliku Program.cs (znajduje się ona w oknie
Solution Explorer) na hello.cs a nazwę klasy Program na HelloWorld. Jeśli wykona się te czynno-
ści w odwrotnej kolejności, Visual Studio automatycznie zmieni nazwę klasy na Hello.
Visual Studio tworzy szkielet programu. Aby napisać program z listingu 2.1, należy usunąć
argumenty (string[] args) metody Main(), a następnie wpisać w ciele tej metody dwa po-
niższe wiersze kodu:
   // Używa konsoli systemowej
   System.Console.WriteLine("Witaj świecie");

Można też napisać kod, nie używając środowiska Visual Studio. W tym celu należy otworzyć
Notatnik lub inny edytor tekstu, wpisać kod z listingu 2.1, zapisać plik jako tekstowy i nadać
mu nazwę hello.cs.




                                                              Tworzenie programu „Witaj świecie”   |   33
Kompilacja i uruchamianie „Witaj świecie”
W Visual Studio istnieje wiele sposobów na skompilowanie i uruchomienie programu „Witaj
świecie”. Zwykle robi się to za pomocą poleceń z menu na pasku narzędzi, przycisków lub,
w wielu przypadkach, używając klawiszy skrótu.

                  Klawisze skrótu można ustawić wybierając opcję Tools→Options→Keyboard. W książ-
                  ce przedstawiam najpopularniejsze domyślne klawisze skrótu.



Na przykład, aby skompilować program „Witaj świecie”, należy przycisnąć kombinację kla-
wiszy Ctrl+Shift+B lub wybrać opcję Build→Build Solution. Jeszcze inne rozwiązanie to kliknię-
cie przycisku Build na pasku narzędzi Build. Jeśli pasek ten nie jest widoczny, należy kliknąć
prawym przyciskiem myszy na pasku narzędzi i uaktywnić go. Pasek narzędzi Build przed-
stawiony jest na rysunku 2.3. Przycisk Build znajduje się po lewej stronie i jest zaznaczony na
rysunku.




Rysunek 2.3. Pasek narzędzi Build
Aby uruchomić program „Witaj świecie” w trybie bez usuwania błędów, należy przycisnąć
kombinację klawiszy Ctrl+F5, wybrać opcję Debug→Start Without Debugging z menu IDE
z paska narzędzi lub kliknąć przycisk Start Without Debugging na pasku narzędzi IDE Build.
Ta ostatnia możliwość przedstawiona jest na rysunku 2.4. Jeśli przycisk ten nie jest widoczny,
należy zmienić ustawienia paska narzędzi. Możliwe jest uruchomienie programu bez wcze-
śniejszej jego budowy. Ustawienia opcji (można je zmienić, wybierając Tools→Options) mogą
spowodować, że IDE zapisze plik, zbuduje program, a następnie uruchomi go, zapewne py-
tając o pozwolenie wykonania każdej kolejnej czynności.




Rysunek 2.4. Przycisk Start Without Debugging

                  Gorąco zalecam zapoznanie się ze środowiskiem Visual Studio 2005. Jest to podsta-
                  wowe narzędzie programisty tworzącego aplikację na platformę .NET i warto dobrze
                  poznać jego działanie. Czas poświęcony na zapoznanie się ze środowiskiem Visual
                  Studio zwróci się wielokrotnie w trakcie kolejnych miesięcy programowania. Propo-
                  nuję odłożyć na chwilę książkę i przyjrzeć się dobrze środowisku.

Aby skompilować i uruchomić program „Witaj świecie” używając kompilatora C# uruchamia-
nego z wiersza poleceń, udostępnianego wraz z .NET Framework SDK, z Mono (http://www.
mono-project.com) lub z Shared Source CLI (http://msdn.microsoft.com/net/sscli/), należy wykonać
następujące czynności:



34   |   Rozdział 2. Pierwszy program — „Witaj świecie”
1. Zapisać kod z listingu 2.1 w pliku hello.cs.
 2. Otworzyć okno poleceń platformy .NET (Start→Programs→Visual Studio .NET→Visual
    Studio Tools→Visual Studio Command Prompt). Użytkownicy systemu Unix powinni uru-
   chomić konsolę, xterm lub inne narzędzie umożliwiające wpisywanie poleceń powłoki.
 3. W wierszu poleceń należy wpisać:
       csc /debug hello.cs

   jeśli używa się kompilatora z .NET lub z Shared Source CLI, albo:
       mcs –debug hello.cs

   jeśli używa się kompilatora z Mono. Powoduje to utworzenie pliku .EXE. Jeśli program
   zawiera błędy, kompilator wyświetli je. Opcja wiersza poleceń /debug powoduje umiesz-
   czenie w kodzie symboli, które umożliwiają uruchomienie pliku o rozszerzeniu EXE
   w programie uruchomieniowym lub zobaczenie numerów wierszy kodu w czasie pod-
   glądania stosu. Obraz stosu zostanie wyświetlony, jeśli program wygeneruje nieobsługi-
   wany błąd.
 4. Aby uruchomić program, należy wpisać:
       hello

   jeśli używa się kompilatora z .NET, lub:
       clix hello.exe

   jeśli używa się kompilatora z Shared Source CLI, a:
       mono hello.exe

   w przypadku korzystania z kompilatora z Mono.
W oknie powinien pojawić się wtedy napis „Witaj świecie”.


                                      Kompilacja JIT
  W trakcie kompilacji hello.cs za pomocą polecenia csc powstaje plik wykonywalny. Należy
  jednak pamiętać, że zawiera on kod w języku MSIL, opisanym w rozdziale 1.
  Co ciekawe, kiedy napisze się aplikację w języku VB.NET lub w dowolnym języku zgodnym
  systemem .NET CLS, zostanie ona skompilowana do bardzo podobnego kodu w języku MSIL.
  Kod IL utworzony na podstawie kodu pisanego w różnych językach jest praktycznie nieroz-
  różnialny.
  Oprócz tworzenia kodu IL, który jest podobny do kodu bajtowego języka Java, kompilator
  tworzy w pliku o rozszerzeniu .EXE segment tylko do odczytu, w którym znajduje się stan-
  dardowy nagłówek plików wykonywalnych systemu Win32. W tym segmencie kompilator
  określa punkt startowy, do którego w momencie uruchamiania programu przechodzi program
  ładujący systemu operacyjnego.
  System operacyjny nie potrafi jednak wykonać kodu IL, dlatego punkt startowy prowadzi do
  uruchomienia kompilatora JIT platformy .NET (kompilator ten został opisany w rozdziale 1.).
  W wyniku kompilacji JIT powstaje kod maszynowy procesora, taki sam, jak w zwykłych pli-
  kach wykonywalnych. Kluczową cechą kompilacji JIT jest to, że funkcje kompilowane są je-
  dynie wtedy, kiedy są używane, bezpośrednio przed ich wykonaniem.




                                                          Tworzenie programu „Witaj świecie”   |   35
Usuwanie błędów w Visual Studio .NET
Najważniejszym elementem każdego środowiska programistycznego jest program urucho-
mieniowy. Narzędzie udostępniane w Visual Studio jest bardzo wydajne i czas poświęcony na
jego dobre poznanie na pewno nie będzie stracony. Podstawy używania programu urucho-
mieniowego są bardzo proste. Wystarczy nauczyć się wykonywać trzy kluczowe czynności:
     • ustawianie punktów przerwania i wykonywanie programów do danego punktu,
     • wkraczanie w ciało metody i przeskakiwanie nad wywołaniami metod,
     • sprawdzanie i zmiana wartości zmiennych, danych składowych i innych wartości.

Ten rozdział nie obejmuje całej dokumentacji programu uruchomieniowego, ale wymienione
powyżej czynności są tak istotne, że z pewnością wystarczą do rozpoczęcia pracy.
Program uruchomieniowy umożliwia dostęp do tych samych operacji na różne sposoby, zwy-
kle przez opcje menu i przyciski. Najłatwiejszy sposób na ustawienie punktu przerwania to
kliknięcie na lewym marginesie. Środowisko IDE zaznacza punkty przerwania jako czerwone
kropki, jak przedstawione to jest na rysunku 2.5.




Rysunek 2.5. Punkt przerwania

                    Analiza działania programu uruchomieniowego wymaga przykładowego kodu.
                    W tym punkcie używam fragmentów kodu z rozdziału 5., który na razie może być
                    niezrozumiały. Czytelnicy znający język C++ lub Java powinni jednak rozumieć jego
                    znaczenie.

Aby uruchomić program uruchomieniowy, należy wybrać opcję Debug→Start lub przycisnąć
klawisz F5. Program zostanie wtedy skompilowany, a następnie wykonany do punktu prze-
rwania. W tym momencie wykonywanie zatrzyma się, a żółta strzałka wskaże instrukcję, któ-
ra powinna zostać wykonana jako kolejna, co pokazane jest na rysunku 2.6.




Rysunek 2.6. Dojście do punktu wstrzymania
Po dojściu do punktu wstrzymania łatwo jest sprawdzić wartości poszczególnych obiektów.
Na przykład można sprawdzić wartość zmiennej i umieszczając nad nią kursor i odczekując
chwilę. Pojawi się wtedy lista taka jak na rysunku 2.7.


36     |   Rozdział 2. Pierwszy program — „Witaj świecie”
Rysunek 2.7. Sprawdzanie wartości
Środowisko programu uruchomieniowego udostępnia także liczne użyteczne okna, jak okno
Locals wyświetlające wartości wszystkich zmiennych lokalnych (patrz rysunek 2.8).




Rysunek 2.8. Okno Locals
W przypadku zmiennych należących do typów wbudowanych, na przykład liczb całkowi-
tych, wyświetlana jest ich wartość. Obiekty złożonych typów posiadają przy sobie znak plus
(+). Można je rozwinąć, jak widać na rysunku 2.9. Więcej informacji o obiektach i ich danych
znajduje się w kolejnych rozdziałach.




Rysunek 2.9. Obiekt rozwinięty w oknie Locals
Można wkroczyć w ciało kolejnej metody przyciskając klawisz F11. W tym przypadku spo-
woduje to wejście w ciało metody DrawWindow() klasy Window, co przedstawione jest na ry-
sunku 2.10.
Można zobaczyć, że kolejną instrukcją jest teraz WriteLine() w metodzie DrawWindow(). Okno
Autos zostało uaktualnione i przedstawia aktualny stan obiektów.
Oczywiście to nie wszystkie możliwości programu uruchomieniowego, jednak materiał przed-
stawiony w tym rozdziale pozwala na rozpoczęcie pracy z tym narzędziem. Pisanie krótkich
programów demonstracyjnych i sprawdzanie ich działania za pomocą programu uruchomie-
niowego pozwala udzielić odpowiedzi na wiele pytań programistycznych. Dobry program uru-
chomieniowy jest, w pewnym sensie, najbardziej istotnym narzędziem języka programowania.


                                                       Usuwanie błędów w Visual Studio .NET   |   37
Rysunek 2.10. Wkraczanie w ciało metody




38   |   Rozdział 2. Pierwszy program — „Witaj świecie”

More Related Content

What's hot

C# 2005. Wprowadzenie
C# 2005. WprowadzenieC# 2005. Wprowadzenie
C# 2005. Wprowadzenie
Wydawnictwo Helion
 
Visual C# 2005 Express Edition. Od podstaw
Visual C# 2005 Express Edition. Od podstawVisual C# 2005 Express Edition. Od podstaw
Visual C# 2005 Express Edition. Od podstaw
Wydawnictwo Helion
 
C++. Programowanie zorientowane obiektowo. Vademecum profesjonalisty
C++. Programowanie zorientowane obiektowo. Vademecum profesjonalistyC++. Programowanie zorientowane obiektowo. Vademecum profesjonalisty
C++. Programowanie zorientowane obiektowo. Vademecum profesjonalisty
Wydawnictwo Helion
 
C++. Kruczki i fortele w programowaniu
C++. Kruczki i fortele w programowaniuC++. Kruczki i fortele w programowaniu
C++. Kruczki i fortele w programowaniu
Wydawnictwo Helion
 
C++. Styl i technika zaawansowanego programowania
C++. Styl i technika zaawansowanego programowaniaC++. Styl i technika zaawansowanego programowania
C++. Styl i technika zaawansowanego programowania
Wydawnictwo Helion
 
C++Builder Borland Developer Studio 2006. Kompendium programisty
C++Builder Borland Developer Studio 2006. Kompendium programistyC++Builder Borland Developer Studio 2006. Kompendium programisty
C++Builder Borland Developer Studio 2006. Kompendium programisty
Wydawnictwo Helion
 
Delphi 2005. 303 gotowe rozwiązania
Delphi 2005. 303 gotowe rozwiązaniaDelphi 2005. 303 gotowe rozwiązania
Delphi 2005. 303 gotowe rozwiązania
Wydawnictwo Helion
 
Delphi 8 .NET. Kompendium programisty
Delphi 8 .NET. Kompendium programistyDelphi 8 .NET. Kompendium programisty
Delphi 8 .NET. Kompendium programisty
Wydawnictwo Helion
 
Aplikacje w Visual C++ 2005. Przykłady
Aplikacje w Visual C++ 2005. PrzykładyAplikacje w Visual C++ 2005. Przykłady
Aplikacje w Visual C++ 2005. Przykłady
Wydawnictwo Helion
 
C# i ASP.NET. Szybki start
C# i ASP.NET. Szybki startC# i ASP.NET. Szybki start
C# i ASP.NET. Szybki start
Wydawnictwo Helion
 
Zrozumieć platformę .NET. Wydanie II
Zrozumieć platformę .NET. Wydanie IIZrozumieć platformę .NET. Wydanie II
Zrozumieć platformę .NET. Wydanie II
Wydawnictwo Helion
 
C++Builder i Turbo C++. Podstawy
C++Builder i Turbo C++. PodstawyC++Builder i Turbo C++. Podstawy
C++Builder i Turbo C++. Podstawy
Wydawnictwo Helion
 
C#. Wzorce projektowe
C#. Wzorce projektoweC#. Wzorce projektowe
C#. Wzorce projektowe
Wydawnictwo Helion
 
C++Builder. Kompendium programisty
C++Builder. Kompendium programistyC++Builder. Kompendium programisty
C++Builder. Kompendium programisty
Wydawnictwo Helion
 
Thinking in C++. Edycja polska. Tom 2
Thinking in C++. Edycja polska. Tom 2Thinking in C++. Edycja polska. Tom 2
Thinking in C++. Edycja polska. Tom 2
Wydawnictwo Helion
 
C++Builder 2006. Ćwiczenia praktyczne
C++Builder 2006. Ćwiczenia praktyczneC++Builder 2006. Ćwiczenia praktyczne
C++Builder 2006. Ćwiczenia praktyczne
Wydawnictwo Helion
 
J2EE. Wzorce projektowe
J2EE. Wzorce projektoweJ2EE. Wzorce projektowe
J2EE. Wzorce projektowe
Wydawnictwo Helion
 
Delphi 7. Kompendium programisty
Delphi 7. Kompendium programistyDelphi 7. Kompendium programisty
Delphi 7. Kompendium programisty
Wydawnictwo Helion
 
Programowanie. Od podstaw
Programowanie. Od podstawProgramowanie. Od podstaw
Programowanie. Od podstaw
Wydawnictwo Helion
 
Delphi 2005
Delphi 2005Delphi 2005
Delphi 2005
Wydawnictwo Helion
 

What's hot (20)

C# 2005. Wprowadzenie
C# 2005. WprowadzenieC# 2005. Wprowadzenie
C# 2005. Wprowadzenie
 
Visual C# 2005 Express Edition. Od podstaw
Visual C# 2005 Express Edition. Od podstawVisual C# 2005 Express Edition. Od podstaw
Visual C# 2005 Express Edition. Od podstaw
 
C++. Programowanie zorientowane obiektowo. Vademecum profesjonalisty
C++. Programowanie zorientowane obiektowo. Vademecum profesjonalistyC++. Programowanie zorientowane obiektowo. Vademecum profesjonalisty
C++. Programowanie zorientowane obiektowo. Vademecum profesjonalisty
 
C++. Kruczki i fortele w programowaniu
C++. Kruczki i fortele w programowaniuC++. Kruczki i fortele w programowaniu
C++. Kruczki i fortele w programowaniu
 
C++. Styl i technika zaawansowanego programowania
C++. Styl i technika zaawansowanego programowaniaC++. Styl i technika zaawansowanego programowania
C++. Styl i technika zaawansowanego programowania
 
C++Builder Borland Developer Studio 2006. Kompendium programisty
C++Builder Borland Developer Studio 2006. Kompendium programistyC++Builder Borland Developer Studio 2006. Kompendium programisty
C++Builder Borland Developer Studio 2006. Kompendium programisty
 
Delphi 2005. 303 gotowe rozwiązania
Delphi 2005. 303 gotowe rozwiązaniaDelphi 2005. 303 gotowe rozwiązania
Delphi 2005. 303 gotowe rozwiązania
 
Delphi 8 .NET. Kompendium programisty
Delphi 8 .NET. Kompendium programistyDelphi 8 .NET. Kompendium programisty
Delphi 8 .NET. Kompendium programisty
 
Aplikacje w Visual C++ 2005. Przykłady
Aplikacje w Visual C++ 2005. PrzykładyAplikacje w Visual C++ 2005. Przykłady
Aplikacje w Visual C++ 2005. Przykłady
 
C# i ASP.NET. Szybki start
C# i ASP.NET. Szybki startC# i ASP.NET. Szybki start
C# i ASP.NET. Szybki start
 
Zrozumieć platformę .NET. Wydanie II
Zrozumieć platformę .NET. Wydanie IIZrozumieć platformę .NET. Wydanie II
Zrozumieć platformę .NET. Wydanie II
 
C++Builder i Turbo C++. Podstawy
C++Builder i Turbo C++. PodstawyC++Builder i Turbo C++. Podstawy
C++Builder i Turbo C++. Podstawy
 
C#. Wzorce projektowe
C#. Wzorce projektoweC#. Wzorce projektowe
C#. Wzorce projektowe
 
C++Builder. Kompendium programisty
C++Builder. Kompendium programistyC++Builder. Kompendium programisty
C++Builder. Kompendium programisty
 
Thinking in C++. Edycja polska. Tom 2
Thinking in C++. Edycja polska. Tom 2Thinking in C++. Edycja polska. Tom 2
Thinking in C++. Edycja polska. Tom 2
 
C++Builder 2006. Ćwiczenia praktyczne
C++Builder 2006. Ćwiczenia praktyczneC++Builder 2006. Ćwiczenia praktyczne
C++Builder 2006. Ćwiczenia praktyczne
 
J2EE. Wzorce projektowe
J2EE. Wzorce projektoweJ2EE. Wzorce projektowe
J2EE. Wzorce projektowe
 
Delphi 7. Kompendium programisty
Delphi 7. Kompendium programistyDelphi 7. Kompendium programisty
Delphi 7. Kompendium programisty
 
Programowanie. Od podstaw
Programowanie. Od podstawProgramowanie. Od podstaw
Programowanie. Od podstaw
 
Delphi 2005
Delphi 2005Delphi 2005
Delphi 2005
 

Viewers also liked

Marketing wartosci dodanej (added value marketing)
Marketing wartosci dodanej (added value marketing)Marketing wartosci dodanej (added value marketing)
Marketing wartosci dodanej (added value marketing)Shake Your Brand
 
Informacje, społeczeństwo, ooś
Informacje, społeczeństwo, ooś Informacje, społeczeństwo, ooś
Informacje, społeczeństwo, ooś Odzyskenergii
 
Mărturii despre natură jakob lorber
Mărturii despre natură   jakob lorber Mărturii despre natură   jakob lorber
Mărturii despre natură jakob lorber Nelu Nemesniciuc
 
Raport Cleaning I'm in love
Raport Cleaning I'm in love  Raport Cleaning I'm in love
Raport Cleaning I'm in love
Office Warriors
 
Raport M&A Index Poland - intensywny 4Q 2015 na rynku fuzji i przejęć
Raport M&A Index Poland - intensywny 4Q 2015 na rynku fuzji i przejęćRaport M&A Index Poland - intensywny 4Q 2015 na rynku fuzji i przejęć
Raport M&A Index Poland - intensywny 4Q 2015 na rynku fuzji i przejęć
FORDATA VDR
 
як допомогти собі в стресовій ситуації
як допомогти собі в стресовій ситуаціїяк допомогти собі в стресовій ситуації
як допомогти собі в стресовій ситуації
Vanya0508
 
Презентація досвіду роботи вчителя початкових класів
Презентація досвіду роботи вчителя початкових класівПрезентація досвіду роботи вчителя початкових класів
Презентація досвіду роботи вчителя початкових класів
Олег Суслик
 
Optymalna temperatura cieplej wody uzytkowej
Optymalna temperatura cieplej wody uzytkowejOptymalna temperatura cieplej wody uzytkowej
Optymalna temperatura cieplej wody uzytkowej
Vaillant Saunier Duval Sp. z o.o.
 
Zmiany w regulacjach prawnych ważny dla pacjentów
Zmiany w regulacjach prawnych ważny dla pacjentówZmiany w regulacjach prawnych ważny dla pacjentów
Zmiany w regulacjach prawnych ważny dla pacjentów
Fundacja MY PACJENCI
 
Kocioł Defro AKM LUX - instrukcja obslugi
Kocioł Defro AKM LUX - instrukcja obslugiKocioł Defro AKM LUX - instrukcja obslugi
Kocioł Defro AKM LUX - instrukcja obslugi
Luskar - Z Nami Wybudujesz i Ogrzejesz
 
Wykonywanie operacji kształtowania blachy
Wykonywanie operacji kształtowania blachy Wykonywanie operacji kształtowania blachy
Wykonywanie operacji kształtowania blachy
kamil132
 
Взаємодія учня и вчителя
Взаємодія учня и вчителяВзаємодія учня и вчителя
Взаємодія учня и вчителяAlexander Marchenko
 
Wyk04mat
Wyk04matWyk04mat
Wyk04mat
slasur
 
Pompy ciepła - przykłady realizacji
Pompy ciepła - przykłady realizacjiPompy ciepła - przykłady realizacji
Pompy ciepła - przykłady realizacjikgn1
 
Ewt pl by-uk
Ewt pl by-ukEwt pl by-uk
Ewt pl by-uk
MARO51
 
J.KORNAS, Obowiązek lojalności akcjonariusza w spółce akcyjnej
J.KORNAS, Obowiązek lojalności akcjonariusza w spółce akcyjnejJ.KORNAS, Obowiązek lojalności akcjonariusza w spółce akcyjnej
J.KORNAS, Obowiązek lojalności akcjonariusza w spółce akcyjnej
joanna_kornas
 
Temperatura pracy kolektora słonecznego
Temperatura pracy kolektora słonecznegoTemperatura pracy kolektora słonecznego
Temperatura pracy kolektora słonecznego
Hewalex Sp. z o.o. Sp.K.
 

Viewers also liked (20)

Marketing wartosci dodanej (added value marketing)
Marketing wartosci dodanej (added value marketing)Marketing wartosci dodanej (added value marketing)
Marketing wartosci dodanej (added value marketing)
 
Informacje, społeczeństwo, ooś
Informacje, społeczeństwo, ooś Informacje, społeczeństwo, ooś
Informacje, społeczeństwo, ooś
 
Mărturii despre natură jakob lorber
Mărturii despre natură   jakob lorber Mărturii despre natură   jakob lorber
Mărturii despre natură jakob lorber
 
Raport Cleaning I'm in love
Raport Cleaning I'm in love  Raport Cleaning I'm in love
Raport Cleaning I'm in love
 
Kadm
KadmKadm
Kadm
 
Raport M&A Index Poland - intensywny 4Q 2015 na rynku fuzji i przejęć
Raport M&A Index Poland - intensywny 4Q 2015 na rynku fuzji i przejęćRaport M&A Index Poland - intensywny 4Q 2015 na rynku fuzji i przejęć
Raport M&A Index Poland - intensywny 4Q 2015 na rynku fuzji i przejęć
 
як допомогти собі в стресовій ситуації
як допомогти собі в стресовій ситуаціїяк допомогти собі в стресовій ситуації
як допомогти собі в стресовій ситуації
 
Презентація досвіду роботи вчителя початкових класів
Презентація досвіду роботи вчителя початкових класівПрезентація досвіду роботи вчителя початкових класів
Презентація досвіду роботи вчителя початкових класів
 
Optymalna temperatura cieplej wody uzytkowej
Optymalna temperatura cieplej wody uzytkowejOptymalna temperatura cieplej wody uzytkowej
Optymalna temperatura cieplej wody uzytkowej
 
Zmiany w regulacjach prawnych ważny dla pacjentów
Zmiany w regulacjach prawnych ważny dla pacjentówZmiany w regulacjach prawnych ważny dla pacjentów
Zmiany w regulacjach prawnych ważny dla pacjentów
 
Kocioł Defro AKM LUX - instrukcja obslugi
Kocioł Defro AKM LUX - instrukcja obslugiKocioł Defro AKM LUX - instrukcja obslugi
Kocioł Defro AKM LUX - instrukcja obslugi
 
Wykonywanie operacji kształtowania blachy
Wykonywanie operacji kształtowania blachy Wykonywanie operacji kształtowania blachy
Wykonywanie operacji kształtowania blachy
 
Взаємодія учня и вчителя
Взаємодія учня и вчителяВзаємодія учня и вчителя
Взаємодія учня и вчителя
 
Slask 2.0
Slask 2.0Slask 2.0
Slask 2.0
 
Wyk04mat
Wyk04matWyk04mat
Wyk04mat
 
Pompy ciepła - przykłady realizacji
Pompy ciepła - przykłady realizacjiPompy ciepła - przykłady realizacji
Pompy ciepła - przykłady realizacji
 
Ewt pl by-uk
Ewt pl by-ukEwt pl by-uk
Ewt pl by-uk
 
J.KORNAS, Obowiązek lojalności akcjonariusza w spółce akcyjnej
J.KORNAS, Obowiązek lojalności akcjonariusza w spółce akcyjnejJ.KORNAS, Obowiązek lojalności akcjonariusza w spółce akcyjnej
J.KORNAS, Obowiązek lojalności akcjonariusza w spółce akcyjnej
 
Temperatura pracy kolektora słonecznego
Temperatura pracy kolektora słonecznegoTemperatura pracy kolektora słonecznego
Temperatura pracy kolektora słonecznego
 
Badanie Kibiców
Badanie KibicówBadanie Kibiców
Badanie Kibiców
 

Similar to C#. Programowanie

Visual C++ 2005 Express Edition. Tworzenie aplikacji dla Windows
Visual C++ 2005 Express Edition. Tworzenie aplikacji dla WindowsVisual C++ 2005 Express Edition. Tworzenie aplikacji dla Windows
Visual C++ 2005 Express Edition. Tworzenie aplikacji dla Windows
Wydawnictwo Helion
 
Microsoft Visual Basic .NET 2003. Księga eksperta
Microsoft Visual Basic .NET 2003. Księga ekspertaMicrosoft Visual Basic .NET 2003. Księga eksperta
Microsoft Visual Basic .NET 2003. Księga eksperta
Wydawnictwo Helion
 
Visual C# 2008. Projektowanie aplikacji. Pierwsze starcie
Visual C# 2008. Projektowanie aplikacji. Pierwsze starcieVisual C# 2008. Projektowanie aplikacji. Pierwsze starcie
Visual C# 2008. Projektowanie aplikacji. Pierwsze starcie
Wydawnictwo Helion
 
C#. Ćwiczenia. Wydanie II
C#. Ćwiczenia. Wydanie IIC#. Ćwiczenia. Wydanie II
C#. Ćwiczenia. Wydanie II
Wydawnictwo Helion
 
.NET Framework 2.0. Zaawansowane programowanie
.NET Framework 2.0. Zaawansowane programowanie.NET Framework 2.0. Zaawansowane programowanie
.NET Framework 2.0. Zaawansowane programowanie
Wydawnictwo Helion
 
Visual Basic 2005. Wprowadzenie do programowania w .NET
Visual Basic 2005. Wprowadzenie do programowania w .NETVisual Basic 2005. Wprowadzenie do programowania w .NET
Visual Basic 2005. Wprowadzenie do programowania w .NET
Wydawnictwo Helion
 
Visual Basic .NET. Encyklopedia
Visual Basic .NET. EncyklopediaVisual Basic .NET. Encyklopedia
Visual Basic .NET. Encyklopedia
Wydawnictwo Helion
 
C++. 50 efektywnych sposobów na udoskonalenie Twoich programów
C++. 50 efektywnych sposobów na udoskonalenie Twoich programówC++. 50 efektywnych sposobów na udoskonalenie Twoich programów
C++. 50 efektywnych sposobów na udoskonalenie Twoich programów
Wydawnictwo Helion
 
ASP.NET 3.5 dla programistów PHP
ASP.NET 3.5 dla programistów PHPASP.NET 3.5 dla programistów PHP
ASP.NET 3.5 dla programistów PHP
Wydawnictwo Helion
 
Programowanie obiektowe w Visual Basic .NET dla każdego
Programowanie obiektowe w Visual Basic .NET dla każdegoProgramowanie obiektowe w Visual Basic .NET dla każdego
Programowanie obiektowe w Visual Basic .NET dla każdego
Wydawnictwo Helion
 
.NET CLR. Księga eksperta
.NET CLR. Księga eksperta.NET CLR. Księga eksperta
.NET CLR. Księga eksperta
Wydawnictwo Helion
 
ASP.NET 2.0. Projektowanie aplikacji internetowych
ASP.NET 2.0. Projektowanie aplikacji internetowychASP.NET 2.0. Projektowanie aplikacji internetowych
ASP.NET 2.0. Projektowanie aplikacji internetowych
Wydawnictwo Helion
 
Asembler. Podręcznik programisty
Asembler. Podręcznik programistyAsembler. Podręcznik programisty
Asembler. Podręcznik programisty
Wydawnictwo Helion
 
Visual Basic .NET. Księga eksperta
Visual Basic .NET. Księga ekspertaVisual Basic .NET. Księga eksperta
Visual Basic .NET. Księga eksperta
Wydawnictwo Helion
 
Język C++. Gotowe rozwiązania dla programistów
Język C++. Gotowe rozwiązania dla programistówJęzyk C++. Gotowe rozwiązania dla programistów
Język C++. Gotowe rozwiązania dla programistów
Wydawnictwo Helion
 
C#. Ćwiczenia
C#. ĆwiczeniaC#. Ćwiczenia
C#. Ćwiczenia
Wydawnictwo Helion
 
Aplikacje w Delphi. Przykłady. Wydanie II
Aplikacje w Delphi. Przykłady. Wydanie IIAplikacje w Delphi. Przykłady. Wydanie II
Aplikacje w Delphi. Przykłady. Wydanie II
Wydawnictwo Helion
 

Similar to C#. Programowanie (17)

Visual C++ 2005 Express Edition. Tworzenie aplikacji dla Windows
Visual C++ 2005 Express Edition. Tworzenie aplikacji dla WindowsVisual C++ 2005 Express Edition. Tworzenie aplikacji dla Windows
Visual C++ 2005 Express Edition. Tworzenie aplikacji dla Windows
 
Microsoft Visual Basic .NET 2003. Księga eksperta
Microsoft Visual Basic .NET 2003. Księga ekspertaMicrosoft Visual Basic .NET 2003. Księga eksperta
Microsoft Visual Basic .NET 2003. Księga eksperta
 
Visual C# 2008. Projektowanie aplikacji. Pierwsze starcie
Visual C# 2008. Projektowanie aplikacji. Pierwsze starcieVisual C# 2008. Projektowanie aplikacji. Pierwsze starcie
Visual C# 2008. Projektowanie aplikacji. Pierwsze starcie
 
C#. Ćwiczenia. Wydanie II
C#. Ćwiczenia. Wydanie IIC#. Ćwiczenia. Wydanie II
C#. Ćwiczenia. Wydanie II
 
.NET Framework 2.0. Zaawansowane programowanie
.NET Framework 2.0. Zaawansowane programowanie.NET Framework 2.0. Zaawansowane programowanie
.NET Framework 2.0. Zaawansowane programowanie
 
Visual Basic 2005. Wprowadzenie do programowania w .NET
Visual Basic 2005. Wprowadzenie do programowania w .NETVisual Basic 2005. Wprowadzenie do programowania w .NET
Visual Basic 2005. Wprowadzenie do programowania w .NET
 
Visual Basic .NET. Encyklopedia
Visual Basic .NET. EncyklopediaVisual Basic .NET. Encyklopedia
Visual Basic .NET. Encyklopedia
 
C++. 50 efektywnych sposobów na udoskonalenie Twoich programów
C++. 50 efektywnych sposobów na udoskonalenie Twoich programówC++. 50 efektywnych sposobów na udoskonalenie Twoich programów
C++. 50 efektywnych sposobów na udoskonalenie Twoich programów
 
ASP.NET 3.5 dla programistów PHP
ASP.NET 3.5 dla programistów PHPASP.NET 3.5 dla programistów PHP
ASP.NET 3.5 dla programistów PHP
 
Programowanie obiektowe w Visual Basic .NET dla każdego
Programowanie obiektowe w Visual Basic .NET dla każdegoProgramowanie obiektowe w Visual Basic .NET dla każdego
Programowanie obiektowe w Visual Basic .NET dla każdego
 
.NET CLR. Księga eksperta
.NET CLR. Księga eksperta.NET CLR. Księga eksperta
.NET CLR. Księga eksperta
 
ASP.NET 2.0. Projektowanie aplikacji internetowych
ASP.NET 2.0. Projektowanie aplikacji internetowychASP.NET 2.0. Projektowanie aplikacji internetowych
ASP.NET 2.0. Projektowanie aplikacji internetowych
 
Asembler. Podręcznik programisty
Asembler. Podręcznik programistyAsembler. Podręcznik programisty
Asembler. Podręcznik programisty
 
Visual Basic .NET. Księga eksperta
Visual Basic .NET. Księga ekspertaVisual Basic .NET. Księga eksperta
Visual Basic .NET. Księga eksperta
 
Język C++. Gotowe rozwiązania dla programistów
Język C++. Gotowe rozwiązania dla programistówJęzyk C++. Gotowe rozwiązania dla programistów
Język C++. Gotowe rozwiązania dla programistów
 
C#. Ćwiczenia
C#. ĆwiczeniaC#. Ćwiczenia
C#. Ćwiczenia
 
Aplikacje w Delphi. Przykłady. Wydanie II
Aplikacje w Delphi. Przykłady. Wydanie IIAplikacje w Delphi. Przykłady. Wydanie II
Aplikacje w Delphi. Przykłady. Wydanie II
 

More from Wydawnictwo Helion

Tworzenie filmów w Windows XP. Projekty
Tworzenie filmów w Windows XP. ProjektyTworzenie filmów w Windows XP. Projekty
Tworzenie filmów w Windows XP. Projekty
Wydawnictwo Helion
 
Blog, więcej niż internetowy pamiętnik
Blog, więcej niż internetowy pamiętnikBlog, więcej niż internetowy pamiętnik
Blog, więcej niż internetowy pamiętnik
Wydawnictwo Helion
 
Access w biurze i nie tylko
Access w biurze i nie tylkoAccess w biurze i nie tylko
Access w biurze i nie tylko
Wydawnictwo Helion
 
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczne
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktycznePozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczne
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczne
Wydawnictwo Helion
 
E-wizerunek. Internet jako narzędzie kreowania image&#39;u w biznesie
E-wizerunek. Internet jako narzędzie kreowania image&#39;u w biznesieE-wizerunek. Internet jako narzędzie kreowania image&#39;u w biznesie
E-wizerunek. Internet jako narzędzie kreowania image&#39;u w biznesie
Wydawnictwo Helion
 
Microsoft Visual C++ 2008. Tworzenie aplikacji dla Windows
Microsoft Visual C++ 2008. Tworzenie aplikacji dla WindowsMicrosoft Visual C++ 2008. Tworzenie aplikacji dla Windows
Microsoft Visual C++ 2008. Tworzenie aplikacji dla Windows
Wydawnictwo Helion
 
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie IICo potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
Wydawnictwo Helion
 
Makrofotografia. Magia szczegółu
Makrofotografia. Magia szczegółuMakrofotografia. Magia szczegółu
Makrofotografia. Magia szczegółu
Wydawnictwo Helion
 
Windows PowerShell. Podstawy
Windows PowerShell. PodstawyWindows PowerShell. Podstawy
Windows PowerShell. Podstawy
Wydawnictwo Helion
 
Java. Efektywne programowanie. Wydanie II
Java. Efektywne programowanie. Wydanie IIJava. Efektywne programowanie. Wydanie II
Java. Efektywne programowanie. Wydanie II
Wydawnictwo Helion
 
JavaScript. Pierwsze starcie
JavaScript. Pierwsze starcieJavaScript. Pierwsze starcie
JavaScript. Pierwsze starcie
Wydawnictwo Helion
 
Ajax, JavaScript i PHP. Intensywny trening
Ajax, JavaScript i PHP. Intensywny treningAjax, JavaScript i PHP. Intensywny trening
Ajax, JavaScript i PHP. Intensywny trening
Wydawnictwo Helion
 
PowerPoint 2007 PL. Seria praktyk
PowerPoint 2007 PL. Seria praktykPowerPoint 2007 PL. Seria praktyk
PowerPoint 2007 PL. Seria praktyk
Wydawnictwo Helion
 
Excel 2007 PL. Seria praktyk
Excel 2007 PL. Seria praktykExcel 2007 PL. Seria praktyk
Excel 2007 PL. Seria praktyk
Wydawnictwo Helion
 
Access 2007 PL. Seria praktyk
Access 2007 PL. Seria praktykAccess 2007 PL. Seria praktyk
Access 2007 PL. Seria praktyk
Wydawnictwo Helion
 
Word 2007 PL. Seria praktyk
Word 2007 PL. Seria praktykWord 2007 PL. Seria praktyk
Word 2007 PL. Seria praktyk
Wydawnictwo Helion
 
Serwisy społecznościowe. Budowa, administracja i moderacja
Serwisy społecznościowe. Budowa, administracja i moderacjaSerwisy społecznościowe. Budowa, administracja i moderacja
Serwisy społecznościowe. Budowa, administracja i moderacja
Wydawnictwo Helion
 
AutoCAD 2008 i 2008 PL
AutoCAD 2008 i 2008 PLAutoCAD 2008 i 2008 PL
AutoCAD 2008 i 2008 PL
Wydawnictwo Helion
 
Bazy danych. Pierwsze starcie
Bazy danych. Pierwsze starcieBazy danych. Pierwsze starcie
Bazy danych. Pierwsze starcie
Wydawnictwo Helion
 
Inventor. Pierwsze kroki
Inventor. Pierwsze krokiInventor. Pierwsze kroki
Inventor. Pierwsze kroki
Wydawnictwo Helion
 

More from Wydawnictwo Helion (20)

Tworzenie filmów w Windows XP. Projekty
Tworzenie filmów w Windows XP. ProjektyTworzenie filmów w Windows XP. Projekty
Tworzenie filmów w Windows XP. Projekty
 
Blog, więcej niż internetowy pamiętnik
Blog, więcej niż internetowy pamiętnikBlog, więcej niż internetowy pamiętnik
Blog, więcej niż internetowy pamiętnik
 
Access w biurze i nie tylko
Access w biurze i nie tylkoAccess w biurze i nie tylko
Access w biurze i nie tylko
 
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczne
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktycznePozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczne
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczne
 
E-wizerunek. Internet jako narzędzie kreowania image&#39;u w biznesie
E-wizerunek. Internet jako narzędzie kreowania image&#39;u w biznesieE-wizerunek. Internet jako narzędzie kreowania image&#39;u w biznesie
E-wizerunek. Internet jako narzędzie kreowania image&#39;u w biznesie
 
Microsoft Visual C++ 2008. Tworzenie aplikacji dla Windows
Microsoft Visual C++ 2008. Tworzenie aplikacji dla WindowsMicrosoft Visual C++ 2008. Tworzenie aplikacji dla Windows
Microsoft Visual C++ 2008. Tworzenie aplikacji dla Windows
 
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie IICo potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
 
Makrofotografia. Magia szczegółu
Makrofotografia. Magia szczegółuMakrofotografia. Magia szczegółu
Makrofotografia. Magia szczegółu
 
Windows PowerShell. Podstawy
Windows PowerShell. PodstawyWindows PowerShell. Podstawy
Windows PowerShell. Podstawy
 
Java. Efektywne programowanie. Wydanie II
Java. Efektywne programowanie. Wydanie IIJava. Efektywne programowanie. Wydanie II
Java. Efektywne programowanie. Wydanie II
 
JavaScript. Pierwsze starcie
JavaScript. Pierwsze starcieJavaScript. Pierwsze starcie
JavaScript. Pierwsze starcie
 
Ajax, JavaScript i PHP. Intensywny trening
Ajax, JavaScript i PHP. Intensywny treningAjax, JavaScript i PHP. Intensywny trening
Ajax, JavaScript i PHP. Intensywny trening
 
PowerPoint 2007 PL. Seria praktyk
PowerPoint 2007 PL. Seria praktykPowerPoint 2007 PL. Seria praktyk
PowerPoint 2007 PL. Seria praktyk
 
Excel 2007 PL. Seria praktyk
Excel 2007 PL. Seria praktykExcel 2007 PL. Seria praktyk
Excel 2007 PL. Seria praktyk
 
Access 2007 PL. Seria praktyk
Access 2007 PL. Seria praktykAccess 2007 PL. Seria praktyk
Access 2007 PL. Seria praktyk
 
Word 2007 PL. Seria praktyk
Word 2007 PL. Seria praktykWord 2007 PL. Seria praktyk
Word 2007 PL. Seria praktyk
 
Serwisy społecznościowe. Budowa, administracja i moderacja
Serwisy społecznościowe. Budowa, administracja i moderacjaSerwisy społecznościowe. Budowa, administracja i moderacja
Serwisy społecznościowe. Budowa, administracja i moderacja
 
AutoCAD 2008 i 2008 PL
AutoCAD 2008 i 2008 PLAutoCAD 2008 i 2008 PL
AutoCAD 2008 i 2008 PL
 
Bazy danych. Pierwsze starcie
Bazy danych. Pierwsze starcieBazy danych. Pierwsze starcie
Bazy danych. Pierwsze starcie
 
Inventor. Pierwsze kroki
Inventor. Pierwsze krokiInventor. Pierwsze kroki
Inventor. Pierwsze kroki
 

C#. Programowanie

  • 1. IDZ DO PRZYK£ADOWY ROZDZIA£ SPIS TREŒCI C#. Programowanie Autor: Jesse Liberty KATALOG KSI¥¯EK T³umaczenie: Tomasz Walczak ISBN: 83-246-0213-5 KATALOG ONLINE Tytu³ orygina³u: Programming C# Format: B5, stron: 600 ZAMÓW DRUKOWANY KATALOG TWÓJ KOSZYK Podrêcznik podstawowego jêzyka programowania dla platformy .NET • Poznaj elementy jêzyka C# DODAJ DO KOSZYKA • Stwórz w³asn¹ aplikacjê • Komunikuj siê z bazami danych Jêzyk C# zosta³ opracowany przez firmê Microsoft jako podstawowe narzêdzie CENNIK I INFORMACJE programistyczne dla platformy .NET. C# ³¹cz¹cy w sobie najlepsze cechy jêzyków C, C++, Java i Visual Basic doskonale nadaje siê do tworzenia aplikacji bazuj¹cych ZAMÓW INFORMACJE na komponentach. Jest prosty, bezpieczny ze wzglêdu na typy, oparty na obiektach O NOWOŒCIACH i komponentach i przygotowany do obs³ugi mechanizmów komunikacji sieciowej. Za pomoc¹ C# tworzone s¹ nie tylko aplikacje na „du¿e” komputery, ale tak¿e ZAMÓW CENNIK programy dla platformy PocketPC. Popularnoœæ C# nadal roœnie, a jego producent stale inwestuje w dalszy rozwój tego narzêdzia i platformy .NET. „C#. Programowanie” to podrêcznik przedstawiaj¹cy tajniki tworzenia aplikacji dla CZYTELNIA .NET w jêzyku C#. Przeczytasz w nim o podstawowych elementach i strukturach C#, zasadach programowania obiektowego oraz obs³udze wyj¹tków i b³êdów. Poznasz FRAGMENTY KSI¥¯EK ONLINE sposoby tworzenia aplikacji z wykorzystaniem podstawowych technologii tworzenia aplikacji dla platformy .NET — ASP.NET, Windows Forms i ADO.NET. Nauczysz siê wykorzystywaæ metadane i ³¹czyæ swoje aplikacje z API Windows oraz obiektami COM. • Typy w jêzyku C# • Zmienne i sta³e • Instrukcje, operatory i dyrektywy preprocesora • Regu³y programowania obiektowego • Operacje na ³añcuchach znaków • Stosowanie wyra¿eñ regularnych • Tworzenie aplikacji dla systemu Windows • £¹czenie z bazami danych za pomoc¹ ADO.NET Wydawnictwo Helion • Pisanie aplikacji i us³ug sieciowych ul. Chopina 6 • Zdalne korzystanie z obiektów 44-100 Gliwice • W¹tki i synchronizacja tel. (32)230-98-63 • Operacje na plikach e-mail: helion@helion.pl Poznaj nowoczesne techniki programowania
  • 2. Spis treści Przedmowa .................................................................................................................... 9 Część I Język C# 17 1. Język C# i platforma .NET .............................................................................................19 Platforma .NET 19 .NET Framework 20 Kompilacja i język MSIL 22 Język C# 22 2. Pierwszy program — „Witaj świecie” ........................................................................ 25 Klasy, obiekty i typy 25 Tworzenie programu „Witaj świecie” 31 Usuwanie błędów w Visual Studio .NET 36 3. Podstawy języka C#..................................................................................................... 39 Typy 39 Zmienne i stałe 43 Wyrażenia 50 Odstępy 51 Instrukcje 51 Operatory 65 Dyrektywy preprocesora 73 4. Klasy i obiekty ...............................................................................................................77 Definiowanie klas 78 Tworzenie obiektów 82 Używanie składowych statycznych 88 Usuwanie obiektów 92 Przekazywanie parametrów 95 Przeciążanie metod i konstruktorów 101 3
  • 3. Hermetyzacja danych za pomocą właściwości 103 Pola tylko do odczytu 107 5. Dziedziczenie i polimorfizm .......................................................................................109 Specjalizacja i uogólnianie 109 Dziedziczenie 111 Polimorfizm 112 Klasy abstrakcyjne 118 Klasa główna — Object 122 Pakowanie i rozpakowywanie typów 124 Zagnieżdżanie klas 126 6. Przeciążanie operatorów ...........................................................................................129 Używanie słowa kluczowego operator 129 Obsługa innych języków platformy .NET 130 Tworzenie użytecznych operatorów 130 Pary logiczne 130 Operator równości 131 Operatory konwersji 131 7. Struktury......................................................................................................................137 Definiowanie struktur 137 Tworzenie struktur 140 8. Interfejsy .................................................................................................................... 145 Definiowanie i implementowanie interfejsu 146 Dostęp do metod interfejsu 154 Przesłanianie implementacji interfejsu 160 Jawna implementacja interfejsu 164 9. Tablice, kolekcje i mechanizm indeksowania ............................................................173 Tablice 173 Instrukcja foreach 178 Mechanizm indeksowania 191 Interfejsy kolekcji 199 Ograniczenia 202 Klasa List<T> 207 Kolejki 217 4 | Spis treści
  • 4. Stosy 219 Słowniki 221 10. Łańcuchy znaków i wyrażenia regularne ................................................................. 225 Łańcuchy znaków 225 Wyrażenia regularne 239 11. Obsługa wyjątków......................................................................................................251 Zgłaszanie i przechwytywanie wyjątków 252 Wyjątki jako obiekty 261 Własne wyjątki 263 Ponowne zgłaszanie wyjątków 266 12. Delegaty i zdarzenia ...................................................................................................271 Delegaty 272 Delegaty zbiorowe 281 Zdarzenia 285 Używanie anonimowych metod 296 Pobieranie wartości delegatów zbiorowych 297 Część II Programowanie w języku C# 305 13. Tworzenie aplikacji dla systemu Windows............................................................... 307 Tworzenie prostego formularza 308 Tworzenie aplikacji dla systemu Windows 313 Komentarze w stylu języka XML 334 14. Obsługa danych za pomocą ADO.NET....................................................................... 337 Relacyjne bazy danych i SQL 337 Model obiektowy ADO.NET 341 Używanie ADO.NET 343 Używanie zarządzanych dostawców danych OLE DB 345 Używanie kontrolek DataBound 347 15. Tworzenie aplikacji ASP.NET i Web Services ............................................................ 355 Czym jest Web Forms? 356 Tworzenie formularza Web Form 360 Dodawanie kontrolek 363 Spis treści | 5
  • 5. Wiązanie danych 366 Usługi Web Service 375 SOAP, WSDL i Discovery 375 Tworzenie usługi Web 376 Tworzenie pośrednika 380 16. Łączenie różnych technik........................................................................................... 387 Ogólny projekt 387 Tworzenie klienta usługi Web 387 Wyświetlanie informacji 396 Przeszukiwanie na podstawie kategorii 404 Część III CLR i platforma .NET 409 17. Podzespoły i kontrola wersji ...................................................................................... 411 Pliki wykonywalne 411 Metadane 411 Granice zabezpieczeń 412 Manifesty 412 Podzespoły wielomodułowe 413 Podzespoły prywatne 421 Podzespoły współdzielone 421 18. Atrybuty i mechanizm refleksji ................................................................................. 427 Atrybuty 427 Mechanizm refleksji 433 19. Szeregowanie i zdalne korzystanie z obiektów.......................................................443 Domeny aplikacji 444 Kontekst 453 Zdalne korzystanie z obiektów 455 20. Wątki i synchronizacja............................................................................................... 465 Wątki 466 Synchronizacja 473 Sytuacja wyścigu i zakleszczenie 483 6 | Spis treści
  • 6. 21. Strumienie ..................................................................................................................485 Pliki i katalogi 485 Odczyt i zapis danych 495 Asynchroniczne operacje wejścia i wyjścia 502 Sieciowe operacje wejścia i wyjścia 506 Strumienie w internecie 523 Serializacja 525 Izolowana pamięć 533 22. Platforma .NET a model COM .................................................................................... 537 Importowanie kontrolek ActiveX 537 Importowanie komponentów COM 544 Eksportowanie komponentów .NET 552 P/Invoke 555 Wskaźniki 557 Dodatki 563 A Słowa kluczowe języka C# ........................................................................................ 565 Skorowidz ...................................................................................................................571 Spis treści | 7
  • 7. ROZDZIAŁ 2. Pierwszy program — „Witaj świecie” Zgodnie z niepisaną tradycją wiele książek programistycznych rozpoczyna się od opisu pro- gramu wyświetlającego napis „Witaj świecie”. W tym rozdziale opisuję, jak stworzyć, skom- pilować i uruchomić prosty program napisany w języku C#. Analiza tego programu pozwoli zaprezentować kluczowe cechy języka C#. Kod na listingu 2.1 zawiera podstawowe elementy bardzo prostego programu w języku C#. Listing 2.1. Prosty program w języku C# class Hello { static void Main() { // Używa konsoli systemowej System.Console.WriteLine("Witaj świecie"); } } Po skompilowaniu i uruchomieniu programu w konsoli zostanie wyświetlony napis „Witaj świecie”. Jednak przed kompilacją i uruchomieniem warto przyjrzeć się bliżej temu prostemu programowi. Klasy, obiekty i typy Istotą programowania obiektowego jest tworzenie nowych typów. Typ to reprezentacja jakie- goś bytu. Czasem jest to byt abstrakcyjny, jak tabela danych lub wątek, czasem zaś coś bar- dziej widocznego, jak przycisk w oknie. Typ definiuje ogólne właściwości i zachowanie bytu. Jeśli w programie znajdują się trzy egzemplarze klasy przycisku, na przykład przyciski OK, Anuluj i Pomoc, wszystkie one mają rozmiar, ale konkretny rozmiar każdego przycisku może być inny. Podobnie wszystkie przyciski obsługują te same operacje (wyświetlenie, kliknięcie), ale sposób wykonywania tych operacji może być odmienny. Dlatego poszczególne przyciski mogą się różnić szczegółami, ale wszystkie są tego samego typu. Podobnie jak w wielu innych obiektowych językach programowania, w C# typ definiowany jest przez klasę, a konkretne egzemplarze klasy są znane jako obiekty. W kolejnych rozdziałach przedstawiam również inne typy języka C#, między innymi wyliczenia, struktury i delegaty, ale na razie proponuję skoncentrować się na klasach. 25
  • 8. W programie wyświetlającym napis „Witaj świecie” znajduje się deklaracja tylko jednego ty- pu — klasa Hello. Aby zdefiniować typ w języku C#, wystarczy zadeklarować go jako klasę za pomocą słowa kluczowego class, nadać mu nazwę — w tym przypadku Hello — i zde- finiować potrzebne właściwości i zachowanie. Właściwości i zachowanie klasy w języku C# muszą znajdować się wewnątrz nawiasów ({}). Dla programistów języka C++. Po zamykającym nawiasie klasy nie ma średnika. Metody Do cech klasy należą właściwości i zachowanie. Zachowanie zdefiniowane jest za pomocą metod składowych. Właściwości opisuję w rozdziale 3. Metoda to funkcja należąca do klasy. Metody składowe są nawet czasem nazywane funkcjami składowymi. Metody definiują, co klasa może zrobić i jak się zachowuje. Zwykle nazwy metod odzwierciedlają ich działanie, na przykład WriteLine() lub AddNumbers(). Jednak w tym przypadku metoda klasy ma specjalną nazwę, Main(), która nie opisuje działania, ale infor- muje środowisko CLR, że jest to główna metoda klasy. Dla programistów języka C++. Nazwa Main() w języku C# jest pisana wielką literą i musi być składową klasy (nie może być globalna). Metoda Main() może zwracać typ int lub void. Środowisko CLR wywołuje metodę Main() w momencie uruchomienia programu. Main() to punkt startowy programu i każdy program w języku C# musi zawierać tę metodę1. Deklaracje metod to kontrakt między twórcą metody i jej użytkownikiem. Często autor me- tody i jej użytkownik to ta sama osoba, ale nie musi tak być. Zdarza się, że jeden z programi- stów w zespole tworzy metodę, a inny jej używa. Dla programistów języka Java. Main() jest punktem startowym wszystkich progra- mów języka C#, co w pewien sposób przypomina metodę run() w apletach i meto- dę main() w programach w języku Java. Aby zadeklarować metodę, należy określić zwracany przez nią typ oraz podać jej nazwę. De- klaracje metod wymagają także nawiasów, niezależnie od tego, czy metoda przyjmuje para- metry. Na przykład wyrażenie: int myMethod(int size) to deklaracja metody o nazwie myMethod, która przyjmuje jeden parametr — liczbę całkowitą, która w metodzie jest dostępna jako size. Metoda zwraca liczbę całkowitą. Typ zwracanej wartości informuje użytkownika, jaki typ danych zwraca metoda po zakończeniu działania. 1 Teoretycznie możliwe jest umieszczenie w programie w języku C# wielu metod Main(). W takim przypadku należy użyć opcji /main wiersza poleceń i wybrać, która klasa zawierająca metodę Main() powinna służyć jako punkt startowy. 26 | Rozdział 2. Pierwszy program — „Witaj świecie”
  • 9. Niektóre metody nie zwracają żadnej wartości. Mówi się, że zwracają typ void, określany przez specjalne słowo kluczowe. Na przykład: void myVoidMethod(); to deklaracja metody zwracającej typ void i nieprzyjmującej parametrów. W języku C# zaw- sze trzeba pamiętać o określaniu zwracanego typu, nawet jeśli jest to void. Komentarze W programach C# mogą się znajdować komentarze. Na listingu 2.1 w pierwszym wierszu po początkowym nawiasie metody Main() znajduje się komentarz: // Używa konsoli systemowej Tekst rozpoczyna się od dwóch ukośników (//). Oznaczają one komentarz. Komentarz to no- tatka wpisana przez programistę, która nie wpływa na działanie programu. W języku C# moż- na używać trzech rodzajów komentarzy. Pierwszy rodzaj, przedstawiony powyżej, oznacza, że cały tekst od symboli (//) do końca wiersza jest traktowany jako komentarz. Jest to komentarz w stylu języka C++. Drugi rodzaj komentarzy, nazywany komentarzem w stylu języka C, rozpoczyna się od sym- boli (/*) i kończy parą znaków (*/). Pozwala to na dodania komentarza ciągnącego się przez kilka wierszy bez konieczności wpisywania w każdym wierszu symboli (//). Przykład zasto- sowania tego rodzaju komentarzy znajduje się na listingu 2.2. Listing 2.2. Przykład zastosowania komentarzy w stylu języka C namespace HalloWorld { class HelloWorld { static void Main() { /* Używa konsoli systemowej, jak jest to wyjaśnione w tekście */ System.Console.WriteLine("Witaj świecie"); } } } Choć zagnieżdżanie komentarzy języka C++ nie jest możliwe, można zagnieżdżać komenta- rze w stylu języka C++ w komentarzach w stylu języka C. Dlatego zwykle używa się komen- tarzy w stylu języka C++, a komentarze w stylu języka C służą głównie do „wykomentowa- nia” bloków kodu. Trzeci i ostatni rodzaj komentarzy obsługiwanych w języku C# służy do powiązania z kodem zewnętrznej dokumentacji opartej na XML, co opisuję w rozdziale 13. Aplikacje konsolowe „Witaj świecie” to przykład programu konsolowego. Aplikacja konsolowa zwykle nie ma gra- ficznego interfejsu użytkownika (ang. graphical user interface — GUI). Nie ma tam list rozwija- nych, przycisków ani okien. Dane wejściowe i wyjściowe przekazywane są przez standardo- wą konsolę — zwykle jest to wiersz poleceń systemu. Ograniczenie się na tym etapie książki Klasy, obiekty i typy | 27
  • 10. do aplikacji konsolowych pozwala uprościć przykłady i ułatwia przedstawienie podstawo- wych właściwości języka. W kolejnych rozdziałach częściej występują aplikacje okienkowe i internetowe, przy okazji których przedstawiam narzędzia środowiska Visual Studio .NET służące do projektowania GUI. Metoda Main() w prostym przykładzie przedstawionym na listingu 2.1 przekazuje tekst „Witaj świecie” do standardowego urządzenia wyjścia, którym najczęściej jest okno konsoli. Standardo- wym urządzeniem wyjścia zarządza obiekt zwany Console. Jedna z metod tego obiektu na- zywa się WriteLine(). Przyjmuje ona jako parametr łańcuch znaków, który następnie wyświe- tla w standardowym urządzeniu wyjścia. Kiedy program zostanie uruchomiony, na ekranie monitora pojawi się okno konsoli wiersza poleceń lub okno DOS-a z napisem „Witaj świecie”. Metody wywoływane są za pomocą operatora kropki (.). Dlatego aby wywołać metodę Wri- teLine() obiektu Console, należy napisać Console.WriteLine(…), podając w miejscu trzech kropek tekst, który ma zostać wyświetlony. Przestrzenie nazw Console to tylko jeden z wielu użytecznych typów wchodzących w skład biblioteki klas plat- formy .NET. Każda klasa nazywa się inaczej, dlatego FCL zawiera tysiące nazw, jak Array- List, Hashtable, FileDialog, DataException czy EventArgs. Istnieją setki, tysiące, a może nawet dziesiątki tysięcy nazw. Powoduje to pewne problemy. Żaden programista nie jest w stanie zapamiętać wszystkich nazw używanych przez platformę .NET, a wcześniej czy później może zdarzyć się, że pro- gramista stworzy obiekt i użyje dla niego nazwy, która jest już wykorzystywana przez inną jednostkę. Co się stanie, kiedy programista kupi klasę Hashtable i odkryje, że powoduje ona konflikt nazw z klasą Hashtable udostępnianą przez .NET? Należy pamiętać, że każda klasa w języku C# musi mieć niepowtarzalną nazwę, a zwykle nie jest możliwa zmiana nazw w za- kupionym kodzie. Rozwiązaniem tego problemu jest używanie przestrzeni nazw. Ograniczają one zasięg nazwy, w wyniku czego nazwa ma znaczenie tylko wewnątrz zdefiniowanej przestrzeni nazw. Dla programistów języka C++. Przestrzenie nazw w języku C++ są ograniczane opera- torem zakresu (::). W języku C# służy do tego operator kropki (.). Wskazówka dla programistów języka Java. Przestrzenie nazw mają wiele podobnych za- let co pakiety. Jacek jest inżynierem. Słowo „inżynier” może być związane z wieloma zawodami i wprowa- dzać niepewność. Czy Jacek projektuje budynki? A może opracowuje architekturę systemu operacyjnego? Można dookreślić to stwierdzenie mówiąc, że Jacek skończył Wyższą Szkołę Budownictwa lub pracuje przy komputerach. Programista języka C# mógłby powiedzieć, że Jacek to raczej system.inzynier niż budynki.inzynier. Przestrzeń nazw, w tym przypadku system lub budynki, ogranicza zasięg słowa występującego po operatorze kropki. Pozwala to utworzyć „przestrzeń”, w której nazwa ma określone znaczenie. Może się też okazać, że Jacek nie jest dowolnym system.inzynier. Możliwe, że specjalizuje się w tworzeniu architektury systemów Linux. Wtedy obiekt reprezentujący Jacka można 28 | Rozdział 2. Pierwszy program — „Witaj świecie”
  • 11. opisać bardziej szczegółowo jako system.linux.inzynier. Taka klasyfikacja sugeruje, że przestrzeń nazw linux ma znaczenie w obrębie przestrzeni nazw system, a inzynier w tym kontekście ma znaczenie w przestrzeni linux. Jeśli w przyszłości okaże się, że Krzysztof jest budynki.gospodarcze.inzynier, łatwo będzie się zorientować, jakim jest inżynierem i czym się zajmuje. Dwa wystąpienia nazwy inzynier mogą współistnieć dzięki temu, że każda na- zwa znajduje się we własnej przestrzeni. Podobnie, jeśli okaże się, że klasa Hashtable platformy .NET znajduje się w przestrzeni nazw System.Collections, a programista utworzył własną klasę Hashtable w przestrzeni ProgCSharp.DataStructures, nie spowoduje to konfliktu, ponieważ nazwa klasy występuje w dwóch różnych przestrzeniach nazw. Na listingu 2.1 fakt przynależności klasy Console do przestrzeni nazw System jest wyrażony za pomocą poniższego wiersza: System.Console.WriteLine(); Operator kropki (.) Na listingu 2.1 operator kropki (.) pozwala uzyskać dostęp do metody i danych klasy (w tym przypadku jest to metoda WriteLine()), a także do określenia przestrzeni nazw (w tym przy- padku do zaznaczenia, że klasa Console znajduje się w przestrzeni nazw System). Ten me- chanizm działa poprawnie, ponieważ w obu przypadkach kompilator przeszukuje podaną przestrzeń, aby znaleźć konkretną nazwę. Przeszukiwanie rozpoczyna się od przestrzeni nazw System, która zawiera wszystkie obiekty systemowe udostępniane przez FCL. Typ Console znajduje się właśnie w przestrzeni nazw System, a metoda WriteLine() jest funkcją składo- wą klasy Console. W wielu przypadkach przestrzenie nazw są podzielone na podprzestrzenie. Na przykład przestrzeń nazw System zawiera wiele podprzestrzeni, jak Data, Configuration czy Collec- tions. Z kolei sama przestrzeń nazw Collections zawiera wiele kolejnych podprzestrzeni. Przestrzenie nazw pomagają w organizacji i porównywaniu typów. Kiedy programista pisze złożoną aplikacją w języku C#, może chcieć stworzyć własną hierarchię przestrzeni nazw. Hierarchia ta może być dowolnie głęboka. Używanie przestrzeni nazw pomaga w podziale hierarchii obiektów i przezwyciężeniu jej złożoności. Słowo kluczowe using Zamiast pisać słowo System przed nazwą klasy Console, można określić, że w kodzie uży- wane będą nazwy z przestrzeni nazw System. Służy do tego dyrektywa using: using System; umieszczana na początku kodu, jak na listingu 2.3. Listing 2.3. Słowo kluczowe using using System; class Hello { static void Main() { Klasy, obiekty i typy | 29
  • 12. // Klasa Console z przestrzeni nazw System Console.WriteLine("Witaj świecie"); } } Warto zwrócić uwagę, że dyrektywa using znajduje się przed definicją klasy Hello. Domyśl- nie w środowisku Visual Studio .NET do każdej aplikacji konsolowej dodawane są trzy dy- rektywy using — System, System.Collections.Generics oraz System.Text. Choć można określić, że w programie używane są obiekty z przestrzeni nazw System, w od- różnieniu od niektórych języków nie można zrobić tego samego w przypadku obiektu Sys- tem.Console. Kod przedstawiony na listingu 2.4 nie skompiluje się. Listing 2.4. Niepoprawny kod w języku C# using System.Console; class Hello { static void Main() { // Konsola z przestrzeni nazw System WriteLine("Witaj świecie"); } } Próba kompilacji takiego kodu spowoduje wygenerowanie błędu: error CS0138: A using namespace directive can only be applied to namespaces; System.Console is a type not a namespace Użytkownicy Visual Studio będą wiedzieć, kiedy popełnili błąd, ponieważ po wpi- saniu using System i kropki środowisko wyświetla listę poprawnych przestrzeni nazw, a Console nie jest jedną z nich. Słowo kluczowe using pozwala oszczędzić wpisywania dużych ilości kodu, jednak zmniejsza korzyści używania przestrzeni nazw, zaśmiecając zasięg wieloma nieodróżnialnymi nazwa- mi. Często stosowanym rozwiązaniem jest używanie słowa kluczowego using, kiedy korzy- sta się z wbudowanych i własnych przestrzeni nazw, a unikanie tego w przypadku kompo- nentów dostarczanych przez innych producentów. Niektóre grupy programistyczne stosują politykę wpisywania długich nazw obiek- tów, wraz z przestrzeniami nazw (na przykład System.Console.WriteLine() zamiast Console.WriteLine()). Ma to służyć jako forma dokumentowania kodu. Jednak w przypadku wielokrotnie zagnieżdżonych przestrzeni nazw takie rozwiąza- nie może szybko stać się niewygodne. Wrażliwość na wielkość znaków W języku C# wielkość znaków ma znaczenie. Oznacza to, że writeLine to coś innego niż WriteLine, a jeszcze czymś innym jest WRITELINE. Niestety, w przeciwieństwie do VB, w śro- dowisku języka C# błędna wielkość liter nie jest automatycznie poprawiana. Błąd spowodo- wany przez napisanie tego samego słowa za pomocą liter o odmiennej wielkości może być trudny do wykrycia. 30 | Rozdział 2. Pierwszy program — „Witaj świecie”
  • 13. Użyteczną sztuczką jest umieszczenie kursora nad nazwą, w której jedynym błędem jest niepoprawna wielkość znaków, a następnie użycie kombinacji klawiszy Ctrl+Space. Mechanizm uzupełniania kodu Intellisense zmieni wtedy nazwę na poprawną. Aby zapobiec takim czasochłonnym i męczącym błędom, warto ustalić konwencję nazywania zmiennych, funkcji, stałych i innych elementów kodu. W tej książce do nazw zmiennych sto- suję notację wielbłądzią (na przykład jakasNazwaZmiennej), a do nazw funkcji, stałych i wła- ściwości używam notacji z języka Pascal (na przykład JakasFunkcja). Jedyna różnica między notacją wielbłądzią a notacją z języka Pascal polega na roz- poczynaniu nazw wielką literą w tym drugim przypadku. Microsoft udostępnia wskazówki dotyczące stylu kodowania, które są bardzo dobrym punktem wyjścia, a często w zupełności wystarczają do tworzenia czytelnego kodu. Można je znaleźć na stronie http://msdn.microsoft.com/library/default.asp?url=/library/ en-us/cpgenref/html/cpconNETFrameworkDesingGuidlines.asp. Słowo kluczowe static Przed metodą Main() przedstawioną na listingu 2.1 znajduje się modyfikator. Zaraz przed zwracanym typem void (co oznacza, że metoda nie zwraca żadnej wartości) znajduje się sło- wo kluczowe static: static void Main() Słowo kluczowe static informuje kompilator, że można wywołać metodę Main() bez ko- nieczności tworzenia obiektu typu Hello. To dość złożone zagadnienie opisuję bardziej szcze- gółowo w kolejnych rozdziałach. Jednym z problemów uczenia się nowego języka progra- mowania jest konieczność poznawania niektórych skomplikowanych mechanizmów, zanim możliwe jest ich pełne zrozumienie. Na razie można więc traktować deklarację metody Main() jako czystą magię. Tworzenie programu „Witaj świecie” Istnieją przynajmniej dwa sposoby pisania, kompilowania i uruchamiania programów przed- stawionych w tej książce. Można użyć zintegrowanego środowiska programowania (ang. In- tegrated Development Environment — IDE) Visual Studio .NET lub edytora tekstu i kompilato- ra uruchamianego z wiersza poleceń (wraz z pewnymi dodatkowymi narzędziami opisanymi w kolejnych rozdziałach). Choć możliwe jest tworzenie programów bez korzystania z Visual Studio .NET, używanie do- brego IDE związane jest z wieloma udogodnieniami. Są to między innymi automatyczne wci- nanie kodu, mechanizm uzupełniania słów Intellisense, kolorowanie składni czy integracja z systemem pomocy. Co najważniejsze, IDE zawiera wydajne mechanizmy do usuwania błę- dów i mnóstwo innych narzędzi. Zakładam po cichu, że Czytelnicy tej książki używają Visual Studio .NET. Jednak opis przy- kładowych programów kładzie większy nacisk na sam język i platformę niż na używane na- rzędzia. Można przepisać wszystkie przykłady korzystając z Notatnika lub Emacs, zapisać je Tworzenie programu „Witaj świecie” | 31
  • 14. z rozszerzeniem .cs i skompilować za pomocą kompilatora uruchamianego z wiersza poleceń, który udostępniany jest wraz z .NET Framework SDK. Można także użyć jednego ze zgod- nych z .NET narzędzi, jak Mono lub Microsoft Shared Source CLI. Warto zauważyć, że nie- które przykłady w późniejszych rozdziałach wymagają użycia narzędzi Visual Studio .NET do tworzenia formularzy Windows i Web, jednak zdeterminowani programiści mogą nawet te przykłady wpisać samodzielnie, korzystając z Notatnika. Pisanie kodu „Witaj świecie” Aby utworzyć program „Witaj świecie” w środowisku IDE, należy wybrać Visual Studio .NET z menu Start lub kliknąć ikonę na pulpicie, a następnie wybrać z menu paska narzędzi File→New→Project. Spowoduje to otwarcie okna New Project. Przy pierwszym użyciu Visual Studio okno New Project może pojawić się bez dalszych zapytań. Okno New Project przedsta- wione jest na rysunku 2.1. Rysunek 2.1. Tworzenie aplikacji konsolowej w środowisku Visual Studio .NET Aby utworzyć aplikację, należy zaznaczyć Visual C# w oknie Project Types, a następnie wy- brać opcję Console Application w oknie Templates. W środowisku Express Edition języka Visual C# wystarczy wybrać opcję Console Application. Następnie można podać nazwę projektu i wybrać katalog, w którym przechowywane będą pliki. Potem wystarczy kliknąć przycisk OK i pojawi się nowe okno, w którym można wpisać kod z listingu 2.1, co pokazane jest na rysunku 2.2. Warto zwrócić uwagę, że Visual Studio .NET automatycznie tworzy przestrzeń nazw we- dług nazwy projektu (w tym przypadku jest to HelloWorld), a także dodaje dyrektywy using 32 | Rozdział 2. Pierwszy program — „Witaj świecie”
  • 15. Rysunek 2.2. Edytor przygotowany do pracy z nowym projektem przestrzeni nazw System, System.Collections.Generic i System.Text, ponieważ potrzebu- je ich prawie każdy program. Visual Studio .NET tworzy klasę o nazwie Program, którą programista może nazwać w inny sposób. Przy zmianie nazwy klasy warto zmienić również nazwę pliku. Przy zmianie nazwy pliku środowisko Visual Studio automatycznie zmienia nazwę klasy. Aby odtworzyć kod z listingu 2.1, można na przykład zmienić nazwę pliku Program.cs (znajduje się ona w oknie Solution Explorer) na hello.cs a nazwę klasy Program na HelloWorld. Jeśli wykona się te czynno- ści w odwrotnej kolejności, Visual Studio automatycznie zmieni nazwę klasy na Hello. Visual Studio tworzy szkielet programu. Aby napisać program z listingu 2.1, należy usunąć argumenty (string[] args) metody Main(), a następnie wpisać w ciele tej metody dwa po- niższe wiersze kodu: // Używa konsoli systemowej System.Console.WriteLine("Witaj świecie"); Można też napisać kod, nie używając środowiska Visual Studio. W tym celu należy otworzyć Notatnik lub inny edytor tekstu, wpisać kod z listingu 2.1, zapisać plik jako tekstowy i nadać mu nazwę hello.cs. Tworzenie programu „Witaj świecie” | 33
  • 16. Kompilacja i uruchamianie „Witaj świecie” W Visual Studio istnieje wiele sposobów na skompilowanie i uruchomienie programu „Witaj świecie”. Zwykle robi się to za pomocą poleceń z menu na pasku narzędzi, przycisków lub, w wielu przypadkach, używając klawiszy skrótu. Klawisze skrótu można ustawić wybierając opcję Tools→Options→Keyboard. W książ- ce przedstawiam najpopularniejsze domyślne klawisze skrótu. Na przykład, aby skompilować program „Witaj świecie”, należy przycisnąć kombinację kla- wiszy Ctrl+Shift+B lub wybrać opcję Build→Build Solution. Jeszcze inne rozwiązanie to kliknię- cie przycisku Build na pasku narzędzi Build. Jeśli pasek ten nie jest widoczny, należy kliknąć prawym przyciskiem myszy na pasku narzędzi i uaktywnić go. Pasek narzędzi Build przed- stawiony jest na rysunku 2.3. Przycisk Build znajduje się po lewej stronie i jest zaznaczony na rysunku. Rysunek 2.3. Pasek narzędzi Build Aby uruchomić program „Witaj świecie” w trybie bez usuwania błędów, należy przycisnąć kombinację klawiszy Ctrl+F5, wybrać opcję Debug→Start Without Debugging z menu IDE z paska narzędzi lub kliknąć przycisk Start Without Debugging na pasku narzędzi IDE Build. Ta ostatnia możliwość przedstawiona jest na rysunku 2.4. Jeśli przycisk ten nie jest widoczny, należy zmienić ustawienia paska narzędzi. Możliwe jest uruchomienie programu bez wcze- śniejszej jego budowy. Ustawienia opcji (można je zmienić, wybierając Tools→Options) mogą spowodować, że IDE zapisze plik, zbuduje program, a następnie uruchomi go, zapewne py- tając o pozwolenie wykonania każdej kolejnej czynności. Rysunek 2.4. Przycisk Start Without Debugging Gorąco zalecam zapoznanie się ze środowiskiem Visual Studio 2005. Jest to podsta- wowe narzędzie programisty tworzącego aplikację na platformę .NET i warto dobrze poznać jego działanie. Czas poświęcony na zapoznanie się ze środowiskiem Visual Studio zwróci się wielokrotnie w trakcie kolejnych miesięcy programowania. Propo- nuję odłożyć na chwilę książkę i przyjrzeć się dobrze środowisku. Aby skompilować i uruchomić program „Witaj świecie” używając kompilatora C# uruchamia- nego z wiersza poleceń, udostępnianego wraz z .NET Framework SDK, z Mono (http://www. mono-project.com) lub z Shared Source CLI (http://msdn.microsoft.com/net/sscli/), należy wykonać następujące czynności: 34 | Rozdział 2. Pierwszy program — „Witaj świecie”
  • 17. 1. Zapisać kod z listingu 2.1 w pliku hello.cs. 2. Otworzyć okno poleceń platformy .NET (Start→Programs→Visual Studio .NET→Visual Studio Tools→Visual Studio Command Prompt). Użytkownicy systemu Unix powinni uru- chomić konsolę, xterm lub inne narzędzie umożliwiające wpisywanie poleceń powłoki. 3. W wierszu poleceń należy wpisać: csc /debug hello.cs jeśli używa się kompilatora z .NET lub z Shared Source CLI, albo: mcs –debug hello.cs jeśli używa się kompilatora z Mono. Powoduje to utworzenie pliku .EXE. Jeśli program zawiera błędy, kompilator wyświetli je. Opcja wiersza poleceń /debug powoduje umiesz- czenie w kodzie symboli, które umożliwiają uruchomienie pliku o rozszerzeniu EXE w programie uruchomieniowym lub zobaczenie numerów wierszy kodu w czasie pod- glądania stosu. Obraz stosu zostanie wyświetlony, jeśli program wygeneruje nieobsługi- wany błąd. 4. Aby uruchomić program, należy wpisać: hello jeśli używa się kompilatora z .NET, lub: clix hello.exe jeśli używa się kompilatora z Shared Source CLI, a: mono hello.exe w przypadku korzystania z kompilatora z Mono. W oknie powinien pojawić się wtedy napis „Witaj świecie”. Kompilacja JIT W trakcie kompilacji hello.cs za pomocą polecenia csc powstaje plik wykonywalny. Należy jednak pamiętać, że zawiera on kod w języku MSIL, opisanym w rozdziale 1. Co ciekawe, kiedy napisze się aplikację w języku VB.NET lub w dowolnym języku zgodnym systemem .NET CLS, zostanie ona skompilowana do bardzo podobnego kodu w języku MSIL. Kod IL utworzony na podstawie kodu pisanego w różnych językach jest praktycznie nieroz- różnialny. Oprócz tworzenia kodu IL, który jest podobny do kodu bajtowego języka Java, kompilator tworzy w pliku o rozszerzeniu .EXE segment tylko do odczytu, w którym znajduje się stan- dardowy nagłówek plików wykonywalnych systemu Win32. W tym segmencie kompilator określa punkt startowy, do którego w momencie uruchamiania programu przechodzi program ładujący systemu operacyjnego. System operacyjny nie potrafi jednak wykonać kodu IL, dlatego punkt startowy prowadzi do uruchomienia kompilatora JIT platformy .NET (kompilator ten został opisany w rozdziale 1.). W wyniku kompilacji JIT powstaje kod maszynowy procesora, taki sam, jak w zwykłych pli- kach wykonywalnych. Kluczową cechą kompilacji JIT jest to, że funkcje kompilowane są je- dynie wtedy, kiedy są używane, bezpośrednio przed ich wykonaniem. Tworzenie programu „Witaj świecie” | 35
  • 18. Usuwanie błędów w Visual Studio .NET Najważniejszym elementem każdego środowiska programistycznego jest program urucho- mieniowy. Narzędzie udostępniane w Visual Studio jest bardzo wydajne i czas poświęcony na jego dobre poznanie na pewno nie będzie stracony. Podstawy używania programu urucho- mieniowego są bardzo proste. Wystarczy nauczyć się wykonywać trzy kluczowe czynności: • ustawianie punktów przerwania i wykonywanie programów do danego punktu, • wkraczanie w ciało metody i przeskakiwanie nad wywołaniami metod, • sprawdzanie i zmiana wartości zmiennych, danych składowych i innych wartości. Ten rozdział nie obejmuje całej dokumentacji programu uruchomieniowego, ale wymienione powyżej czynności są tak istotne, że z pewnością wystarczą do rozpoczęcia pracy. Program uruchomieniowy umożliwia dostęp do tych samych operacji na różne sposoby, zwy- kle przez opcje menu i przyciski. Najłatwiejszy sposób na ustawienie punktu przerwania to kliknięcie na lewym marginesie. Środowisko IDE zaznacza punkty przerwania jako czerwone kropki, jak przedstawione to jest na rysunku 2.5. Rysunek 2.5. Punkt przerwania Analiza działania programu uruchomieniowego wymaga przykładowego kodu. W tym punkcie używam fragmentów kodu z rozdziału 5., który na razie może być niezrozumiały. Czytelnicy znający język C++ lub Java powinni jednak rozumieć jego znaczenie. Aby uruchomić program uruchomieniowy, należy wybrać opcję Debug→Start lub przycisnąć klawisz F5. Program zostanie wtedy skompilowany, a następnie wykonany do punktu prze- rwania. W tym momencie wykonywanie zatrzyma się, a żółta strzałka wskaże instrukcję, któ- ra powinna zostać wykonana jako kolejna, co pokazane jest na rysunku 2.6. Rysunek 2.6. Dojście do punktu wstrzymania Po dojściu do punktu wstrzymania łatwo jest sprawdzić wartości poszczególnych obiektów. Na przykład można sprawdzić wartość zmiennej i umieszczając nad nią kursor i odczekując chwilę. Pojawi się wtedy lista taka jak na rysunku 2.7. 36 | Rozdział 2. Pierwszy program — „Witaj świecie”
  • 19. Rysunek 2.7. Sprawdzanie wartości Środowisko programu uruchomieniowego udostępnia także liczne użyteczne okna, jak okno Locals wyświetlające wartości wszystkich zmiennych lokalnych (patrz rysunek 2.8). Rysunek 2.8. Okno Locals W przypadku zmiennych należących do typów wbudowanych, na przykład liczb całkowi- tych, wyświetlana jest ich wartość. Obiekty złożonych typów posiadają przy sobie znak plus (+). Można je rozwinąć, jak widać na rysunku 2.9. Więcej informacji o obiektach i ich danych znajduje się w kolejnych rozdziałach. Rysunek 2.9. Obiekt rozwinięty w oknie Locals Można wkroczyć w ciało kolejnej metody przyciskając klawisz F11. W tym przypadku spo- woduje to wejście w ciało metody DrawWindow() klasy Window, co przedstawione jest na ry- sunku 2.10. Można zobaczyć, że kolejną instrukcją jest teraz WriteLine() w metodzie DrawWindow(). Okno Autos zostało uaktualnione i przedstawia aktualny stan obiektów. Oczywiście to nie wszystkie możliwości programu uruchomieniowego, jednak materiał przed- stawiony w tym rozdziale pozwala na rozpoczęcie pracy z tym narzędziem. Pisanie krótkich programów demonstracyjnych i sprawdzanie ich działania za pomocą programu uruchomie- niowego pozwala udzielić odpowiedzi na wiele pytań programistycznych. Dobry program uru- chomieniowy jest, w pewnym sensie, najbardziej istotnym narzędziem języka programowania. Usuwanie błędów w Visual Studio .NET | 37
  • 20. Rysunek 2.10. Wkraczanie w ciało metody 38 | Rozdział 2. Pierwszy program — „Witaj świecie”