SlideShare ist ein Scribd-Unternehmen logo
1 von 13
Downloaden Sie, um offline zu lesen
IDZ DO
         PRZYK£ADOWY ROZDZIA£

                           SPIS TRE CI   C#. Leksykon
                                         kieszonkowy
           KATALOG KSI¥¯EK
                                         Autorzy: Peter Drayton, Ben Albahari, Ted Neward
                      KATALOG ONLINE     T³umaczenie: Przemys³aw Steæ
                                         ISBN: 83-7361-082-0
       ZAMÓW DRUKOWANY KATALOG           Tytu³ orygina³u: C# Language Pocket Reference
                                         Format: B5, stron: 146

              TWÓJ KOSZYK
                    DODAJ DO KOSZYKA     Ksi¹¿ka „C#. Leksykon kieszonkowy” dostarcza programistom zwiêz³ego opisu
                                         najbardziej innowacyjnego z jêzyków rodowiska .NET. Zaprojektowana jako porêczny,
                                         przeno ny przewodnik do codziennego u¿ytku, stanowi niezbêdn¹ pomoc dla
         CENNIK I INFORMACJE             programistów. Pomo¿e tak¿e Czytelnikowi przypomnieæ sobie typowe wzorce
                                         sk³adniowe, a ponadto u³atwi poruszanie siê po rodowisku .NET Framework.
                   ZAMÓW INFORMACJE      Ksi¹¿ka ta zawiera:
                     O NOWO CIACH           • Opis jêzyka C# zawieraj¹cy regu³y sk³adniowe dotycz¹ce s³ów kluczowych,
                                             deklaracji i instrukcji
                       ZAMÓW CENNIK         • Wprowadzenie do systemu typów, w tym opis mechanizmu opakowywania
                                              i odpakowywania pomiêdzy typami referencyjnymi a typami warto ciowymi
                                            • Zestawienie opcji kompilatora C# oraz przewodnik po istotnych narzêdziach
                 CZYTELNIA                      rodowiska .NET
                                            • Tabele opisuj¹ce sk³adniê wyra¿eñ regularnych, specyfikatory formatu oraz
          FRAGMENTY KSI¥¯EK ONLINE            zestawienie przestrzeni nazw i odpowiadaj¹cych im z³o¿eñ




Wydawnictwo Helion
ul. Chopina 6
44-100 Gliwice
tel. (32)230-98-63
e-mail: helion@helion.pl
Spis treści


Identyfikatory oraz słowa kluczowe.......................................... 8
Podstawowe elementy ............................................................... 9
Typy wartościowe i referencyjne ............................................ 10
     Typy wartościowe....................................................................................10
     Typy referencyjne.....................................................................................11

Typy predefiniowane ............................................................... 16
     Typy całkowite .........................................................................................16
     Typy zmiennoprzecinkowe ....................................................................18
     Typ dziesiętny (decimal).........................................................................19
     Typ znakowy (char).................................................................................20
     Typ logiczny (bool) ..................................................................................21
     Typ object ..................................................................................................22
     Typ łańcuchowy (string) .........................................................................22

Tablice...................................................................................... 23
     Tablice wielowymiarowe ........................................................................24
     Lokalne deklaracje tablic i deklaracje tablic jako pól..........................25
     Długość i rząd tablicy..............................................................................25
     Kontrola zakresów ...................................................................................25
     Konwersje tablic .......................................................................................26

Zmienne i parametry .............................................................. 26
     Określone przypisanie.............................................................................26
     Wartości domyślne ..................................................................................27
     Parametry ..................................................................................................28

Wyrażenia i operatory............................................................. 31
     Priorytet operatorów ...............................................................................31
     Operatory kontroli przepełnienia arytmetycznego ............................34
Instrukcje................................................................................. 34
     Instrukcje wyrażeniowe ..........................................................................35
     Instrukcje deklaracyjne............................................................................35
     Instrukcje wyboru ....................................................................................36
     Instrukcje pętli ..........................................................................................39
     Instrukcje skoku .......................................................................................41

Przestrzenie nazw ................................................................... 44
     Pliki ............................................................................................................44
     Wykorzystanie przestrzeni nazw ..........................................................45

Klasy ........................................................................................ 48
     Słowo kluczowe this ................................................................................51
     Pola.............................................................................................................52
     Stałe ............................................................................................................52
     Właściwości...............................................................................................54
     Indeksatory ...............................................................................................55
     Metody.......................................................................................................56
     Konstruktory egzemplarzy.....................................................................57
     Konstruktory statyczne ...........................................................................59
     Destruktory i finalizery ...........................................................................60
     Typy zagnieżdżone..................................................................................61

Modyfikatory dostępu ............................................................. 62
     Ograniczenia modyfikatorów dostępu .................................................64

Struktury................................................................................. 65
Interfejsy.................................................................................. 66
     Definiowanie interfejsu ...........................................................................67
     Implementacja interfejsu.........................................................................68
     Wykorzystanie interfejsu ........................................................................68
     Rozszerzanie interfejsu............................................................................69
     Jawna implementacja interfejsu .............................................................69
     Ponowna implementacja interfejsu .......................................................70
     Konwersje interfejsów .............................................................................71

Wyliczenia ............................................................................... 71
     Operatory wyliczeń .................................................................................73
     Konwersje wyliczeń.................................................................................73
Delegaty................................................................................... 74
     Delegaty zbiorowe ...................................................................................74

Zdarzenia................................................................................. 76
     Definiowanie delegata dla zdarzenia....................................................76
     Przechowywanie danych zdarzenia z wykorzystaniem klasy
     EventArgs..................................................................................................76
     Deklaracja i wywoływanie zdarzenia ...................................................77
     Reagowanie na zdarzenie z wykorzystaniem procedury
     obsługi zdarzenia .....................................................................................78
     Akcesory zdarzenia .................................................................................79

Przeciążanie operatorów.......................................................... 80
     Implementacja równości wartości .........................................................80
     Logiczne pary operatorów......................................................................82
     Niestandardowe konwersje — jawne i niejawne ................................82
     Operatory przeciążalne pośrednio ........................................................83

