Click here to load reader

Wszelkie prawa zastrze - pdf.helion.pl · Rozdzia 5. Jzyk C#. Pozostae zagadnienia 5.1. Wywoywanie funkcji przez PInvoke PInvoke to skrót od Platform Invocation Services.Usugi te

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

  • Wszelkie prawa zastrzeżone. Nieautoryzowane rozpowszechnianie całości lub fragmentu niniejszej publikacji w jakiejkolwiek postaci jest zabronione. Wykonywanie kopii metodą kserograficzną, fotograficzną, a także kopiowanie książki na nośniku filmowym, magnetycznym lub innym powoduje naruszenie praw autorskich niniejszej publikacji.

    Wszystkie znaki występujące w tekście są zastrzeżonymi znakami firmowymi bądź towarowymi ich właścicieli.

    Autor oraz Wydawnictwo HELION dołożyli wszelkich starań, by zawarte w tej książce informacje były kompletne i rzetelne. Nie biorą jednak żadnej odpowiedzialności ani za ich wykorzystanie, ani za związane z tym ewentualne naruszenie praw patentowych lub autorskich. Autor oraz Wydawnictwo HELION nie ponoszą również żadnej odpowiedzialności za ewentualne szkody wynikłe z wykorzystania informacji zawartych w książce.

    Redaktor prowadzący: Michał Mrowiec

    Projekt okładki: Studio Gravite / OlsztynObarek, Pokoński, Pazdrijowski, Zaprucki

    Fotografia na okładce została wykorzystana za zgodą Shutterstock.com

    Wydawnictwo HELION ul. Kościuszki 1c, 44-100 GLIWICE tel. 32 231 22 19, 32 230 98 63 e-mail: [email protected] WWW: http://helion.pl (księgarnia internetowa, katalog książek)

    Drogi Czytelniku! Jeżeli chcesz ocenić tę książkę, zajrzyj pod adres http://helion.pl/user/opinie?vs12pcMożesz tam wpisać swoje uwagi, spostrzeżenia, recenzję.

    ISBN: 978-83-246-6562-4

    Copyright © Helion 2013

    Printed in Poland.

    • Kup książkę• Poleć książkę • Oceń książkę

    • Księgarnia internetowa• Lubię to! » Nasza społeczność

    http://helion.pl/rt/vs12pchttp://helion.pl/rf/vs12pchttp://helion.pl/ro/vs12pchttp://helion.plhttp://ebookpoint.pl/r/4CAKF

  • Spis tre�ci

    Rozdzia� 1. Wst�p .............................................................................................. 91.1. O j�zyku C# i platformie .NET .................................................................................. 91.2. Podstawowe poj�cia .................................................................................................. 91.3. Potrzebne narz�dzia ................................................................................................. 10

    Rozdzia� 2. Microsoft Visual Studio 2012 ......................................................... 112.1. Co nowego? ............................................................................................................. 122.2. Instalacja .................................................................................................................. 122.3. Konfiguracja ............................................................................................................ 14

    Pasek obs�ugi odpluskwiania ................................................................................... 14Numerowanie wierszy ............................................................................................. 14

    2.4. Tworzenie nowego projektu .................................................................................... 152.5. Kompilacja i uruchamianie ...................................................................................... 152.6. Odpluskwianie (ang. Debugging) ............................................................................ 15

    B��dy procesu kompilacji ........................................................................................ 15B��dy pokompilacyjne ............................................................................................. 16

    2.7. Okna, menu i paski narz�dzi .................................................................................... 16Okna ........................................................................................................................ 16Górne menu ............................................................................................................. 16Paski narz�dzi .......................................................................................................... 17

    2.8. Sk�adniki pakietu ..................................................................................................... 172.9. Projektowanie diagramów UML .............................................................................. 18

    Rozdzia� 3. J�zyk C#. Podstawy ....................................................................... 193.1. Struktura kodu �ród�owego ...................................................................................... 193.2. Komentarze .............................................................................................................. 20

    Komentarz blokowy ................................................................................................ 20Komentarz liniowy .................................................................................................. 20Komentarz XML ..................................................................................................... 20

    3.3. Program „Witaj, �wiecie!” ....................................................................................... 213.4. Typy danych ............................................................................................................ 21

    Typy proste .............................................................................................................. 21Typy referencyjne .................................................................................................... 22Typ strukturalny ...................................................................................................... 24Typ wyliczeniowy ................................................................................................... 24Rzutowanie i konwersja typów ................................................................................ 24

    3.5. Proste operacje wej�cia/wyj�cia ............................................................................... 25

    Poleć książkęKup książkę

    http://helion.pl/rf/vs12pchttp://helion.pl/rt/vs12pc

  • 4 Microsoft Visual Studio 2012. Programowanie w C#

    Wy�wietlanie danych ............................................................................................... 25Pobieranie danych ................................................................................................... 26

    3.6. Preprocesor .............................................................................................................. 26Dyrektywa #if .......................................................................................................... 26Dyrektywa #else ...................................................................................................... 27Dyrektywa #elif ....................................................................................................... 27Dyrektywa #endif .................................................................................................... 27Dyrektywa #define .................................................................................................. 27Dyrektywa #undef ................................................................................................... 28Dyrektywa #warning ............................................................................................... 28Dyrektywa #error ..................................................................................................... 28Dyrektywa #line ...................................................................................................... 28Dyrektywa #region .................................................................................................. 29Dyrektywa #endregion ............................................................................................ 29Dyrektywa #pragma warning .................................................................................. 29

    3.7. Zmienne i sta�e ........................................................................................................ 303.8. Stos i sterta .............................................................................................................. 31

    Wydajno�� ............................................................................................................... 313.9. Instrukcja warunkowa if .......................................................................................... 32

    3.10. Instrukcja wyboru switch ......................................................................................... 343.11. Operatory ................................................................................................................. 35

    Podstawowe ............................................................................................................. 36Jednoargumentowe .................................................................................................. 38Mno�enie, dzielenie i modulo .................................................................................. 40Przesuni�cia ............................................................................................................. 40Relacje i sprawdzanie typów ................................................................................... 41Równo�� i ró�no�� ................................................................................................... 42Koniunkcja logiczna ................................................................................................ 42Alternatywa wykluczaj�ca logiczna ........................................................................ 42Alternatywa logiczna ............................................................................................... 42Koniunkcja warunkowa ........................................................................................... 43Alternatywa warunkowa .......................................................................................... 43Operator warunkowy ............................................................................................... 43Przypisania .............................................................................................................. 43

    3.12. P�tle ......................................................................................................................... 45P�tla do-while .......................................................................................................... 45P�tla for ................................................................................................................... 45P�tla foreach ............................................................................................................ 48P�tla while ............................................................................................................... 49Kontrola przep�ywu ................................................................................................. 49

    3.13. Argumenty wiersza polece ..................................................................................... 523.14. Metody ..................................................................................................................... 53

    Deklaracja metod ..................................................................................................... 53Przekazywanie przez referencj� lub przez warto�� .................................................. 54

    3.15. Tablice ..................................................................................................................... 55Przekazywanie tablic jako argumentów metod ........................................................ 56Klasa System.Array ................................................................................................. 57

    3.16. Wska�niki ................................................................................................................ 60Kod nienadzorowany (ang. unsafe code) ................................................................. 60Typy wska�nikowe .................................................................................................. 61

    Poleć książkęKup książkę

    http://helion.pl/rf/vs12pchttp://helion.pl/rt/vs12pc

  • Spis tre�ci 5

    Rozdzia� 4. J�zyk C#. Programowanie obiektowe .............................................. 634.1. Klasy i obiekty ......................................................................................................... 63

    S�owo kluczowe this ................................................................................................ 654.2. Konstruktor i destruktor ........................................................................................... 664.3. Dziedziczenie .......................................................................................................... 67

    Klasy zagnie�d�one ................................................................................................. 684.4. Modyfikatory dost�pu .............................................................................................. 69

    S�owo kluczowe readonly ........................................................................................ 70Pola powinny by� prywatne ..................................................................................... 70

    4.5. Wczesne i pó�ne wi�zanie ....................................................................................... 71Wczesne wi�zanie vs pó�ne wi�zanie ...................................................................... 71Opakowywanie zmiennych ...................................................................................... 72

    4.6. Przeci��anie metod .................................................................................................. 724.7. Przeci��anie operatorów .......................................................................................... 73

    S�owa kluczowe implicit i explicit ........................................................................... 754.8. Statyczne metody i pola ........................................................................................... 764.9. Klasy abstrakcyjne i zapiecz�towane ....................................................................... 77

    4.10. Serializacja ............................................................................................................... 78U�yteczno�� serializacji .......................................................................................... 79Zapis obiektu do pliku XML ................................................................................... 79Odczyt obiektu z pliku XML ................................................................................... 79

    4.11. Przestrzenie nazw .................................................................................................... 804.12. W�a�ciwo�ci ............................................................................................................. 824.13. Interfejsy .................................................................................................................. 83

    P�ytka i g��boka kopia obiektu ................................................................................ 844.14. Indeksery ................................................................................................................. 864.15. Polimorfizm ............................................................................................................. 88

    Sk�adowe wirtualne ................................................................................................. 91Ukrywanie sk�adowych klasy bazowej .................................................................... 92Zapobieganie przes�anianiu wirtualnych sk�adowych klasy pochodnej ................... 92Dost�p do wirtualnych sk�adowych klasy bazowej z klas pochodnych ................... 93Przes�anianie metody ToString() ............................................................................. 94

    4.16. Delegaty ................................................................................................................... 94Metody anonimowe ................................................................................................. 95Wyra�enia lambda ................................................................................................... 96Delegat Func ............................................................................................................ 97

    4.17. Zdarzenia ................................................................................................................. 984.18. Metody rozszerzaj�ce .............................................................................................. 984.19. Kolekcje ................................................................................................................... 99

    Wybieranie klasy kolekcji ..................................................................................... 100Klasa Queue .......................................................................................................... 101Klasa Stack ............................................................................................................ 102Klasa ArrayList ..................................................................................................... 103Klasa StringCollection ........................................................................................... 103Klasa Hashtable ..................................................................................................... 104Klasa SortedList .................................................................................................... 105Klasa ListDictionary .............................................................................................. 105Klasa StringDictionary .......................................................................................... 106Klasa NameObjectCollectionBase ......................................................................... 107Klasa NameValueCollection ................................................................................. 110

    4.20. Typy generyczne .................................................................................................... 111Klasa generyczna Queue ....................................................................................... 112Klasa generyczna Stack ......................................................................................... 113Klasa generyczna LinkedList ................................................................................ 114

    Poleć książkęKup książkę

    http://helion.pl/rf/vs12pchttp://helion.pl/rt/vs12pc

  • 6 Microsoft Visual Studio 2012. Programowanie w C#

    Klasa generyczna List ............................................................................................ 115Klasa generyczna Dictionary ................................................................................. 116Klasa generyczna SortedDictionary ....................................................................... 118Klasa generyczna KeyedCollection ....................................................................... 120Klasa generyczna SortedList ................................................................................. 123

    4.21. Kontra i kowariancja .............................................................................................. 125

    Rozdzia� 5. J�zyk C#. Pozosta�e zagadnienia ................................................... 1275.1. Wywo�ywanie funkcji przez PInvoke .................................................................... 1275.2. Napisy (ang. Strings) ............................................................................................. 129

    Deklaracja i inicjalizacja ....................................................................................... 129Niezmienno�� obiektów String .............................................................................. 130Znaki specjalne ...................................................................................................... 130Formatowanie napisów .......................................................................................... 130Napisy cz��ciowe .................................................................................................. 131Dost�p do pojedynczych znaków .......................................................................... 132Najwa�niejsze metody klasy String ....................................................................... 132

    5.3. Arytmetyka du�ych liczb ....................................................................................... 1325.4. Arytmetyka liczb zespolonych ............................................................................... 1345.5. System plików i rejestr .......................................................................................... 134

    Pliki i katalogi ....................................................................................................... 135Strumienie ............................................................................................................. 137Czytelnicy i pisarze ............................................................................................... 138Asynchroniczne operacje wej�cia/wyj�cia ............................................................. 139Kompresja ............................................................................................................. 139Rejestr .................................................................................................................... 140

    5.6. Tworzenie bibliotek ............................................................................................... 1415.7. Procesy i w�tki ...................................................................................................... 142

    Procesy .................................................................................................................. 142W�tki ..................................................................................................................... 143

    5.8. Obs�uga b��dów ..................................................................................................... 146Podsumowanie ....................................................................................................... 147

    Rozdzia� 6. Tworzenie interfejsu graficznego aplikacji ...................................... 1496.1. Projektowanie interfejsu graficznego .................................................................... 1496.2. Wej�cie klawiatury ................................................................................................ 1506.3. Wej�cie myszy ....................................................................................................... 1516.4. Symulowanie klawiatury i myszy .......................................................................... 151

    Symulowanie klawiatury ....................................................................................... 152Symulowanie myszy .............................................................................................. 152

    6.5. Przeci�gnij i upu�� ................................................................................................. 1536.6. Przegl�d wybranych kontrolek .............................................................................. 1536.7. Wst�p do Windows Presentation Foundation ........................................................ 155

    Tworzenie projektu WPF ....................................................................................... 155Przyk�ad: „Witaj, �wiecie WPF!” .......................................................................... 156

    Rozdzia� 7. Podstawy programowania sieciowego ........................................... 1597.1. System DNS .......................................................................................................... 1597.2. Wysy�anie wiadomo�ci e-mail ............................................................................... 1607.3. Protokó� FTP ......................................................................................................... 161

    Przyk�ad: Jak wys�a� plik na serwer FTP? ............................................................. 1617.4. Gniazda (ang. Sockets) .......................................................................................... 161

    Poleć książkęKup książkę

    http://helion.pl/rf/vs12pchttp://helion.pl/rt/vs12pc

  • Spis tre�ci 7

    Rozdzia� 8. Asembler IL .................................................................................. 1658.1. Co to jest? .............................................................................................................. 1658.2. Program „Witaj, �wiecie!” ..................................................................................... 1658.3. Kompilacja i uruchamianie .................................................................................... 1668.4. Zmienne lokalne .................................................................................................... 1668.5. Metody ................................................................................................................... 1678.6. Rozga��zienia ........................................................................................................ 1698.7. P�tle ....................................................................................................................... 1708.8. Przegl�d wybranych instrukcji ............................................................................... 171

    Instrukcje odk�adaj�ce warto�� na stos .................................................................. 171Instrukcje zdejmuj�ce warto�� ze stosu ................................................................. 172Instrukcje rozga��zie ............................................................................................ 172Instrukcje arytmetyczne ......................................................................................... 173Pozosta�e instrukcje ............................................................................................... 173

    Rozdzia� 9. Podstawy tworzenia aplikacji w stylu Metro dla Windows 8 ........... 1759.1. Co to s� aplikacje Metro? ...................................................................................... 1759.2. Potrzebne narz�dzia ............................................................................................... 1769.3. Uzyskiwanie licencji dewelopera .......................................................................... 1769.4. Program „Witaj, �wiecie Metro!” .......................................................................... 177

    Tworzenie nowego projektu .................................................................................. 177Zmodyfikuj stron� startow� ................................................................................... 177Dodaj obs�ug� zdarze ........................................................................................... 178Uruchom aplikacj� ................................................................................................. 178

    9.5. Przegl�d wybranych kontrolek .............................................................................. 178App bar .................................................................................................................. 178Button .................................................................................................................... 178Check box .............................................................................................................. 179Combo box ............................................................................................................ 179Grid view ............................................................................................................... 179Hyperlink ............................................................................................................... 179List box .................................................................................................................. 180List view ................................................................................................................ 180Password box ......................................................................................................... 181Progress bar ........................................................................................................... 181Progress ring .......................................................................................................... 181Radio button .......................................................................................................... 181Slider ..................................................................................................................... 182Text block .............................................................................................................. 182Text box ................................................................................................................. 182Toggle switch ........................................................................................................ 182Tooltip ................................................................................................................... 183

    Dodatek A S�owa kluczowe j�zyka C# .............................................................. 185

    Dodatek B Zestaw instrukcji Asemblera IL .................................................... 187Operacje arytmetyczne ................................................................................................. 187

    Dodawanie ............................................................................................................. 187Odejmowanie ......................................................................................................... 187Mno�enie ............................................................................................................... 187Dzielenie ................................................................................................................ 188Modulo .................................................................................................................. 188Warto�� negatywna ............................................................................................... 188

    Operacje bitowe ............................................................................................................ 188Koniunkcja ............................................................................................................ 188

    Poleć książkęKup książkę

    http://helion.pl/rf/vs12pchttp://helion.pl/rt/vs12pc

  • 8 Microsoft Visual Studio 2012. Programowanie w C#

    Alternatywa ........................................................................................................... 188Negacja .................................................................................................................. 188Alternatywa wykluczaj�ca ..................................................................................... 188Przesuni�cie bitowe w prawo ................................................................................ 188Przesuni�cie bitowe w lewo ................................................................................... 188

    Operacje odk�adania na stos ......................................................................................... 189Operacje zdejmowania ze stosu i zapisywania ............................................................. 190Konwersje ..................................................................................................................... 191Porównywanie .............................................................................................................. 191Skoki bezwarunkowe .................................................................................................... 192Skoki warunkowe ......................................................................................................... 192Wywo�ywanie metod i powrót ...................................................................................... 192Opakowywanie ............................................................................................................. 192Wyj�tki ......................................................................................................................... 193Bloki pami�ci ............................................................................................................... 193Wska�niki ..................................................................................................................... 193Pozosta�e ....................................................................................................................... 193

    Skorowidz ................................................................................... 195

    Poleć książkęKup książkę

    http://helion.pl/rf/vs12pchttp://helion.pl/rt/vs12pc

  • Rozdzia� 5.

    J�zyk C#. Pozosta�ezagadnienia

    5.1. Wywo�ywanie funkcjiprzez PInvoke

    PInvoke to skrót od Platform Invocation Services. Us�ugi te pozwalaj� z zarz�dzane-go kodu wywo�ywa� niezarz�dzane funkcje zaimplementowane w bibliotece DLL.PInvoke polega na metadanych, aby zlokalizowa� eksportowane funkcje i uporz�d-kowa� ich argumenty w czasie dzia�ania programu. Proces ten zosta� przedstawionyna rysunku 5.1.

    Rysunek 5.1. Wywo�ywanie funkcji poprzez PInvoke

    Proces ten mo�na te� scharakteryzowa� nast�puj�c� list� kroków:

    1. Zlokalizowanie biblioteki DLL, która zawiera funkcj� do wywo�ania.

    2. Za�adowanie biblioteki DLL do pami�ci.

    Poleć książkęKup książkę

    http://helion.pl/rf/vs12pchttp://helion.pl/rt/vs12pc

  • 128 Microsoft Visual Studio 2012. Programowanie w C#

    3. Zlokalizowanie adresu funkcji w pami�ci i od�o�enie jej argumentów na stos,a tak�e porz�dkowanie ich, gdy zachodzi taka potrzeba.

    4. Przekazanie kontroli do funkcji niezarz�dzanej.

    Lokalizowanie i �adowanie biblioteki DLL do pami�ci oraz lokalizowanie adresufunkcji nast�puje tylko przy jej pierwszym wywo�aniu.

    PInvoke rzuca wyj�tki (spowodowane przez niezarz�dzane funkcje) do wywo�uj�cegozarz�dzanego.

    Aby zadeklarowa� metod�, której implementacj� eksportuje biblioteka DLL, wykonajnast�puj�ce kroki:

    � Zadeklaruj metod� ze s�owami kluczowymi static i extern.

    � Za��cz atrybut DllImport do metody. Atrybut ten pozwala okre�li� nazw�biblioteki DLL zawieraj�cej metod�. Jest taki zwyczaj, �e metod� w kodzie C#nazywa si� tak samo jak metod� eksportowan�, mo�na jednak da� jej równie�inn� nazw�.

    � Opcjonalnie okre�l informacje porz�dkuj�ce dla parametrów metody i warto�cizwracanej.

    Poni�szy przyk�ad prezentuje, jak u�y� atrybutu DllImport do wy�wietlenia wiado-mo�ci poprzez wywo�anie metody puts z biblioteki msvcrt.dll.

    using System;using System.Runtime.InteropServices;

    class Program{ [DllImport("msvcrt.dll")] //zaimportowanie biblioteki DLL public static extern int puts(string c); //deklaracja funkcji z biblioteki [DllImport("msvcrt.dll")] //zaimportowanie biblioteki DLL internal static extern int _flushall(); //deklaracja funkcji z biblioteki static void Main() { puts("Witaj!"); //Wypisze na konsoli napis: Witaj! _flushall(); }}

    By� mo�e teraz w Twojej g�owie pojawi�o si� pytanie, sk�d bra� sygnatury, które po-jawi�y si� w powy�szym kodzie? Polecam Ci serwis http://www.pinvoke.net/. Jest tambardzo du�o materia�ów o us�ugach PInvoke oraz sygnatury pogrupowane wed�ug nazwbibliotek.

    Poleć książkęKup książkę

    http://helion.pl/rf/vs12pchttp://helion.pl/rt/vs12pc

  • Rozdzia� 5. � J�zyk C#. Pozosta�e zagadnienia 129

    5.2. Napisy (ang. Strings)Napis jest obiektem typu String, którego warto�ci� jest tekst. Patrz�c od wn�trza,mogliby�my zobaczy�, �e tekst w napisie jest przechowywany jako kolekcja obiektówtypu Char (kolekcja tylko do odczytu). W j�zyku C# napis nie koczy si� znakiem ze-rowym. W�a�ciwo�� Length napisu reprezentuje liczb� obiektów Char, które zawiera,a nie liczb� znaków Unicode.

    S�owo kluczowe string jest aliasem dla klasy System.String. Wynika z tego, �estring i String s� swoimi odpowiednikami i mo�esz u�ywa� takiej nazwy, jak� pre-ferujesz. Klasa String dostarcza wiele metod do bezpiecznego tworzenia, porówny-wania oraz do innych czynno�ci, jakie mo�na wykona� na napisie. Dodatkowo j�zyk C#przeci��a niektóre operatory, aby mo�na by�o ich u�y� do ró�nych operacji na napisach.

    Deklaracja i inicjalizacja

    Zadeklarowa� i zainicjalizowa� napis mo�na na ró�ne sposoby://deklaracja bez inicjalizacjistring message1;

    //inicjalizacja za pomoc� warto�ci nullstring message2 = null;

    //inicjalizacja napisu jako pustegostring message3 = System.String.Empty;

    //inicjalizacja napisu zwyk�ym tekstemstring oldPath = "c:\\Program Files\\Microsoft Visual Studio 8.0";

    //inicjalizacja napisu sta�� napisow� (zauwa� znak @ przed napisem)string newPath = @"c:\Program Files\Microsoft Visual Studio 9.0";

    //mo�na u�y� pe�nej nazwy, czyli System.String zamiast StringSystem.String greeting = "Hello World!";

    //zmienna lokalna (np. wewn�trz metody)var temp = "Nadal jestem silnie typowanym napisem!";

    //napis, w którym nie mo�na przechowa� innego tekstuconst string message4 = "Nie mo�na si� mnie pozby�!";

    //U�ywaj konstruktora String tylko wtedy, gdy//tworzysz napis z char*, char[] lub sbyte*.char[] letters = { 'A', 'B', 'C' };string alphabet = new string(letters);

    Inicjalizuj�c napisy warto�ci� Empty zamiast null, zredukujesz szanse na otrzymaniewyj�tku NullReferenceException. U�ywaj statycznej metody IsNullOrEmpty(String),aby sprawdzi� warto�� napisu przed dost�pem do niego.

    Poleć książkęKup książkę

    http://helion.pl/rf/vs12pchttp://helion.pl/rt/vs12pc

  • 130 Microsoft Visual Studio 2012. Programowanie w C#

    Niezmienno�� obiektów String

    Obiekty String s� niezmienne: nie mog� by� zmienione po ich utworzeniu. Mo�e si�wydawa�, �e metody i operatory dzia�aj�ce na napisach mog� zmienia� ich warto��.W ka�dym z tych przypadków napis nie jest modyfikowany, zatem jest tworzony no-wy obiekt String. W przyk�adzie poni�ej, gdy warto�ci s1 i s2 s� ��czone, powstajenowy napis, a dwa oryginalne napisy pozostaj� niezmienione. Nowy obiekt jest przy-pisywany do zmiennej s1, a oryginalny obiekt, który by� wcze�niej do niej przypisany,zostaje zwolniony przez od�miecacz pami�ci (ang. Garbage Collector), poniewa� �adnazmienna nie przechowuje do niego referencji.

    string s1 = "Napis to wi�cej ";string s2 = "ni� znaki, jakie zawiera.";

    //Po��czenie s1 i s2 tworzy nowy obiekt//i zachowuje go w s1, zwalniaj�c//referencj� do oryginalnego obiektus1 += s2;System.Console.WriteLine(s1); //Wypisze: Napis to wi�cej ni� znaki, jakie zawiera

    Poniewa� „modyfikacja” napisu polega na utworzeniu nowego napisu, musisz uwa-�a�, gdy tworzysz do nich referencje. Gdy stworzysz referencj� do napisu, a nast�pnie„zmodyfikujesz” oryginalny napis, to referencja nadal b�dzie wskazywa� na oryginalnyobiekt. Ilustruje to nast�puj�cy przyk�ad:

    string s1 = "Witaj ";string s2 = s1;s1 += "�wiecie!";System.Console.WriteLine(s2); //Wypisze: Witaj

    Znaki specjalne

    W napisach mo�na u�ywa� znaków specjalnych, takich jak znak nowej linii czy ta-bulator. Znaki te przedstawia tabela 5.1.

    Tabela 5.1. Znaki specjalne w j�zyku C#

    Znak specjalny Nazwa Kodowanie Unicode

    \' Apostrof 0x0027

    \" Cudzys�ów 0x0022

    \\ Backslash 0x005C

    \0 Null 0x0000

    \a Alert 0x0007

    \b Backspace 0x0008

    \f Form feed 0x000C

    \n Nowa linia 0x000A

    \r Powrót karetki 0x000D

    Poleć książkęKup książkę

    http://helion.pl/rf/vs12pchttp://helion.pl/rt/vs12pc

  • Rozdzia� 5. � J�zyk C#. Pozosta�e zagadnienia 131

    Tabela 5.1. Znaki specjalne w j�zyku C# — ci�g dalszy

    Znak specjalny Nazwa Kodowanie Unicode

    \t Tabulator poziomy 0x0009

    \U Sekwencja 8 cyfr heksadecymalnych oznaczaj�cych kodznaku Unicode

    \Unnnnnnnn

    \u Sekwencja 4 cyfr heksadecymalnych oznaczaj�cych kodznaku Unicode

    \u0041 = "A"

    \v Tabulator pionowy 0x000B

    \x Sekwencja od 1 do 4 cyfr heksadecymalnychoznaczaj�cych kod znaku Unicode

    \x0041 = "A"

    Formatowanie napisów

    Napis formatowany to napis, którego zawarto�� okre�lana jest dynamicznie (w czasiedzia�ania programu). Tworzy si� go za pomoc� statycznej metody Format.

    Oto przyk�ad://Pobierz dane od u�ytkownikaSystem.Console.WriteLine("Enter a number");string input = System.Console.ReadLine();

    //konwersja napisu (string) na liczb� ca�kowit� (int)int j;System.Int32.TryParse(input, out j);

    //wypisanie ró�nych napisów podczas ka�dej iteracji p�tli

    string s;for (int i = 0; i < 10; i++){ s = System.String.Format("{0} * {1} = {2}", i, j, (i * j)); System.Console.WriteLine(s);}

    Napisy cz��cioweNapis cz��ciowy (ang. substring) to sekwencja znaków okre�lonej d�ugo�ci zawartaw napisie. Metoda IndexOf pozwala wyszuka� cz��ci napisów. Metoda Replace zamieniawszystkie wyst�pienia napisów cz��ciowych w napisie.

    Oto przyk�ad:string s3 = "Visual C# Express";System.Console.WriteLine(s3.Substring(7, 2)); //Wypisze: C#

    System.Console.WriteLine(s3.Replace("C#", "Basic")); //Wypisze: Visual Basic Express

    //Indeksy numerowane s� od zeraint index = s3.IndexOf("C"); //indeks = 7

    Poleć książkęKup książkę

    http://helion.pl/rf/vs12pchttp://helion.pl/rt/vs12pc

  • 132 Microsoft Visual Studio 2012. Programowanie w C#

    Dost�p do pojedynczych znaków

    Do poszczególnych znaków napisu mo�esz uzyska� dost�p tak jak do tablicy, co pre-zentuje poni�szy przyk�ad. Oczywi�cie dost�p tylko do odczytu.

    string s5 = "Pisz� wstecz";

    for (int i = 0; i < s5.Length; i++){ System.Console.Write(s5[s5.Length - i - 1]);}//Wypisze: zcetsw �zsiP

    Najwa�niejsze metody klasy String� Concat(String, String) — ��czy dwa napisy w jeden.

    � Contains(String) — sprawdza, czy podany tekst wyst�puje w napisie.

    � Insert(Int32, String) — wstawia tekst do napisu na podan� pozycj�.

    � IsNullOrEmpty(String) — sprawdza, czy napis jest pusty lub ma warto�� null.

    � Replace(String, String) — zast�puje wyst�pienia napisu z drugiegoparametru w napisie podanym jako pierwszy parametr (zwraca nowy napis).

    � ToLower() — zamienia litery w napisie na ma�e (zwraca nowy napis).

    � ToUpper() — zamienia litery w napisie na du�e (zwraca nowy napis).

    5.3. Arytmetyka du�ych liczbNa pocz�tek pragn� wspomnie� o strukturach Int64 oraz UInt64. Pierwsza strukturareprezentuje 64-bitow� liczb� ca�kowit� ze znakiem, a druga — bez znaku. Maksy-malna warto�� dla Int64 wynosi 9 223 372 036 854 775 807, a dla UInt64 jest to18 446 744 073 709 551 615. Nie napisa�em o tym w rozdziale 3., wi�c postanowi�emnapisa� tutaj. Jednak nie to jest g�ównym tematem tego rozdzia�u. Tym, czym si� zachwil� zajmiemy, b�d� naprawd� du�e liczby, a chodzi dok�adnie o struktur� BigInteger.

    W przestrzeni nazw System.Numerics znajduje si� struktura BigInteger, która wspo-maga operacje na du�ych liczbach. Zawiera ona w�a�ciwo�ci, metody i operatory dodzia�ania na takich liczbach.

    Najpierw musimy doda� referencj� do jednostki System.Numerics.dll. W okienkuSolution Explorer kliknij prawym przyciskiem myszy References i wybierz Add Refe-rence..., odnajd� na li�cie nazw� System.Numerics, zaznacz j� i kliknij przycisk OK.

    Teraz na górze swojego programu dopisz linijk�:using System.Numerics;

    Poleć książkęKup książkę

    http://helion.pl/rf/vs12pchttp://helion.pl/rt/vs12pc

  • Rozdzia� 5. � J�zyk C#. Pozosta�e zagadnienia 133

    Od teraz mo�esz korzysta� z ca�ej przestrzeni nazw System.Numerics.

    Now� zmienn� typu BigInteger mo�emy utworzy� nast�puj�co://utworzenie zmiennej i zainicjalizowanie j� domy�ln� warto�ci� (zero)BigInteger a = new BigInteger();

    //utworzenie zmiennej i zainicjalizowanie j� podan� warto�ci�BigInteger b = new BigInteger(18446744073709551615);

    Struktura BigInteger zawiera przeci��one operatory, takie jak na przyk�ad + (doda-wanie), — (odejmowanie), * (mno�enie) i / (dzielenie), co u�atwia wykonywaniepodstawowych operacji na du�ych liczbach.

    Oto prosty kalkulator z u�yciem BigInteger:using System;using System.Numerics;

    class Program{ static void Main() { Console.WriteLine("Podaj pierwsz� liczb�:"); string strA = Console.ReadLine(); //Wczytaj lini� tekstu z konsoli Console.WriteLine("Podaj drug� liczb�:"); string strB = Console.ReadLine(); //Wczytaj lini� tekstu z konsoli

    BigInteger a = BigInteger.Parse(strA); //Przekonwertuj napis na BigInteger BigInteger b = BigInteger.Parse(strB); //Przekonwertuj napis na BigInteger

    Console.WriteLine("Wyniki:"); Console.WriteLine("{0} + {1} = {2}", a, b, a + b); Console.WriteLine("{0} - {1} = {2}", a, b, a - b); Console.WriteLine("{0} * {1} = {2}", a, b, a * b); Console.WriteLine("{0} / {1} = {2}", a, b, a / b); }}

    Przyk�adowe wyj�cie programu:Podaj pierwsz� liczb�:18446744073709551615Podaj drug� liczb�:64Wyniki:18446744073709551615 + 64 = 1844674407370955167918446744073709551615 - 64 = 1844674407370955155118446744073709551615 * 64 = 118059162071741130336018446744073709551615 / 64 = 288230376151711743

    Poleć książkęKup książkę

    http://helion.pl/rf/vs12pchttp://helion.pl/rt/vs12pc

  • 134 Microsoft Visual Studio 2012. Programowanie w C#

    5.4. Arytmetyka liczb zespolonychW znanej nam ju� przestrzeni nazw System.Numerics znajduje si� struktura Complex.Reprezentuje ona liczb� zespolon�. Liczba zespolona sk�ada si� z cz��ci rzeczywisteji cz��ci urojonej.

    Now� instancj� struktury Complex tworzymy w nast�puj�cy sposób:Complex complex1 = new Complex(17.34, 12.87);Complex complex2 = new Complex(8.76, 5.19);

    gdzie pierwsza warto�� to cz��� rzeczywista, a druga to cz��� urojona.

    Na liczbach zespolonych mo�emy wykonywa� ró�ne operacje. Struktura Complex z prze-strzeni nazw System.Numerics udost�pnia naprawd� wiele przydatnych metod, w�a-�ciwo�ci i operatorów.

    Oto przyk�adowy kalkulator dzia�aj�cy na liczbach zespolonych:using System;using System.Numerics;

    class Program{ static void Main() { Complex complex1 = new Complex(17.34, 12.87); Complex complex2 = new Complex(8.76, 5.19);

    Console.WriteLine("{0} + {1} = {2}", complex1, complex2, complex1 + complex2); Console.WriteLine("{0} - {1} = {2}", complex1, complex2, complex1 - complex2); Console.WriteLine("{0} * {1} = {2}", complex1, complex2, complex1 * complex2); Console.WriteLine("{0} / {1} = {2}", complex1, complex2, complex1 / complex2); }}

    Wyj�cie programu:(17.34, 12.87) + (8.76, 5.19) = (26.1, 18.06)(17.34, 12.87) - (8.76, 5.19) = (8.58, 7.68)(17.34, 12.87) * (8.76, 5.19) = (85.1031, 202.7358)(17.34, 12.87) / (8.76, 5.19) = (2.10944241403558, 0.219405693054265)

    5.5. System plików i rejestrOperacje wej�cia/wyj�cia na plikach i strumieniach odnosz� si� do transferu danychdo i z no�nika danych. Przestrzenie nazw System.IO zawieraj� typy, które pozwalaj�czyta� i pisa� do strumieni danych i plików. Te przestrzenie nazw zawieraj� równie�

    Poleć książkęKup książkę

    http://helion.pl/rf/vs12pchttp://helion.pl/rt/vs12pc

  • Rozdzia� 5. � J�zyk C#. Pozosta�e zagadnienia 135

    typy pozwalaj�ce na kompresj� i dekompresj� plików oraz typy pozwalaj�ce na ko-munikacj� poprzez ��cza i porty.

    Plik jest uporz�dkowan� i nazwan� kolekcj� bajtów. Gdy pracujesz z plikami, pracu-jesz równie� ze �cie�kami dost�pu, pami�ci� oraz nazwami plików i katalogów.

    Pliki i katalogi

    Mo�esz u�ywa� typów z przestrzeni System.IO do interakcji z plikami i katalogami.Bazuj�c na przyk�ad na okre�lonych kryteriach wyszukiwania, mo�esz pobra� i usta-wi� w�a�ciwo�ci plików i katalogów, a tak�e pobra� kolekcj� plików i katalogów.

    Poni�ej lista cz�sto u�ywanych klas do pracy z plikami i katalogami:

    � File — dostarcza statyczne metody do tworzenia, kopiowania, usuwania,przenoszenia i otwierania plików.

    � FileInfo — dostarcza metody instancji do tworzenia, kopiowania, usuwania,przenoszenia i otwierania plików.

    � Directory — dostarcza statyczne metody do tworzenia, przenoszeniaoraz wyliczania katalogów i podkatalogów.

    � DirectoryInfo — dostarcza metody instancji do tworzenia, przenoszeniai wyliczania katalogów i podkatalogów.

    � Path — dostarcza metody i w�a�ciwo�ci do przetwarzania �cie�ek dost�pudo plików i katalogów.

    Przyk�ad: Jak kopiowa� katalogi?using System;using System.IO;

    class DirectoryCopyExample{ static void Main() { //Kopiuje katalog cat1 do katalogu cat2 wraz z podkatalogami i plikami DirectoryCopy(@"C:\cat1", @"C:\cat2", true); }

    private static void DirectoryCopy(string sourceDirName, string destDirName, �bool copySubDirs) { DirectoryInfo dir = new DirectoryInfo(sourceDirName); DirectoryInfo[] dirs = dir.GetDirectories();

    if (!dir.Exists) { throw new DirectoryNotFoundException( "Katalog �ród�owy nie istnieje lub nie mo�e zosta� odnaleziony: " + sourceDirName); }

    Poleć książkęKup książkę

    http://helion.pl/rf/vs12pchttp://helion.pl/rt/vs12pc

  • 136 Microsoft Visual Studio 2012. Programowanie w C#

    if (!Directory.Exists(destDirName)) { Directory.CreateDirectory(destDirName); }

    FileInfo[] files = dir.GetFiles(); foreach (FileInfo file in files) { string temppath = Path.Combine(destDirName, file.Name); file.CopyTo(temppath, false); }

    if (copySubDirs) { foreach (DirectoryInfo subdir in dirs) { string temppath = Path.Combine(destDirName, subdir.Name); DirectoryCopy(subdir.FullName, temppath, copySubDirs); } } }}

    Przyk�ad: Jak wylistowa� pliki w katalogu?using System;using System.IO;

    public class DirectoryLister{ public static void Main(String[] args) { string path = Environment.CurrentDirectory; if (args.Length > 0) { if (Directory.Exists(args[0])) { path = args[0]; } else { Console.WriteLine("{0} nie znaleziono; u�ywaj�c katalogu bie��cego:", args[0]); } } DirectoryInfo dir = new DirectoryInfo(path); Console.WriteLine("Rozmiar \tData utworzenia \tNazwa"); foreach (FileInfo f in dir.GetFiles("*.exe")) { string name = f.Name; long size = f.Length; DateTime creationTime = f.CreationTime; Console.WriteLine("{0,-12:N0} \t{1,-20:g} \t{2}", size, creationTime, name); } }}

    Poleć książkęKup książkę

    http://helion.pl/rf/vs12pchttp://helion.pl/rt/vs12pc

  • Rozdzia� 5. � J�zyk C#. Pozosta�e zagadnienia 137

    Przyk�ad: Jak wylistowa� katalogi w podanej �cie�ce?using System;using System.Collections.Generic;using System.IO;

    class Program{ private static void Main(string[] args) { try { string dirPath = @"C:\"; //katalog do przeszukania

    List dirs = new List(Directory. �EnumerateDirectories(dirPath));

    foreach (var dir in dirs) { Console.WriteLine("{0}", dir.Substring(dir.LastIndexOf("\\") + 1)); } Console.WriteLine("W sumie znaleziono {0} katalogów.", dirs.Count); } catch (UnauthorizedAccessException UAEx) { Console.WriteLine(UAEx.Message); } catch (PathTooLongException PathEx) { Console.WriteLine(PathEx.Message); } }}

    Strumienie

    Abstrakcyjna klasa bazowa Stream wspiera odczyt i zapis bajtów. Wszystkie klasy re-prezentuj�ce strumienie dziedzicz� z klasy Stream.

    Na strumieniach mo�emy wykonywa� trzy fundamentalne operacje:

    � Czytanie — transfer danych ze strumienia do struktury danych, takiej jak np.tablica bajtów.

    � Pisanie — transfer danych do strumienia z okre�lonego �ród�a.

    � Szukanie — pobieranie i modyfikowanie bie��cej pozycji w strumieniu.

    Poni�ej lista cz�sto u�ywanych klas do pracy ze strumieniami:

    � FileStream — do czytania z pliku i pisania do pliku.

    � MemoryStream — do czytania z pami�ci i pisania do pami�ci.

    � BufferedStream — do zwi�kszenia wydajno�ci operacji odczytu i zapisu.

    Poleć książkęKup książkę

    http://helion.pl/rf/vs12pchttp://helion.pl/rt/vs12pc

  • 138 Microsoft Visual Studio 2012. Programowanie w C#

    � NetworkStream — do czytania i pisania poprzez gniazda sieciowe.

    � PipeStream — do czytania i pisania poprzez ��cza nienazwane i nazwane.

    � CryptoStream — do ��czenia strumieni danych z transformacjamikryptograficznymi.

    Czytelnicy i pisarze

    Przestrze nazw System.IO dostarcza typów do czytania znaków ze strumieni i zapisuich do strumieni. Domy�lnie strumienie stworzone s� do pracy z bajtami. Typy czytelni-ków i pisarzy obs�uguj� konwersje znaków na bajty i bajtów na znaki.

    Poni�ej cz�sto u�ywane klasy czytelników i pisarzy:

    � BinaryReader i BinaryWriter — do odczytu i zapisu prymitywnych danych jakowarto�ci binarnych.

    � StreamReader i StreamWriter — do odczytu i zapisu znaków (z obs�ug�konwersji znaków na bajty i odwrotnie).

    � StringReader i StringWriter — do odczytu i zapisu znaków do napisu (String)i z napisu (String).

    � TextReader i TextWriter — klasy bazowe dla innych czytelników i pisarzydo zapisu oraz odczytu znaków i napisów, ale nie danych binarnych.

    Przyk�ad: Jak odczyta� dane z pliku tekstowego?using System;using System.IO;

    class Test{ public static void Main() { try { using (StreamReader sr = new StreamReader("TestFile.txt")) { String line = sr.ReadToEnd(); //Czytaj plik do ko�ca Console.WriteLine(line); //Wy�wietl zawarto�� na ekranie } } catch (Exception e) { Console.WriteLine("Nie mo�na odczyta� danych z pliku:"); Console.WriteLine(e.Message); } }}

    Poleć książkęKup książkę

    http://helion.pl/rf/vs12pchttp://helion.pl/rt/vs12pc

  • Rozdzia� 5. � J�zyk C#. Pozosta�e zagadnienia 139

    Przyk�ad: Jak zapisa� dane do pliku tekstowego?using System;using System.IO;

    class Program{ private static void Main(string[] args) { string str = String.Empty; //Utwórz pusty napis str = Console.ReadLine(); //Pobierz tekst z konsoli i zapisz do zmiennej //Utwórz Pisarza using (StreamWriter outfile = new StreamWriter(@"C:\file1.txt")) { outfile.Write(str); //Zapisz dane ze zmiennej str do pliku } }}

    Asynchroniczne operacje wej�cia/wyj�cia

    Odczyt i zapis du�ej ilo�ci danych mo�e powodowa� wi�ksze u�ycie zasobów. Powi-niene� wykonywa� takie czynno�ci asynchronicznie, aby aplikacja mog�a odpowiada�u�ytkownikowi. Przy synchronicznych operacjach wej�cia/wyj�cia w�tek obs�ugi in-terfejsu u�ytkownika jest blokowany, dopóki nie skocz� si� te operacje.

    Sk�adowe asynchroniczne zawieraj� w swojej nazwie s�owo Async, np. CopyToAsync,FlushAsync, ReadAsync czy WriteAsync. U�ywaj tych metod w po��czeniu ze s�owamikluczowymi async i await.

    Kompresja

    Kompresja polega na zmniejszaniu rozmiaru pliku. Dekompresja to proces wypako-wywania zawarto�ci skompresowanego pliku, aby mo�na by�o u�y� tej zawarto�ci.

    Przyk�ad: Jak kompresowa� i wypakowywa� dane w formacie ZIP?using System;using System.IO;using System.IO.Compression;

    namespace ConsoleApplication{ class Program { static void Main(string[] args) { string startPath = @"c:\example\start"; string zipPath = @"c:\example\result.zip"; string extractPath = @"c:\example\extract";

    ZipFile.CreateFromDirectory(startPath, zipPath);

    Poleć książkęKup książkę

    http://helion.pl/rf/vs12pchttp://helion.pl/rt/vs12pc

  • 140 Microsoft Visual Studio 2012. Programowanie w C#

    ZipFile.ExtractToDirectory(zipPath, extractPath); } }}

    Aby u�y� klasy ZipFile, musisz doda� referencj� do jednostki System.IO.Compression.�FileSystem w swoim projekcie.

    Rejestr

    W rejestrze mo�emy przechowywa� dane dotycz�ce stworzonej przez nas aplikacji,takie jak na przyk�ad jej informacje o konfiguracji.

    Przyk�ad: Jak stworzy� klucz w rejestrze?using System;using System.IO;using Microsoft.Win32;

    class Program{ static void Main(string[] args) { const string userRoot = "HKEY_CURRENT_USER"; const string subkey = "Imiona"; const string keyName = userRoot + "\\" + subkey;

    Registry.SetValue(keyName, "Imi�", "Izabela"); }}

    Przyk�ad: Jak odczyta� warto�� klucza z rejestru?using System;using System.IO;using Microsoft.Win32;

    class Program{ static void Main(string[] args) { const string userRoot = "HKEY_CURRENT_USER"; const string subkey = "Imiona"; const string keyName = userRoot + "\\" + subkey;

    string str = (string) Registry.GetValue(keyName, "Imi�", "brak"); Console.WriteLine("{0}", str); }}

    Poleć książkęKup książkę

    http://helion.pl/rf/vs12pchttp://helion.pl/rt/vs12pc

  • Rozdzia� 5. � J�zyk C#. Pozosta�e zagadnienia 141

    Bezpieczniej jest zapisywa� dane do klucza g�ównego HKEY_CURRENT_USER zamiastdo klucza HKEY_LOCAL_MACHINE.

    5.6. Tworzenie bibliotekBibliotek� tworzymy, wybieraj�c typ nowego projektu o nazwie Class Library. Dlaprzyk�adu stworzymy bibliotek� DLL z metodami do prostych operacji arytmetycz-nych, takich jak dodawanie, odejmowanie, mno�enie i dzielenie dwóch podanychliczb.

    Oto kod biblioteki:using System;

    public class Algebra{ public double Addition(double x = 0, double y = 0) { return x + y; }

    public double Subtraction(double x = 0, double y = 0) { return x - y; }

    public double Multiplication(double x = 0, double y = 0) { return x * y; }

    public double Division(double x = 0, double y = 1) { return x / y; }}

    Gdy skompilujesz ten kod, w folderze z projektem biblioteki pojawi si� plik o rozsze-rzeniu *.dll, czyli gotowa biblioteka.

    Teraz stwórz nowy projekt aplikacji konsolowej, a nast�pnie w oknie Solution Explorerkliknij prawym przyciskiem References i wybierz Add reference. Przejd� do zak�adkiBrowse i wybierz plik Algebra.dll.

    W stworzonym projekcie wpisz poni�szy kod:using System;using System.IO;

    class Program{

    Poleć książkęKup książkę

    http://helion.pl/rf/vs12pchttp://helion.pl/rt/vs12pc

  • 142 Microsoft Visual Studio 2012. Programowanie w C#

    private static void Main(string[] args) { Algebra alg1 = new Algebra(); //Utwórz obiekt klasy Algebra double a = 24.5; double b = 4.25; double c = alg1.Addition(a, b); //metoda Addition z klasy Algebra Console.WriteLine("{0} + {1} = {2}", a, b, c); //Wypisze: 24.5 + 4.25 = 28.75 }}

    Skompiluj powy�szy projekt i uruchom. Jest to projekt z u�yciem Twojej w�asnej bi-blioteki. To wszystko w tym rozdziale.

    5.7. Procesy i w�tki

    Procesy

    Klasa Process z przestrzeni nazw System.Diagnostics daje dost�p do lokalnych i zdal-nych procesów oraz pozwala uruchamia� i zatrzymywa� procesy na lokalnym systemie.

    Przyk�ad pokazuj�cy ró�ne sposoby uruchamiania procesów:using System;using System.Diagnostics;

    namespace MyProcessSample{ class MyProcess { //otwieranie aplikacji void OpenApplication(string myFavoritesPath) { //Uruchom przegl�dark� Internet Explorer Process.Start("IExplore.exe");

    //Wy�wietl zawarto�� folderu Ulubione Process.Start(myFavoritesPath); }

    //otwieranie stron i plików HTML przy u�yciu przegl�darki Internet Explorer void OpenWithArguments() { //przekazanie adresu strony jako argumentu dla procesu Process.Start("IExplore.exe", "www.helion.pl");

    //otwieranie pliku HTML w przegl�darce Internet Explorer Process.Start("IExplore.exe", "C:\\index.html"); }

    //u�ycie klasy ProcessStartInfo do uruchomienia procesu zminimalizowanego void OpenWithStartInfo()

    Poleć książkęKup książkę

    http://helion.pl/rf/vs12pchttp://helion.pl/rt/vs12pc

  • Rozdzia� 5. � J�zyk C#. Pozosta�e zagadnienia 143

    { ProcessStartInfo startInfo = new ProcessStartInfo("IExplore.exe"); startInfo.WindowStyle = ProcessWindowStyle.Minimized;

    Process.Start(startInfo);

    startInfo.Arguments = "www.helion.pl";

    Process.Start(startInfo); }

    static void Main() { //Pobierz �cie�k� do folderu Ulubione string myFavoritesPath = Environment.GetFolderPath(Environment.SpecialFolder.Favorites);

    MyProcess myProcess = new MyProcess();

    myProcess.OpenApplication(myFavoritesPath); myProcess.OpenWithArguments(); myProcess.OpenWithStartInfo(); } }}

    Z klasy Process dwie metody s� najwa�niejsze do zapami�tania, pierwsza to metodaStart, która uruchamia proces, a druga to metoda Kill, która zabija okre�lony proces.Wi�cej o procesach mo�esz znale�� na stronach MSDN.

    W�tki

    W�tki pozwalaj� na wykonywanie kilku zada „jednocze�nie”. Dlaczego s�owo „jed-nocze�nie” jest w cudzys�owie? Chodzi o to, �e te zadania wykonuj� si� na przemian,a dzieje si� to tak szybko, �e mamy wra�enie, i� dzieje si� to równocze�nie. Najpierwwykona si� cz��� pierwszego zadania, potem nast�puje prze��czenie na drugie zada-nie, które te� si� wykona cz��ciowo, nast�pnie znów si� wykonuje pierwsze zadanie— i tak w kó�ko.

    Poni�szy przyk�ad tworzy klas� o nazwie Worker z metod� DoWork, która zostanie wy-wo�ana w osobnym w�tku. W�tek rozpocznie wykonywanie przy wywo�aniu metodyi zakoczy prac� automatycznie. Metoda DoWork wygl�da tak:

    public void DoWork(){ while (!_shouldStop) { Console.WriteLine("worker thread: working..."); } Console.WriteLine("worker thread: terminating gracefully.");}

    Poleć książkęKup książkę

    http://helion.pl/rf/vs12pchttp://helion.pl/rt/vs12pc

  • 144 Microsoft Visual Studio 2012. Programowanie w C#

    Klasa Worker zawiera dodatkow� metod�, która okre�la, kiedy metoda DoWork powin-na si� zakoczy�. Metoda ta nazywa si� RequestStop i wygl�da nast�puj�co:

    public void RequestStop(){ _shouldStop = true;}

    Metoda RequestStop przypisuje sk�adowej _shouldStop warto�� true. Poniewa� sk�a-dowa ta jest sprawdzana przez metod� DoWork, przypisanie jej warto�ci true spowo-duje zakoczenie pracy w�tku z metod� DoWork. Warto zwróci� uwag�, �e metody DoWorki RequestStop b�d� uruchamiane przez osobne w�tki, dlatego sk�adowa _shouldStoppowinna zosta� zadeklarowana ze s�owem kluczowym volatile.

    private volatile bool _shouldStop;

    S�owo kluczowe volatile informuje kompilator, �e dwa lub wi�cej w�tków b�dziemia�o dost�p do tej sk�adowej i kompilator nie powinien u�ywa� tutaj �adnej optyma-lizacji.

    U�ycie s�owa kluczowego volatile przy sk�adowej _shouldStop pozwala mie� doniej bezpieczny dost�p z kilku w�tków bez u�ycia jakichkolwiek technik synchroni-zacji. Jest tak tylko dlatego, �e typ tej sk�adowej to bool. Oznacza to, �e tylko poje-dyncze operacje s� u�ywane do modyfikacji tej sk�adowej.

    Przed tworzeniem w�tku funkcja Main tworzy obiekt typu Worker i instancj� klasyThread. Obiekt w�tku jest konfigurowany do u�ycia metody Worker.DoWork jako punktwej�cia poprzez przekazanie referencji tej metody do kontruktora.

    Worker workerObject = new Worker();Thread workerThread = new Thread(workerObject.DoWork);

    W tym momencie obiekt w�tku istnieje i jest skonfigurowany. Jednak w�tek jeszczenie dzia�a, zostanie on uruchomiony, gdy metoda Main wywo�a metod� Start w�tku:

    workerThread.Start();

    Po tym w�tek ju� dzia�a, ale jest to asynchroniczne wzgl�dem w�tku g�ównego.Oznacza to, �e metoda Main wykonuje si� dalej. Aby wi�c w�tek nie zosta� zakoczony,musimy utworzy� p�tl�, która b�dzie czeka�a na zakoczenie w�tku:

    while (!workerThread.IsAlive);

    Nast�pnie w�tek g�ówny jest usypiany na okre�lony czas poprzez wywo�anie Sleep.Spowoduje to, �e w�tek roboczy wykona kilka iteracji p�tli metody DoWork, zanimmetoda Main wykona kolejne instrukcje.

    Thread.Sleep(1);

    Po up�ywie 1 milisekundy funkcja Main za pomoc� metody Worker.RequestStop dajesygna� do w�tku roboczego, �e powinien si� zakoczy�.

    workerObject.RequestStop();

    Poleć książkęKup książkę

    http://helion.pl/rf/vs12pchttp://helion.pl/rt/vs12pc

  • Rozdzia� 5. � J�zyk C#. Pozosta�e zagadnienia 145

    Istnieje równie� mo�liwo�� zakoczenia pracy w�tku z innego w�tku poprzez wywo-�anie Abort. Jednak u�ycie Abort powoduje, �e w�tek koczy si� natychmiast, i toniewa�ne, czy ukoczy� swoje zadanie.

    Ostatecznie funkcja Main wywo�uje metod� Join na obiekcie w�tku roboczego. Powo-duje to oczekiwanie bie��cego w�tku na zakoczenie w�tku roboczego. Metoda Join niewróci, dopóki w�tek roboczy sam si� nie zakoczy.

    workerThread.Join();

    W tym momencie g�ówny w�tek wywo�uj�cy funkcj� Main istnieje. Wy�wietla onkomunikat i koczy dzia�anie.

    Ca�y przyk�ad znajduje si� poni�ej:using System;using System.Threading;

    public class Worker{ //Metoda ta zostanie wywo�ana, gdy w�tek wystartuje public void DoWork() { while (!_shouldStop) { Console.WriteLine("w�tek roboczy: pracuje..."); } Console.WriteLine("w�tek roboczy: zakoczony."); } public void RequestStop() { _shouldStop = true; } //Volatile informuje, �e dost�p do tej sk�adowej b�dzie z kilku w�tków private volatile bool _shouldStop;}

    public class WorkerThreadExample{ static void Main() { //utworzenie obiektu w�tku (w�tek jeszcze nie wystartowa�) Worker workerObject = new Worker(); Thread workerThread = new Thread(workerObject.DoWork);

    //uruchomienie w�tku roboczego workerThread.Start(); Console.WriteLine("w�tek g�ówny: Uruchamiam w�tek roboczy...");

    //p�tla wstrzymuj�ca, dopóki w�tek roboczy jest aktywny while (!workerThread.IsAlive);

    //U�pij w�tek g�ówny na 1ms, aby w�tek roboczy mia� czas //na wykonanie swoich operacji Thread.Sleep(1);

    Poleć książkęKup książkę

    http://helion.pl/rf/vs12pchttp://helion.pl/rt/vs12pc

  • 146 Microsoft Visual Studio 2012. Programowanie w C#

    //Wy�lij ��danie do w�tku roboczego, aby si� zako�czy� workerObject.RequestStop();

    //zablokowanie w�tku g�ównego, dopóki w�tek roboczy nie zako�czy swojej pracy workerThread.Join(); Console.WriteLine("w�tek g�ówny: W�tek roboczy zakoczy� prac�."); }}

    5.8. Obs�uga b��dówObs�uga b��dów j�zyka C# pozwala Ci kontrolowa� nieoczekiwane i wyj�tkowe sytu-acje, które maj� miejsce podczas dzia�ania programu. U�ywane s�owa kluczowe try,catch i finally pozwalaj� na przetestowanie sytuacji, które mog� zakoczy� si� nie-powodzeniem. Wyj�tki mog� by� generowane przez rodowisko UruchomienioweWspólnego J�zyka (ang. Common Language Runtime), .NET Framework oraz biblioteki.Wyj�tki s� tworzone za pomoc� s�owa kluczowego throw.

    Poni�szy przyk�ad zawiera metod�, która dzieli dwie liczby. Gdy liczba, przez któr�zostanie wykonane dzielenie, b�dzie zerem, z�apany zostanie wyj�tek. Bez obs�ugi b��-dów program ten zakoczy�by si� wy�wietleniem komunikatu DivideByZeroExceptionwas unhandled.

    using System;

    class ExceptionTest{ static double SafeDivision(double x, double y) { if (y == 0) throw new System.DivideByZeroException(); //Rzu� wyj�tek DivideByZeroException return x / y; } static void Main() { double a = 98, b = 0; double result = 0;

    try //Spróbuj wykona� dzielenie { result = SafeDivision(a, b); Console.WriteLine("{0} / {1} = {2}", a, b, result); } catch (DivideByZeroException e) //Z�ap wyj�tek, gdy wyst�pi� { Console.WriteLine("Próbujesz dzieli� przez zero."); } }}

    Poleć książkęKup książkę

    http://helion.pl/rf/vs12pchttp://helion.pl/rt/vs12pc

  • Rozdzia� 5. � J�zyk C#. Pozosta�e zagadnienia 147

    Podsumowanie� Wszystkie wyj�tki pochodz� z System.Exception.

    � U�ywaj bloku try w miejscach, w których mog� wyst�pi� wyj�tki.

    � Gdy w bloku try wyst�pi wyj�tek, kontrola jest natychmiast przekazywanado obs�ugi wyj�tków. W j�zyku C# s�owo kluczowe catch jest u�ywanedo definiowania obs�ugi wyj�tków.

    � Gdy wyst�pi wyj�tek, który nie zostanie obs�u�ony, program zakoczy swojedzia�anie, wy�wietlaj�c komunikat o b��dzie.

    � Gdy blok catch definiuje zmienn� wyj�tku, mo�esz jej u�y�, aby uzyska�wi�cej informacji o wyj�tku, który wyst�pi�.

    � Kod w bloku finally jest wykonywany nawet wtedy, gdy wyst�pi� wyj�tek.U�yj tego bloku do zwolnienia zasobów, na przyk�ad zamkni�cia strumienilub plików, które zosta�y otwarte w bloku try.

    Poleć książkęKup książkę

    http://helion.pl/rf/vs12pchttp://helion.pl/rt/vs12pc

  • 148 Microsoft Visual Studio 2012. Programowanie w C#

    Poleć książkęKup książkę

    http://helion.pl/rf/vs12pchttp://helion.pl/rt/vs12pc

  • SkorowidzA

    akcesorget, 88set, 88

    alternatywalogiczna, 42warunkowa, 43wykluczaj�ca logiczna, 42

    aplikacjeklient-serwer, 164konsolowe, 15Metro, 175z interfejsem WinForms, 15z interfejsem WPF, 15

    argumenty wiersza polece, 52asembler IL, 165

    Bbiblioteka mscorlib, 166biblioteki DLL, 127, 141b��dy, 146b��dy procesu kompilacji, 15

    Ccechy WPF, 155CIL, Common Intermediate Language, 9, 165CLR, Common Language Runtime, 146

    Ddeklaracja

    destruktora, 67klasy, 22, 63konstruktora, 66metody, 53

    metody statycznej, 76napisu, 129obiektu, 64pola statycznego, 76typu wska�nikowego, 61

    delegat Func, 97delegaty, 23, 94deserializacja, 78destruktor, 66diagram UML, 18DNS, Domain Name System, 159dost�p

    do wirtualnych sk�adowych, 93do znaków, 132

    du�e liczby, 132dyrektywa

    #define, 27#elif, 27#else, 27#endif, 27#endregion, 29#error, 28#if, 26#line, 28#pragma warning, 29#region, 29#undef, 28#warning, 28.assembly, 166.entrypoint, 166.maxstack, 167

    dziedziczenie, 67

    Ee-mail, 160

    Poleć książkęKup książkę

    http://helion.pl/rf/vs12pchttp://helion.pl/rt/vs12pc

  • 196 Microsoft Visual Studio 2012. Programowanie w C#

    FFIFO, first-in-first-out, 101format pliku, Patrz plikiformatowanie napisów, 130funkcja Main, 144

    Ggniazda, Sockets, 161

    Iindeksery, 86instrukcja

    call, 166if, 32ldstr, 166stloc, 172switch, 34

    instrukcjeAsemblera IL, 187rozga��zie, 169

    interfejs, 23, 83interfejs graficzny, 149

    Jj�zyk po�redni CIL, 9, 165

    instrukcje arytmetyczne, 173instrukcje rozga��zie, 172kompilacja programu, 166metody, 167odk�adanie na stosie, 171p�tle, 170rozga��zienia, 169uruchamianie programu, 166zdejmowanie ze stosu, 172zmienne lokalne, 166

    Kkafelki, 176kapsu�kowanie, Encapsulating, 10klasa, 22

    ArrayList, 103DNS, 159generyczna

    Dictionary, 116KeyedCollection, 120LinkedList, 114List, 115Queue, 101, 112

    SortedDictionary, 118SortedList, 105, 123Stack, 102, 113

    Hashtable, 104ListDictionary, 105MailMessage, 160NameObjectCollectionBase, 107NameValueCollection, 110NetworkCredential, 160Object, 94Process, 142SmtpClient, 160Stream, 137StringCollection, 103StringDictionary, 106System.Array, 57

    w�a�ciwo�� Length, 57w�a�ciwo�� Rank, 57

    System.Console, 25ZipFile, 140

    klasyabstrakcyjne, 77bazowe, 89czytelników i pisarzy, 138do pracy z plikami, 135do pracy ze strumieniami, 137kolekcji, 100pochodne, 88zagnie�d�one, 68zapiecz�towane, 78

    klawiatura, 150klucz, 140kod nienadzorowany, unsafe code, 60kolekcje, 99komentarz

    blokowy, 20liniowy, 20XML, 20

    kompilator, 9kompilator ilasm.exe, 165kompresja, 139koniunkcja

    logiczna, 42warunkowa, 43

    konstruktor, 66kontrawariancja, 125kontrolka, 153

    App bar, 178Button, 178Check box, 179Combo box, 179Grid view, 179Hyperlink, 179List box, 180

    Poleć książkęKup książkę

    http://helion.pl/rf/vs12pchttp://helion.pl/rt/vs12pc

  • Skorowidz 197

    List view, 180Password box, 181Progress bar, 181Progress ring, 181Radio button, 181Slider, 182Text block, 182Text box, 182Toggle switch, 182Tooltip, 183

    konwersja typów, 24kopia obiektu

    g��boka, 85p�ytka, 85

    kopiowanie katalogów, 135kowariancja, 125

    Llicencja dewelopera, 176liczby zespolone, 134LIFO, last-in-first-out, 102listowanie

    katalogów, 137plików, 136

    Mmetoda, 53

    add(), 31BinarySearch(), 57Clear(), 58Clone(), 58, 85Console.Read(), 26Console.ReadKey(), 26Console.ReadLine(), 26Copy(), 58Find(), 58FindAll(), 59IndexOf(), 59Initialize(), 59Kill, 143Resize(), 60Reverse(), 60Sort(), 60Start, 143ToString(), 94

    metodyabstrakcyjne, 77anonimowe, 95klasy String, 132klasy System.Array, 57rozszerzaj�ce, 98statyczne, 76

    modyfikatorinternal, 70private, 69protected, 70protected internal, 70public, 69

    modyfikatory dost�pu, 69

    Nnapisy, Strings, 23, 129napisy cz��ciowe, Substrings, 131narz�dzia deweloperskie, 176niezmienno�� obiektów String, 130

    Oobiekt, 23obiekty String, 130obs�uga

    b��dów, 146zdarze, 178

    odczyt z pliku, 79odczyt z pliku tekstowego, 138odpluskwiacz, Debugger, 10od�miecacz pami�ci, Garbage Collector, 31okno Properties, 149opakowywanie zmiennych, 72operacje

    asynchroniczne, 139wej�cia/wyj�cia, 25

    operator-, 39, 62--, 37, 62!, 39!=, 42, 62%, 40&, 39, 62(), 36*, 40, 61/, 40??, 44[], 62~, 39+, 38, 62++, 36, 62

  • 198 Microsoft Visual Studio 2012. Programowanie w C#

    operator>>, 40a[x], 36as, 41checked, 37is, 41new, 37sizeof, 40typeof, 37unchecked, 38warunkowy, 43x.y, 36

    operatory skrócone przypisania, 44

    Ppakiet Microsoft Visual Studio 2012 Ultimate, 17pasek

    aplikacji, App bar, 175, 178funkcji, The charms, 175

    p�tlado-while, 45for, 45foreach, 48while, 49

    PInvoke, 127plik ilasm.exe, 165pliki

    DLL, 141IL, 165CS, 156XAML, 156XML, 79ZIP, 139

    pobieranie danych, 26pole, 70pole statyczne, 76polecenie cd, 166polimorfizm, 88pó�ne wi�zanie, 71preprocesor, 26priorytet operatora, 35procesy, 142programowanie

    obiektowe, 63sieciowe, 159

    protokó� FTP, 161przeci��anie

    metod, 72operatorów, 73

    przekazywanieargumentów

    przez referencj�, 54przez warto��, 54

    tablic, 56

    przes�anianie metody ToString(), 94przestrze nazw, 80

    System.Diagnostics, 142System.Exception, 147System.IO, 134System.Net, 159System.Numerics, 133

    Rrejestr, 140rodzaje projektu, 15rzutowanie, 24

    Sserializacja, 78sk�adniki pakietu, 17sk�adowe wirtualne, 91s�owa kluczowe j�zyka C#, 185s�owo kluczowe

    abstract, 77, 91break, 49catch, 146class, 22, 63continue, 50explicit, 75finally, 146goto, 50implicit, 75interface, 83new, 92operator, 73override, 91public, 63readonly, 70return, 51sealed, 78this, 65, 88throw, 51, 146try, 146unsafe, 60using, 80value, 88virtual, 91volatile, 144

    sta�a, 30sterta, 31stos, 31strona startowa, 177struktura

    BigInteger, 132Complex, 134Int64, 132UInt64, 132

    Poleć książkęKup książkę

    http://helion.pl/rf/vs12pchttp://helion.pl/rt/vs12pc

  • Skorowidz 199

    struktura programu, 19strumienie, 137symulowanie

    klawiatury, 152myszy, 152

    systemDNS, 159plików, 134

    �rodowisko .NET 4.0, 9

    Ttablice, 55technika przeci�gnij i upu��, 153technologia Intellisense, 71tworzenie

    bibliotek, 141interfejsu graficznego, 149klucza, 140projektu, 15, 177projektu WPF, 155

    typBigInteger, 133decimal, 22logiczny, 22polimorficzny, 90strukturalny, 24wska�nikowy, 61wyliczeniowy, 24

    typyca�kowite, 21generyczne, 111referencyjne, 22zmiennoprzecinkowe, 22

    Uukrywanie sk�adowych, 92uruchamianie

    aplikacji Metro, 178procesów, 142

    VVisual Studio 2012

    diagramy UML, 18górne menu, 16instalacja, 12kompilacja, 15konfiguracja, 14

    odpluskwianie, 15okna, 16paski narz�dzi, 17tworzenie projektu, 15, 177uruchamianie, 15wymagania, 11

    Wwarto�� klucza, 140w�tki, 143wczesne wi�zanie, 71wej�cie

    klawiatury, 150myszy, 151

    wiersz polece, 52Windows Presentation Foundation, 155Windows Forms, 153Windows Metro Style, 177wirtualne

    dziedziczenie, 93sk�adowe, 92

    w�a�ciwo��, 82w�a�ciwo�ci tablicy, 56WPF, Windows Presentation Foundation, 15, 155wska�niki, 60wydajno��, 31wyj�tek

    NullReferenceException, 129StackOverflowException, 31

    wyra�enia lambda, 96wysy�anie wiadomo�ci

    do serwera, 161e-mail, 160

    wy�wietlanie danych, 25wywo�ywanie funkcji poprzez PInvoke, 127

    Zzapis do pliku, 79zapis do pliku tekstowego, 139zdarzenia, 98

    dotycz�ce klawiatury, 151dotycz�ce myszy, 151

    zmienna, 30znaczniki XML, 20znak @, 185znaki specjalne, 25, 131

    Poleć książkęKup książkę

    http://helion.pl/rf/vs12pchttp://helion.pl/rt/vs12pc

  • 200 Microsoft Visual Studio 2012. Programowanie w C#

    Poleć książkęKup książkę

    http://helion.pl/rf/vs12pchttp://helion.pl/rt/vs12pc

  • http://program-partnerski.helion.pl