Instrukcje try i wyjątki ........................................................... 84
     Wyjątki.......................................................................................................84
     Klauzula catch ..........................................................................................86
     Blok finally ................................................................................................87
     Główne właściwości klasy System.Exception......................................88

Atrybuty .................................................................................. 89
     Klasy atrybutów .......................................................................................90
     Parametry nazwane i pozycyjne............................................................90
     Elementy docelowe atrybutów ..............................................................91
     Zastosowanie kilku atrybutów ..............................................................92

Kod niebezpieczny i wskaźniki ............................................... 92
     Podstawowe informacje o wskaźnikach...............................................92
     Kod niebezpieczny...................................................................................93
     Instrukcja fixed .........................................................................................94
     Operator wskaźnikowego dostępu do składowych ...........................95
     Słowo kluczowe stackalloc .....................................................................95
     Void* ..........................................................................................................96
     Wskaźniki do kodu niezarządzanego...................................................96

Dyrektywy preprocesora ......................................................... 97
Opis biblioteki Framework Class Library............................... 98
     Typy rdzenne............................................................................................99
     Tekst .........................................................................................................100
     Kolekcje....................................................................................................100
     Strumienie i operacje wejścia-wyjścia .................................................101
     Praca sieciowa.........................................................................................101
     Wątki........................................................................................................102
     Bezpieczeństwo ......................................................................................102
     Refleksje i metadane ..............................................................................103
     Złożenia ...................................................................................................104
     Serializacja...............................................................................................104
     Zdalne wykorzystanie obiektów .........................................................104
     Usługi WWW..........................................................................................105
     Dostęp do danych ..................................................................................106
     XML..........................................................................................................106
     Grafika .....................................................................................................107
     Rozbudowane aplikacje klienckie .......................................................107
     Aplikacje WWW.....................................................................................108
     Globalizacja .............................................................................................109
     Konfiguracja............................................................................................109
     Zaawansowane usługi komponentowe ..............................................109
     Diagnostyka i testowanie......................................................................110
     Współpraca z kodem niezarządzanym...............................................110
     Obsługa kompilatora i narzędzi ..........................................................111
     Funkcje środowiska uruchomieniowego............................................112
     Rodzime funkcje systemu operacyjnego ............................................112

Przestrzenie nazw a złożenia................................................ 112
Wyrażenia regularne............................................................. 120
Specyfikatory formatu ........................................................... 124
     Specyfikatory formatu wizualnego .....................................................126
     Specyfikatory formatu typu DateTime ...............................................127

Opcje kompilatora języka C# ................................................ 129
Istotne narzędzia środowiska .NET ...................................... 134
Skorowidz .............................................................................. 139
Opakowywanie i odpakowywanie
typów wartościowych
Aby można było wykonywać wspólne operacje — przeprowa-
dzane zarówno na typach referencyjnych, jak i wartościowych
— każdy typ wartościowy posiada odpowiadający mu ukryty
typ referencyjny. Zostaje on utworzony w przypadku przypisania
typu wartościowego do egzemplarza typu System.Object lub
do interfejsu. Proces ten zwany jest opakowywaniem (ang. boxing).
Typ wartościowy można rzutować do klasy object (wyjścio-
wej klasy bazowej dla wszystkich typów wartościowych i refe-
rencyjnych) lub do implementowanego przez niego interfejsu.
W zaprezentowanym tu przykładzie opakowujemy typ warto-
ściowy int w odpowiadający mu typ referencyjny, a następnie
odpakowujemy go:
 class Test {
   static void Main () {
     int x = 9;
     object o = x; // opakuj typ int
     int y = (int)o; // odpakuj typ int
   }
 }

Podczas opakowywania typu wartościowego tworzony jest nowy
typ referencyjny, który przechowywać będzie kopię opakowy-
wanego typu. Operacja odpakowania powoduje przekopiowanie
wartości z typu referencyjnego z powrotem do typu wartościo-
wego. Wymaga ona jawnego rzutowania, podczas którego wyko-
nywane jest sprawdzenie, czy docelowy typ wartościowy jest
zgodny z typem zawartym w typie referencyjnym. W przypadku
niepomyślnego wyniku tego sprawdzenia zgłaszany jest wyjątek
InvalidCastException. Nie musimy się martwić o to, co stanie
się z opakowanymi obiektami, gdy przestaniemy z nich korzy-



Typy predefiniowane                                            3
stać — poradzi sobie z nimi za nas mechanizm odśmiecania
pamięci.
Dobrym przykładem operacji opakowania i odpakowania jest za-
stosowanie klas kolekcji (ang. collection classes). W następującym
fragmencie kodu wykorzystujemy klasę Queue w połączeniu
z typami wartościowymi:
    using System;
    using System.Collections;
    class Test {
      static void Main () {
        Queue q = new Queue ();
        q.Enqueue (1); // opakuj wartość typu int
        q.Enqueue (2); // opakuj wartość typu int
        Console.WriteLine ((int)q.Dequeue()); // odpakuj
                                       wartość typu int
        Console.WriteLine ((int)q.Dequeue()); // odpakuj
                                       wartość typu int
      }
    }


Typy predefiniowane
Wszystkie typy predefiniowane w języku C# są nazwami zastęp-
czymi typów występujących w przestrzeni nazw System. Na
przykład, pomiędzy następującymi dwoma instrukcjami istnieje
jedynie różnica składniowa:
    int i = 5;
    System.Int32 i = 5;


Typy całkowite
Typy całkowite oraz ich właściwości przedstawia zamieszczona
poniżej tabela.




4                                          C#. Leksykon kieszonkowy
W przypadku typów całkowitych bez znaku, o szerokości n bi-
tów, możliwe wartości należą do zakresu od 0 do 2n–1. W przy-
padku typów całkowitych ze znakiem, o takiej samej szerokości
Typ w języku C#   Typ systemowy   Rozmiar    Ze znakiem
sbyte             System.SByte    1 bajt     Tak
short             System.Int16    2 bajty    Tak
int               System.Int32    4 bajty    Tak
long              System.Int64    8 bajtów   Tak
byte              System.Byte     1 bajt     Nie
ushort            System.UInt16   2 bajty    Nie
uint              System.UInt32   4 bajty    Nie
ulong             System.UInt64   8 bajtów   Nie

(n bitów), możliwe wartości mieszczą się w zakresie od –2n–1 do
2n–1–1. W literałach całkowitych stosować można notację dzie-
siętną lub szesnastkową:
    int x = 5;
    ulong y = 0x1234AF; // w przypadku liczb
     szesnastkowych stosujemy przedrostek 0x

W przypadku, gdy dany literał całkowity jest poprawny dla kilku
możliwych typów całkowitych, typ domyślny wybierany jest
w następującej kolejności: int, uint, long oraz ulong. W celu
jawnego określenia wybranego typu można użyć następujących
przyrostków:
U
      uint lub ulong
L
      long lub ulong
UL
      ulong




Typy predefiniowane                                           5
Konwersje całkowite
Niejawna konwersja pomiędzy typami całkowitymi jest dozwo-
lona w przypadku, gdy typ, na który chcemy konwertować,
zawiera wszystkie możliwe wartości typu konwertowanego.
W przeciwnym razie konieczna jest konwersja jawna. Możemy,
na przykład, niejawnie skonwertować typ int na typ long,
lecz typ int na typ short musimy już konwertować jawnie:
    int x = 123456;
    long y = x; // konwersja niejawna, nie ma utraty
                    informacji
    short z = (short)x; // konwersja jawna, wartość x
                            zostaje "obcięta"


Typy zmiennoprzecinkowe
Typ w języku C#   Typ systemowy     Rozmiar
float             System.Single     4 bajty
double            System.Double     8 bajtów

Typ float może pomieścić wartości z zakresu od około ±1,5×10–45
do około ±3,4×1038, z dokładnością do siedmiu cyfr znaczących.
Typ double może pomieścić wartości z zakresu od około ±5,0×
10–324 do około ±1,7×10308, z dokładnością do 15 – 16 cyfr zna-
czących.
Typy zmiennoprzecinkowe mogą przechowywać wartości spe-
cjalnie +0, –0, +∞, –∞, NaN (ang. not a number — wartość nielicz-
bowa). Reprezentują one wyniki takich operacji matematycz-
nych jak dzielenie przez zero. Typy float oraz double stanowią
implementację specyfikacji typów formatu IEEE 754, obsługiwaną
przez prawie wszystkie procesory, a zdefiniowaną przez orga-
nizację IEEE w witrynie http://www.ieee.org.




6                                              C#. Leksykon kieszonkowy
W literałach zmiennoprzecinkowych stosować można notację
dziesiętną lub wykładniczą. Literał typu float wymaga dołą-
czenia przyrostka f lub F. Do literału typu double można (lecz
nie jest to koniecznie) dodać przyrostek d lub D.
 float x = 9.81f;
 double y = 7E-02; // 0.07


Konwersje zmiennoprzecinkowe
Niejawna konwersja typu float na typ double nie powoduje
utraty informacji i jest dozwolona — lecz nigdy na odwrót. Dla
zapewnienia czytelności dozwolona jest również konwersja typów
int, uint i long na typ float oraz typu long na typ double:
 int sila = 2;
 int przesuniecie = 3;
 float x = 9.53f * sila - przesuniecie;

Jeśli w przykładzie tym użyjemy większych wartości, może na-
stąpić utrata precyzji. Jednak możliwy zakres wartości nie jest
okrojony, ponieważ najniższa i najwyższa wartość zarówno typu
float, jak i double, przekraczają najniższą i najwyższą wartość
typów int, uint czy long. Wszystkie pozostałe konwersje po-
między typami całkowitymi a zmiennoprzecinkowymi muszą
być jawne:
 float x = 3.53f;
 int przesuniecie = (int)x;


Typ dziesiętny (decimal)
Typ decimal może przechowywać wartości z zakresu od ±1,0×
10–28 do około ±7,9×1028, przy użyciu 28 – 29 cyfr znaczących.
Typ decimal zawiera 28 cyfr oraz położenie przecinka oddzie-
lającego części dziesiętne. W przeciwieństwie do wartości zmien-



Typy predefiniowane                                           7
noprzecinkowej typ ten charakteryzuje się większą dokładnością,
lecz mniejszym zakresem. Przydatny jest on zwykle w oblicze-
niach finansowych, gdzie połączenie jego wysokiej dokładności
oraz możliwości zapisania liczby dziesiętnej bez błędów zaokrą-
glenia jest bardzo cenne. Na przykład liczba 0,1 zostanie za pomo-
cą typu decimal przedstawiona dokładnie, lecz jeśli użyjemy do
jej zapisania typu zmiennoprzecinkowego, jej reprezentacją będzie
liczba dwójkowa okresowa. W przypadku typu decimal nie
istnieją pojęcia wartości +0, –0, +∞, –∞ czy NaN.
Literał dziesiętny wymaga dołączenia przyrostka m lub M.
    decimal x = 80603.454327m; // przechowuje dokładną
                                   wartość


Konwersje typu decimal
Dozwolona jest niejawna konwersja wszystkich typów całko-
witych na typ dziesiętny (decimal), ponieważ typ ten repre-
zentować może dowolną wartość całkowitą. Konwersja typu
decimal na typ zmiennoprzecinkowy (i odwrotnie) wymaga
konwersji jawnej, ponieważ typy zmiennoprzecinkowe posia-
dają większy zakres niż typ dziesiętny, ten zaś posiada większą
dokładność niż typy zmiennoprzecinkowe.


Typ znakowy (char)
Typ w języku C#   Typ systemowy   Rozmiar
char              System.Char     2 bajty

Typ char reprezentuje znak w formacie Unicode. Literał typu
char może być albo znakiem prostym, albo znakiem w forma-
cie Unicode, albo znakiem sterującym (ang. escape character). We
wszystkich tych przypadkach użyty jako taki literał znak powi-
nien być ujęty w apostrofy:


8                                           C#. Leksykon kieszonkowy
'A' // znak prosty
 'u0041' // znak w kodzie Unicode
 'x0041' // znak w kodzie szesnastkowym unsigned
              short
 'n' // znak sekwencji sterującej

Znaki sekwencji sterującej zebrano w tabeli 1.
Tabela 1. Znaki sekwencji sterującej
Znak    Znaczenie           Wartość
'      Apostrof            0x0027
"      Cudzysłów           0x0022
      Lewy ukośnik        0x005C
0      Zero                0x0000
a      Alarm               0x0007
b      Znak cofania        0x0008
f      Wysuw strony        0x000C
n      Nowy wiersz         0x000A
r      Powrót karetki      0x000D
t      Tabulacja pozioma   0x0009
v      Tabulacja pionowa   0x000B


Konwersje typu char
Niejawna konwersja typu char na większość typów numerycz-
nych jest zwykle wykonywana, przy czym jest ona zależna od
tego, czy dany typ numeryczny może pomieścić typ short bez
znaku. Jeśli nie — konieczna jest konwersja jawna.


Typ logiczny (bool)
Typ w języku C#     Typ systemowy      Rozmiar




Typy predefiniowane                                      9
bool              System.Boolean     1 bajt/2 bajty

Typ bool jest wartością logiczną, której przypisać można literał
true lub false.
Chociaż wartość boolowska wymaga tylko jednego bitu (0 lub 1),
zajmuje ona 1 bajt pamięci, gdyż jest to minimalna porcja, która
może podlegać adresowaniu w przypadku większości architektur
procesorów. Każdy element w tablicy boolowskiej zajmuje dwa
bajty pamięci.


Konwersje typu bool
Nie są możliwe jakiekolwiek konwersje wartości boolowskich
na typy numeryczne i odwrotnie.


Typ object
Typ w języku C#   Typ systemowy    Rozmiar
object            System.Object    0-bajtowy/8-bajtowy narzut

Klasa object jest wyjściowym typem bazowym zarówno dla
typów wartościowych, jak i referencyjnych. Typy wartościowe
nie zawierają narzutu pamięci pochodzącego od obiektu. Typy
referencyjne, które przechowywane są na stercie, z natury wy-
magają narzutu. W środowisku uruchomieniowym .NET egzem-
plarz typu referencyjnego posiada 8-bajtowy narzut, który zawiera
typ obiektu, a także informacje tymczasowe, dotyczące na przy-
kład stanu blokady synchronizacji lub tego, czy dany obiekt został
zabezpieczony przed usunięciem przez mechanizm odśmiecania
pamięci. Warto wiedzieć, że każda referencja do egzemplarza typu
referencyjnego zajmuje 4 bajty pamięci.




10                                            C#. Leksykon kieszonkowy

Weitere ähnliche Inhalte

Was ist angesagt?

Znajdź błąd. Sztuka analizowania kodu
Znajdź błąd. Sztuka analizowania koduZnajdź błąd. Sztuka analizowania kodu
Znajdź błąd. Sztuka analizowania kodu
Wydawnictwo Helion
 
Java. Rozmówki
Java. RozmówkiJava. Rozmówki
Java. Rozmówki
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
 
Język C++. Koncepcje i techniki programowania
Język C++. Koncepcje i techniki programowaniaJęzyk C++. Koncepcje i techniki programowania
Język C++. Koncepcje i techniki programowania
Wydawnictwo Helion
 

Was ist angesagt? (7)

Visual C# .NET. Encyklopedia
Visual C# .NET. EncyklopediaVisual C# .NET. Encyklopedia
Visual C# .NET. Encyklopedia
 
Znajdź błąd. Sztuka analizowania kodu
Znajdź błąd. Sztuka analizowania koduZnajdź błąd. Sztuka analizowania kodu
Znajdź błąd. Sztuka analizowania kodu
 
Java. Rozmówki
Java. RozmówkiJava. Rozmówki
Java. Rozmówki
 
Asembler. Sztuka programowania
Asembler. Sztuka programowaniaAsembler. Sztuka programowania
Asembler. Sztuka programowania
 
C++. Leksykon kieszonkowy
C++. Leksykon kieszonkowyC++. Leksykon kieszonkowy
C++. Leksykon kieszonkowy
 
C++. Styl i technika zaawansowanego programowania
C++. Styl i technika zaawansowanego programowaniaC++. Styl i technika zaawansowanego programowania
C++. Styl i technika zaawansowanego programowania
 
Język C++. Koncepcje i techniki programowania
Język C++. Koncepcje i techniki programowaniaJęzyk C++. Koncepcje i techniki programowania
Język C++. Koncepcje i techniki programowania
 

Ähnlich wie C#. Leksykon kieszonkowy

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
 
C++. Zaawansowane programowanie
C++. Zaawansowane programowanieC++. Zaawansowane programowanie
C++. Zaawansowane programowanie
Wydawnictwo Helion
 
C++. Potęga języka. Od przykładu do przykładu
C++. Potęga języka. Od przykładu do przykładuC++. Potęga języka. Od przykładu do przykładu
C++. Potęga języka. Od przykładu do przykładu
Wydawnictwo Helion
 
Język C. Programowanie
Język C. ProgramowanieJęzyk C. Programowanie
Język C. Programowanie
Wydawnictwo Helion
 
Programowanie w języku C. Szybki start
Programowanie w języku C. Szybki startProgramowanie w języku C. Szybki start
Programowanie w języku C. Szybki start
Wydawnictwo Helion
 
C++. Strategie i taktyki. Vademecum profesjonalisty
C++. Strategie i taktyki. Vademecum profesjonalistyC++. Strategie i taktyki. Vademecum profesjonalisty
C++. Strategie i taktyki. Vademecum profesjonalisty
Wydawnictwo Helion
 
C++. Inżynieria programowania
C++. Inżynieria programowaniaC++. Inżynieria programowania
C++. Inżynieria programowania
Wydawnictwo Helion
 
Prolog. Programowanie
Prolog. ProgramowanieProlog. Programowanie
Prolog. Programowanie
Wydawnictwo Helion
 
C#. Wzorce projektowe
C#. Wzorce projektoweC#. Wzorce projektowe
C#. Wzorce projektowe
Wydawnictwo Helion
 
SQL w mgnieniu oka
SQL w mgnieniu okaSQL w mgnieniu oka
SQL w mgnieniu oka
Wydawnictwo Helion
 
STL w praktyce. 50 sposobów efektywnego wykorzystania
STL w praktyce. 50 sposobów efektywnego wykorzystaniaSTL w praktyce. 50 sposobów efektywnego wykorzystania
STL w praktyce. 50 sposobów efektywnego wykorzystania
Wydawnictwo Helion
 
Algorytmy w C
Algorytmy w CAlgorytmy w C
Algorytmy w C
Wydawnictwo Helion
 
C# i .NET
C# i .NETC# i .NET
VB .NET. Almanach
VB .NET. AlmanachVB .NET. Almanach
VB .NET. Almanach
Wydawnictwo Helion
 
Struktura organizacyjna i architektura systemów komputerowych
Struktura organizacyjna i architektura systemów komputerowychStruktura organizacyjna i architektura systemów komputerowych
Struktura organizacyjna i architektura systemów komputerowych
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
 
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
 
Po prostu Access 2003 PL
Po prostu Access 2003 PLPo prostu Access 2003 PL
Po prostu Access 2003 PL
Wydawnictwo Helion
 

Ähnlich wie C#. Leksykon kieszonkowy (20)

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
 
C#. Ćwiczenia
C#. ĆwiczeniaC#. Ćwiczenia
C#. Ćwiczenia
 
C++. Zaawansowane programowanie
C++. Zaawansowane programowanieC++. Zaawansowane programowanie
C++. Zaawansowane programowanie
 
C++. Potęga języka. Od przykładu do przykładu
C++. Potęga języka. Od przykładu do przykładuC++. Potęga języka. Od przykładu do przykładu
C++. Potęga języka. Od przykładu do przykładu
 
Język C. Programowanie
Język C. ProgramowanieJęzyk C. Programowanie
Język C. Programowanie
 
Programowanie w języku C. Szybki start
Programowanie w języku C. Szybki startProgramowanie w języku C. Szybki start
Programowanie w języku C. Szybki start
 
C++. Strategie i taktyki. Vademecum profesjonalisty
C++. Strategie i taktyki. Vademecum profesjonalistyC++. Strategie i taktyki. Vademecum profesjonalisty
C++. Strategie i taktyki. Vademecum profesjonalisty
 
C++. Inżynieria programowania
C++. Inżynieria programowaniaC++. Inżynieria programowania
C++. Inżynieria programowania
 
Prolog. Programowanie
Prolog. ProgramowanieProlog. Programowanie
Prolog. Programowanie
 
PHP. Programowanie
PHP. ProgramowaniePHP. Programowanie
PHP. Programowanie
 
C#. Wzorce projektowe
C#. Wzorce projektoweC#. Wzorce projektowe
C#. Wzorce projektowe
 
SQL w mgnieniu oka
SQL w mgnieniu okaSQL w mgnieniu oka
SQL w mgnieniu oka
 
STL w praktyce. 50 sposobów efektywnego wykorzystania
STL w praktyce. 50 sposobów efektywnego wykorzystaniaSTL w praktyce. 50 sposobów efektywnego wykorzystania
STL w praktyce. 50 sposobów efektywnego wykorzystania
 
Algorytmy w C
Algorytmy w CAlgorytmy w C
Algorytmy w C
 
C# i .NET
C# i .NETC# i .NET
C# i .NET
 
VB .NET. Almanach
VB .NET. AlmanachVB .NET. Almanach
VB .NET. Almanach
 
Struktura organizacyjna i architektura systemów komputerowych
Struktura organizacyjna i architektura systemów komputerowychStruktura organizacyjna i architektura systemów komputerowych
Struktura organizacyjna i architektura systemów komputerowych
 
C++. Kruczki i fortele w programowaniu
C++. Kruczki i fortele w programowaniuC++. Kruczki i fortele w programowaniu
C++. Kruczki i fortele w programowaniu
 
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
 
Po prostu Access 2003 PL
Po prostu Access 2003 PLPo prostu Access 2003 PL
Po prostu Access 2003 PL
 

Mehr von 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'u w biznesie
E-wizerunek. Internet jako narzędzie kreowania image'u w biznesieE-wizerunek. Internet jako narzędzie kreowania image'u w biznesie
E-wizerunek. Internet jako narzędzie kreowania image'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
 
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
 

Mehr von 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'u w biznesie
E-wizerunek. Internet jako narzędzie kreowania image'u w biznesieE-wizerunek. Internet jako narzędzie kreowania image'u w biznesie
E-wizerunek. Internet jako narzędzie kreowania image'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#. Leksykon kieszonkowy

  • 1. IDZ DO PRZYK£ADOWY ROZDZIA£ SPIS TRE CI C#. Leksykon kieszonkowy KATALOG KSI¥¯EK Autorzy: Peter Drayton, Ben Albahari, Ted Neward KATALOG ONLINE T³umaczenie: Przemys³aw Steæ ISBN: 83-7361-082-0 ZAMÓW DRUKOWANY KATALOG Tytu³ orygina³u: C# Language Pocket Reference Format: B5, stron: 146 TWÓJ KOSZYK DODAJ DO KOSZYKA Ksi¹¿ka „C#. Leksykon kieszonkowy” dostarcza programistom zwiêz³ego opisu najbardziej innowacyjnego z jêzyków rodowiska .NET. Zaprojektowana jako porêczny, przeno ny przewodnik do codziennego u¿ytku, stanowi niezbêdn¹ pomoc dla CENNIK I INFORMACJE programistów. Pomo¿e tak¿e Czytelnikowi przypomnieæ sobie typowe wzorce sk³adniowe, a ponadto u³atwi poruszanie siê po rodowisku .NET Framework. ZAMÓW INFORMACJE Ksi¹¿ka ta zawiera: O NOWO CIACH • Opis jêzyka C# zawieraj¹cy regu³y sk³adniowe dotycz¹ce s³ów kluczowych, deklaracji i instrukcji ZAMÓW CENNIK • Wprowadzenie do systemu typów, w tym opis mechanizmu opakowywania i odpakowywania pomiêdzy typami referencyjnymi a typami warto ciowymi • Zestawienie opcji kompilatora C# oraz przewodnik po istotnych narzêdziach CZYTELNIA rodowiska .NET • Tabele opisuj¹ce sk³adniê wyra¿eñ regularnych, specyfikatory formatu oraz FRAGMENTY KSI¥¯EK ONLINE zestawienie przestrzeni nazw i odpowiadaj¹cych im z³o¿eñ Wydawnictwo Helion ul. Chopina 6 44-100 Gliwice tel. (32)230-98-63 e-mail: helion@helion.pl
  • 2. Spis treści Identyfikatory oraz słowa kluczowe.......................................... 8 Podstawowe elementy ............................................................... 9 Typy wartościowe i referencyjne ............................................ 10 Typy wartościowe....................................................................................10 Typy referencyjne.....................................................................................11 Typy predefiniowane ............................................................... 16 Typy całkowite .........................................................................................16 Typy zmiennoprzecinkowe ....................................................................18 Typ dziesiętny (decimal).........................................................................19 Typ znakowy (char).................................................................................20 Typ logiczny (bool) ..................................................................................21 Typ object ..................................................................................................22 Typ łańcuchowy (string) .........................................................................22 Tablice...................................................................................... 23 Tablice wielowymiarowe ........................................................................24 Lokalne deklaracje tablic i deklaracje tablic jako pól..........................25 Długość i rząd tablicy..............................................................................25 Kontrola zakresów ...................................................................................25 Konwersje tablic .......................................................................................26 Zmienne i parametry .............................................................. 26 Określone przypisanie.............................................................................26 Wartości domyślne ..................................................................................27 Parametry ..................................................................................................28 Wyrażenia i operatory............................................................. 31 Priorytet operatorów ...............................................................................31 Operatory kontroli przepełnienia arytmetycznego ............................34
  • 3. Instrukcje................................................................................. 34 Instrukcje wyrażeniowe ..........................................................................35 Instrukcje deklaracyjne............................................................................35 Instrukcje wyboru ....................................................................................36 Instrukcje pętli ..........................................................................................39 Instrukcje skoku .......................................................................................41 Przestrzenie nazw ................................................................... 44 Pliki ............................................................................................................44 Wykorzystanie przestrzeni nazw ..........................................................45 Klasy ........................................................................................ 48 Słowo kluczowe this ................................................................................51 Pola.............................................................................................................52 Stałe ............................................................................................................52 Właściwości...............................................................................................54 Indeksatory ...............................................................................................55 Metody.......................................................................................................56 Konstruktory egzemplarzy.....................................................................57 Konstruktory statyczne ...........................................................................59 Destruktory i finalizery ...........................................................................60 Typy zagnieżdżone..................................................................................61 Modyfikatory dostępu ............................................................. 62 Ograniczenia modyfikatorów dostępu .................................................64 Struktury................................................................................. 65 Interfejsy.................................................................................. 66 Definiowanie interfejsu ...........................................................................67 Implementacja interfejsu.........................................................................68 Wykorzystanie interfejsu ........................................................................68 Rozszerzanie interfejsu............................................................................69 Jawna implementacja interfejsu .............................................................69 Ponowna implementacja interfejsu .......................................................70 Konwersje interfejsów .............................................................................71 Wyliczenia ............................................................................... 71 Operatory wyliczeń .................................................................................73 Konwersje wyliczeń.................................................................................73
  • 4. Delegaty................................................................................... 74 Delegaty zbiorowe ...................................................................................74 Zdarzenia................................................................................. 76 Definiowanie delegata dla zdarzenia....................................................76 Przechowywanie danych zdarzenia z wykorzystaniem klasy EventArgs..................................................................................................76 Deklaracja i wywoływanie zdarzenia ...................................................77 Reagowanie na zdarzenie z wykorzystaniem procedury obsługi zdarzenia .....................................................................................78 Akcesory zdarzenia .................................................................................79 Przeciążanie operatorów.......................................................... 80 Implementacja równości wartości .........................................................80 Logiczne pary operatorów......................................................................82 Niestandardowe konwersje — jawne i niejawne ................................82 Operatory przeciążalne pośrednio ........................................................83 Instrukcje try i wyjątki ........................................................... 84 Wyjątki.......................................................................................................84 Klauzula catch ..........................................................................................86 Blok finally ................................................................................................87 Główne właściwości klasy System.Exception......................................88 Atrybuty .................................................................................. 89 Klasy atrybutów .......................................................................................90 Parametry nazwane i pozycyjne............................................................90 Elementy docelowe atrybutów ..............................................................91 Zastosowanie kilku atrybutów ..............................................................92 Kod niebezpieczny i wskaźniki ............................................... 92 Podstawowe informacje o wskaźnikach...............................................92 Kod niebezpieczny...................................................................................93 Instrukcja fixed .........................................................................................94 Operator wskaźnikowego dostępu do składowych ...........................95 Słowo kluczowe stackalloc .....................................................................95 Void* ..........................................................................................................96 Wskaźniki do kodu niezarządzanego...................................................96 Dyrektywy preprocesora ......................................................... 97
  • 5. Opis biblioteki Framework Class Library............................... 98 Typy rdzenne............................................................................................99 Tekst .........................................................................................................100 Kolekcje....................................................................................................100 Strumienie i operacje wejścia-wyjścia .................................................101 Praca sieciowa.........................................................................................101 Wątki........................................................................................................102 Bezpieczeństwo ......................................................................................102 Refleksje i metadane ..............................................................................103 Złożenia ...................................................................................................104 Serializacja...............................................................................................104 Zdalne wykorzystanie obiektów .........................................................104 Usługi WWW..........................................................................................105 Dostęp do danych ..................................................................................106 XML..........................................................................................................106 Grafika .....................................................................................................107 Rozbudowane aplikacje klienckie .......................................................107 Aplikacje WWW.....................................................................................108 Globalizacja .............................................................................................109 Konfiguracja............................................................................................109 Zaawansowane usługi komponentowe ..............................................109 Diagnostyka i testowanie......................................................................110 Współpraca z kodem niezarządzanym...............................................110 Obsługa kompilatora i narzędzi ..........................................................111 Funkcje środowiska uruchomieniowego............................................112 Rodzime funkcje systemu operacyjnego ............................................112 Przestrzenie nazw a złożenia................................................ 112 Wyrażenia regularne............................................................. 120 Specyfikatory formatu ........................................................... 124 Specyfikatory formatu wizualnego .....................................................126 Specyfikatory formatu typu DateTime ...............................................127 Opcje kompilatora języka C# ................................................ 129 Istotne narzędzia środowiska .NET ...................................... 134 Skorowidz .............................................................................. 139
  • 6. Opakowywanie i odpakowywanie typów wartościowych Aby można było wykonywać wspólne operacje — przeprowa- dzane zarówno na typach referencyjnych, jak i wartościowych — każdy typ wartościowy posiada odpowiadający mu ukryty typ referencyjny. Zostaje on utworzony w przypadku przypisania typu wartościowego do egzemplarza typu System.Object lub do interfejsu. Proces ten zwany jest opakowywaniem (ang. boxing). Typ wartościowy można rzutować do klasy object (wyjścio- wej klasy bazowej dla wszystkich typów wartościowych i refe- rencyjnych) lub do implementowanego przez niego interfejsu. W zaprezentowanym tu przykładzie opakowujemy typ warto- ściowy int w odpowiadający mu typ referencyjny, a następnie odpakowujemy go: class Test { static void Main () { int x = 9; object o = x; // opakuj typ int int y = (int)o; // odpakuj typ int } } Podczas opakowywania typu wartościowego tworzony jest nowy typ referencyjny, który przechowywać będzie kopię opakowy- wanego typu. Operacja odpakowania powoduje przekopiowanie wartości z typu referencyjnego z powrotem do typu wartościo- wego. Wymaga ona jawnego rzutowania, podczas którego wyko- nywane jest sprawdzenie, czy docelowy typ wartościowy jest zgodny z typem zawartym w typie referencyjnym. W przypadku niepomyślnego wyniku tego sprawdzenia zgłaszany jest wyjątek InvalidCastException. Nie musimy się martwić o to, co stanie się z opakowanymi obiektami, gdy przestaniemy z nich korzy- Typy predefiniowane 3
  • 7. stać — poradzi sobie z nimi za nas mechanizm odśmiecania pamięci. Dobrym przykładem operacji opakowania i odpakowania jest za- stosowanie klas kolekcji (ang. collection classes). W następującym fragmencie kodu wykorzystujemy klasę Queue w połączeniu z typami wartościowymi: using System; using System.Collections; class Test { static void Main () { Queue q = new Queue (); q.Enqueue (1); // opakuj wartość typu int q.Enqueue (2); // opakuj wartość typu int Console.WriteLine ((int)q.Dequeue()); // odpakuj wartość typu int Console.WriteLine ((int)q.Dequeue()); // odpakuj wartość typu int } } Typy predefiniowane Wszystkie typy predefiniowane w języku C# są nazwami zastęp- czymi typów występujących w przestrzeni nazw System. Na przykład, pomiędzy następującymi dwoma instrukcjami istnieje jedynie różnica składniowa: int i = 5; System.Int32 i = 5; Typy całkowite Typy całkowite oraz ich właściwości przedstawia zamieszczona poniżej tabela. 4 C#. Leksykon kieszonkowy
  • 8. W przypadku typów całkowitych bez znaku, o szerokości n bi- tów, możliwe wartości należą do zakresu od 0 do 2n–1. W przy- padku typów całkowitych ze znakiem, o takiej samej szerokości Typ w języku C# Typ systemowy Rozmiar Ze znakiem sbyte System.SByte 1 bajt Tak short System.Int16 2 bajty Tak int System.Int32 4 bajty Tak long System.Int64 8 bajtów Tak byte System.Byte 1 bajt Nie ushort System.UInt16 2 bajty Nie uint System.UInt32 4 bajty Nie ulong System.UInt64 8 bajtów Nie (n bitów), możliwe wartości mieszczą się w zakresie od –2n–1 do 2n–1–1. W literałach całkowitych stosować można notację dzie- siętną lub szesnastkową: int x = 5; ulong y = 0x1234AF; // w przypadku liczb szesnastkowych stosujemy przedrostek 0x W przypadku, gdy dany literał całkowity jest poprawny dla kilku możliwych typów całkowitych, typ domyślny wybierany jest w następującej kolejności: int, uint, long oraz ulong. W celu jawnego określenia wybranego typu można użyć następujących przyrostków: U uint lub ulong L long lub ulong UL ulong Typy predefiniowane 5
  • 9. Konwersje całkowite Niejawna konwersja pomiędzy typami całkowitymi jest dozwo- lona w przypadku, gdy typ, na który chcemy konwertować, zawiera wszystkie możliwe wartości typu konwertowanego. W przeciwnym razie konieczna jest konwersja jawna. Możemy, na przykład, niejawnie skonwertować typ int na typ long, lecz typ int na typ short musimy już konwertować jawnie: int x = 123456; long y = x; // konwersja niejawna, nie ma utraty informacji short z = (short)x; // konwersja jawna, wartość x zostaje "obcięta" Typy zmiennoprzecinkowe Typ w języku C# Typ systemowy Rozmiar float System.Single 4 bajty double System.Double 8 bajtów Typ float może pomieścić wartości z zakresu od około ±1,5×10–45 do około ±3,4×1038, z dokładnością do siedmiu cyfr znaczących. Typ double może pomieścić wartości z zakresu od około ±5,0× 10–324 do około ±1,7×10308, z dokładnością do 15 – 16 cyfr zna- czących. Typy zmiennoprzecinkowe mogą przechowywać wartości spe- cjalnie +0, –0, +∞, –∞, NaN (ang. not a number — wartość nielicz- bowa). Reprezentują one wyniki takich operacji matematycz- nych jak dzielenie przez zero. Typy float oraz double stanowią implementację specyfikacji typów formatu IEEE 754, obsługiwaną przez prawie wszystkie procesory, a zdefiniowaną przez orga- nizację IEEE w witrynie http://www.ieee.org. 6 C#. Leksykon kieszonkowy
  • 10. W literałach zmiennoprzecinkowych stosować można notację dziesiętną lub wykładniczą. Literał typu float wymaga dołą- czenia przyrostka f lub F. Do literału typu double można (lecz nie jest to koniecznie) dodać przyrostek d lub D. float x = 9.81f; double y = 7E-02; // 0.07 Konwersje zmiennoprzecinkowe Niejawna konwersja typu float na typ double nie powoduje utraty informacji i jest dozwolona — lecz nigdy na odwrót. Dla zapewnienia czytelności dozwolona jest również konwersja typów int, uint i long na typ float oraz typu long na typ double: int sila = 2; int przesuniecie = 3; float x = 9.53f * sila - przesuniecie; Jeśli w przykładzie tym użyjemy większych wartości, może na- stąpić utrata precyzji. Jednak możliwy zakres wartości nie jest okrojony, ponieważ najniższa i najwyższa wartość zarówno typu float, jak i double, przekraczają najniższą i najwyższą wartość typów int, uint czy long. Wszystkie pozostałe konwersje po- między typami całkowitymi a zmiennoprzecinkowymi muszą być jawne: float x = 3.53f; int przesuniecie = (int)x; Typ dziesiętny (decimal) Typ decimal może przechowywać wartości z zakresu od ±1,0× 10–28 do około ±7,9×1028, przy użyciu 28 – 29 cyfr znaczących. Typ decimal zawiera 28 cyfr oraz położenie przecinka oddzie- lającego części dziesiętne. W przeciwieństwie do wartości zmien- Typy predefiniowane 7
  • 11. noprzecinkowej typ ten charakteryzuje się większą dokładnością, lecz mniejszym zakresem. Przydatny jest on zwykle w oblicze- niach finansowych, gdzie połączenie jego wysokiej dokładności oraz możliwości zapisania liczby dziesiętnej bez błędów zaokrą- glenia jest bardzo cenne. Na przykład liczba 0,1 zostanie za pomo- cą typu decimal przedstawiona dokładnie, lecz jeśli użyjemy do jej zapisania typu zmiennoprzecinkowego, jej reprezentacją będzie liczba dwójkowa okresowa. W przypadku typu decimal nie istnieją pojęcia wartości +0, –0, +∞, –∞ czy NaN. Literał dziesiętny wymaga dołączenia przyrostka m lub M. decimal x = 80603.454327m; // przechowuje dokładną wartość Konwersje typu decimal Dozwolona jest niejawna konwersja wszystkich typów całko- witych na typ dziesiętny (decimal), ponieważ typ ten repre- zentować może dowolną wartość całkowitą. Konwersja typu decimal na typ zmiennoprzecinkowy (i odwrotnie) wymaga konwersji jawnej, ponieważ typy zmiennoprzecinkowe posia- dają większy zakres niż typ dziesiętny, ten zaś posiada większą dokładność niż typy zmiennoprzecinkowe. Typ znakowy (char) Typ w języku C# Typ systemowy Rozmiar char System.Char 2 bajty Typ char reprezentuje znak w formacie Unicode. Literał typu char może być albo znakiem prostym, albo znakiem w forma- cie Unicode, albo znakiem sterującym (ang. escape character). We wszystkich tych przypadkach użyty jako taki literał znak powi- nien być ujęty w apostrofy: 8 C#. Leksykon kieszonkowy
  • 12. 'A' // znak prosty 'u0041' // znak w kodzie Unicode 'x0041' // znak w kodzie szesnastkowym unsigned short 'n' // znak sekwencji sterującej Znaki sekwencji sterującej zebrano w tabeli 1. Tabela 1. Znaki sekwencji sterującej Znak Znaczenie Wartość ' Apostrof 0x0027 " Cudzysłów 0x0022 Lewy ukośnik 0x005C 0 Zero 0x0000 a Alarm 0x0007 b Znak cofania 0x0008 f Wysuw strony 0x000C n Nowy wiersz 0x000A r Powrót karetki 0x000D t Tabulacja pozioma 0x0009 v Tabulacja pionowa 0x000B Konwersje typu char Niejawna konwersja typu char na większość typów numerycz- nych jest zwykle wykonywana, przy czym jest ona zależna od tego, czy dany typ numeryczny może pomieścić typ short bez znaku. Jeśli nie — konieczna jest konwersja jawna. Typ logiczny (bool) Typ w języku C# Typ systemowy Rozmiar Typy predefiniowane 9
  • 13. bool System.Boolean 1 bajt/2 bajty Typ bool jest wartością logiczną, której przypisać można literał true lub false. Chociaż wartość boolowska wymaga tylko jednego bitu (0 lub 1), zajmuje ona 1 bajt pamięci, gdyż jest to minimalna porcja, która może podlegać adresowaniu w przypadku większości architektur procesorów. Każdy element w tablicy boolowskiej zajmuje dwa bajty pamięci. Konwersje typu bool Nie są możliwe jakiekolwiek konwersje wartości boolowskich na typy numeryczne i odwrotnie. Typ object Typ w języku C# Typ systemowy Rozmiar object System.Object 0-bajtowy/8-bajtowy narzut Klasa object jest wyjściowym typem bazowym zarówno dla typów wartościowych, jak i referencyjnych. Typy wartościowe nie zawierają narzutu pamięci pochodzącego od obiektu. Typy referencyjne, które przechowywane są na stercie, z natury wy- magają narzutu. W środowisku uruchomieniowym .NET egzem- plarz typu referencyjnego posiada 8-bajtowy narzut, który zawiera typ obiektu, a także informacje tymczasowe, dotyczące na przy- kład stanu blokady synchronizacji lub tego, czy dany obiekt został zabezpieczony przed usunięciem przez mechanizm odśmiecania pamięci. Warto wiedzieć, że każda referencja do egzemplarza typu referencyjnego zajmuje 4 bajty pamięci. 10 C#. Leksykon kieszonkowy