Tytuł oryginału: C# 5.0 Pocket Reference: Instant Help for C# 5.0 Programmers
Tłumaczenie: Przemysław Szeremiota
ISBN: 978-83-246-6273-9
© 2013 Helion S.A.
Authorized Polish translation of the English edition C# 5.0 Pocket Reference,
First Edition ISBN 9781449320171 © 2012 Joseph Albahari, Ben Albahari
This translation is published and sold by permission of O’Reilly Media, Inc., which
owns or controls all rights to publish and sell the same.
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.
Wydawnictwo HELION dołożyło wszelkich starań, by zawarte
w tej książce informacje były kompletne i rzetelne. Nie bierze
jednak żadnej odpowiedzialności ani za ich wykorzystanie,
ani za związane z tym ewentualne naruszenie praw patentowych
lub autorskich. Wydawnictwo HELION nie ponosi również żadnej odpowiedzialności
za ewentualne szkody wynikłe z wykorzystania informacji zawartych w książce.
Wydawnictwo HELION
ul. Kościuszki 1c, 44-100 GLIWICE
tel. 32 231 22 19, 32 230 98 63
e-mail: helion@helion.pl
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/ch5lk3
Możesz tam wpisać swoje uwagi, spostrzeżenia, recenzję.
Printed in Poland.
3
Spis treļci
Leksykon kieszonkowy
5
Konwencje typograficzne
5
Korzystanie z przykäadowych programów
6
Pierwszy program w C#
7
Skäadnia
10
System typów
13
Typy liczbowe
22
Typ wartoĈci logicznych i operatory logiczne
29
Znaki i ciñgi znaków
31
Tablice
34
Zmienne i parametry
38
Operatory i wyraĔenia
46
Instrukcje
51
Przestrzenie nazw
58
Klasy
62
Dziedziczenie
72
Typ object
80
Struktury
84
Modyfikatory dostöpu
85
Interfejsy
87
Typy wyliczeniowe
90
Typy zagnieĔdĔone
92
Uogólnienia
93
Delegaty
101
Zdarzenia
107
WyraĔenia lambda
113
Metody anonimowe
116
Wyjñtki i instrukcja try
117
Enumeratory i iteratory
124
Typy z dopuszczalnñ wartoĈciñ pustñ
129
4
_
Spis treļci
PrzeciñĔanie operatorów
134
Metody rozszerzajñce
137
Typy anonimowe
139
LINQ
139
Wiñzanie dynamiczne
163
Atrybuty
171
Atrybuty wywoäania
175
Funkcje asynchroniczne
176
WskaĒniki i kod nienadzorowany
185
Dyrektywy preprocesora
189
Dokumentacja XML
191
O autorach
195
Skorowidz
197
Wiézanie dynamiczne _ 163
Wiézanie dynamiczne
Wiñzanie dynamiczne
oznacza przesuniöcie momentu wiñzania — pro-
cesu ustalania typów, skäadowych i wywoäaþ — od czasu kompilacji
do czasu wykonania programu. Wiñzanie dynamiczne zostaäo wpro-
wadzone do jözyka C# w wersji 4.0; ma zastosowanie, kiedy programista
wie, Ĕe pewna metoda, skäadowa czy operacja istnieje, ale kompilator nie
ma o niej informacji. Do takich sytuacji dochodzi czösto w ramach
interoperacji z jözykami dynamicznymi (jak IronPython) i obiektami
COM, a takĔe w sytuacjach typowych dla zastosowaþ mechanizmów
refleksji.
Typ dynamiczny jest deklarowany z kontekstowym säowem klu-
czowym
dynamic
:
dynamic d = GetSomeObject();
d.Quack();
Typ dynamiczny nakazuje kompilatorowi rozluĒniè kontrolö typów;
programista oczekuje, Ĕe w czasie wykonania zmienna typu
d
bödzie
posiadaäa metodö
Quack
. Jedyna trudnoĈè w tym, Ĕe w czasie kompi-
lacji nie moĔna tego potwierdziè. PoniewaĔ
d
jest zmiennñ typu dy-
namicznego, kompilator opóĒni wiñzanie wywoäania metody
Quack
na rzecz
d
do czasu wykonania programu. Aby lepiej zrozumieè, co to
oznacza, naleĔaäoby zdefiniowaè rozróĔnienie pomiödzy wiñzaniem
statycznym
i dynamicznym.
Wiézanie statyczne a wiézanie dynamiczne
Klasycznym przykäadem wiñzania jest odwzorowanie nazwy wystö-
pujñcej w kompilowanym wyraĔeniu na konkretnñ metodö czy skäa-
dowñ. Na przykäad w poniĔszym wyraĔeniu kompilator musi odszukaè
implementacjö metody o nazwie
Quack
:
d.Quack();
ZaäóĔmy, Ĕe statyczny typ
d
to
Duck
:
Duck d = ...
d.Quack();
W najprostszym przypadku kompilator dokonuje wiñzania poprzez
wyszukanie bezparametrowej metody
Quack
w klasie
Duck
. JeĈli to siö
nie powiedzie, kompilator rozszerzy poszukiwania na metody z pa-
rametrami opcjonalnymi, metody typów bazowych, a wreszcie metody
rozszerzajñce, które przyjmujñ zmiennñ typu
Duck
w miejsce pierwsze-
go argumentu wywoäania. JeĈli i to nie doprowadzi do dopasowania
164 _ C# 5.0. Leksykon kieszonkowy
wywoäania do metody, kompilator zgäosi bäñd kompilacji. Jak widaè,
niezaleĔnie od tego, jaka metoda zostanie ostatecznie wybrana do
realizacji wywoäania, wybór ten jest dokonywany przez kompilator,
a samo dopasowanie wywoäania i metody bazuje wyäñcznie na infor-
macji dostöpnej statycznie, to znaczy na widocznych w kodzie defi-
nicjach typów operandów (tutaj
d
). Tyle o wiñzaniu statycznym.
Zmieþmy teraz statyczny typ zmiennej
d
na typ
object
:
object d = ...
d.Quack();
Wywoäanie
Quack
sprowokuje teraz bäñd kompilacji, poniewaĔ choè
wartoĈè przechowywana w
d
moĔe zawieraè metodö
Quack
, kompi-
lator nie moĔe jej znaè, gdyĔ jedynñ informacjñ, jakñ dysponuje, jest
najogólniejszy z moĔliwych typ zmiennej
object
. Co innego, jeĈli typ
d
zostanie okreĈlony jako
dynamic
:
dynamic d = ...
d.Quack();
Typ dynamiczny jest trochö jak typ
object
, to znaczy równie maäo
mówi o zmiennej
d
. RóĔnica polega na tym, Ĕe typ dynamiczny moĔe
byè uĔywany w sposób nieweryfikowalny w czasie kompilacji. Opera-
cje na obiekcie deklarowanym jako
dynamic
bödñ rozstrzygane w opar-
ciu o typ obiektu ustalony w czasie wykonania programu, a nie typ
z czasu kompilacji. Kompilator, napotkawszy wyraĔenie wiñzane
dynamicznie (czyli wyraĔenie, w którym wystöpuje dowolna war-
toĈè typu dynamicznego), ogranicza siö jedynie do takiego obrobienia
wyraĔenia, Ĕeby wiñzanie mogäo zostaè rozstrzygniöte w czasie wy-
konania programu.
W czasie wykonania, jeĈli okaĔe siö, Ĕe obiekt dynamiczny imple-
mentuje interfejs
IDynamicMetaObjectProvider
, to wäaĈnie ten interfejs zo-
stanie wykorzystany do rozstrzygniöcia dopasowania; w innym przy-
padku Ĉrodowisko wykonawcze rozstrzygnie wywoäanie analogicznie,
jak zrobiäby to kompilator w czasie kompilacji, to znaczy przeszuka
aktualny typ obiektu, jego typy bazowe oraz metody rozszerzajñce.
Rozstrzyganie w oparciu o implementacjö interfejsu
IdynamicMetaObject
´
Binding
nazywamy wiñzaniem ze wskazania albo wiñzaniem niestandar-
dowym
(ang. custom binding), a rozstrzyganie w oparciu o dostöpnñ
w czasie wykonania wiedzö o typie i jego typach bazowych nazy-
wamy wiñzaniem wedäug reguä albo wiñzaniem jözykowym (ang. language
binding
).
Wiézanie dynamiczne _ 165
Wiézanie ze wskazania
Wiñzanie ze wskazania dotyczy przypadku, kiedy obiekt typu dy-
namicznego implementuje interfejs
IDynamicMetaObjectProvider
(IDMOP).
Interfejs ten moĔna co prawda implementowaè w typach pisanych
w jözyku C#, ale najczöĈciej dotyczy to obiektów pozyskiwanych z in-
nych jözyków dynamicznych z rodziny .NET, operujñcych w ramach
Ĉrodowiska wykonawczego Dynamic Language Runtime (DLR) (jak
IronPython czy IronRuby). Obiekty pochodzñce z tych jözyków nie-
jawnie implementujñ interfejs IDMOP jako sposób bezpoĈredniego
kontrolowania znaczenia operacji, które bödñ na tych obiektach
wykonywane. Oto prosty przykäad:
using System;
using System.Dynamic;
public class Test
{
static void Main()
{
dynamic d = new Duck();
d.Quack(); // wywoáano Quack
d.Waddle(); // wywoáano Waddle
}
}
public class Duck : DynamicObject
{
public override bool TryInvokeMember (
InvokeMemberBinder binder, object[] args,
out object result)
{
Console.WriteLine ("wywoïano " + binder.Name);
result = null;
return true;
}
}
Klasa
Duck
w istocie nie posiada metody
Quack
, a jedynie wskazanie
wiñzania, dziöki któremu przechwytuje i interpretuje wywoäania wszyst-
kich metod na rzecz obiektów tej klasy.
Wiñzania ze wskazania sñ omawiane szerzej w 20. rozdziale ksiñĔki
C# 5.0 in a Nutshell
.
Wiézanie jýzykowe
Z wiñzaniem jözykowym mamy do czynienia w przypadku obiektów
dynamicznych, które nie implementujñ interfejsu
IdynamicMetaObject
´
Provider
. Wiñzanie jözykowe stosuje siö przede wszystkim do ob-
166 _ C# 5.0. Leksykon kieszonkowy
chodzenia niedogodnoĈci niedoskonale zaprojektowanych typów,
a takĔe niektórych ograniczeþ wäaĈciwych systemowi typów plat-
formy .NET. Typowym problemem jest na przykäad brak jednolitego
interfejsu typów liczbowych (wiemy juĔ, Ĕe wiñzanie dynamiczne
dotyczy metod; dopowiedzmy, Ĕe dotyczy równieĔ operatorów):
static dynamic Mean (dynamic x, dynamic y)
{
return (x + y) / 2;
}
static void Main()
{
int x = 3, y = 4;
Console.WriteLine (Mean (x, y));
}
W takich przypadkach zalety wiñzania dynamicznego sñ oczywiste,
bo nie trzeba powielaè kodu wspólnych operacji obliczeniowych dla
kaĔdego z rozmaitych typów liczbowych. Wadñ jest natomiast utrata
statycznej kontroli typów, a wiöc i ryzyko zamiany bäödów kompilacji
na wyjñtki czasu wykonania.
Uwaga
Wiñzanie dynamiczne oznacza osäabienie kontroli typów, ale
tylko statycznej — kontrola dynamiczna wciñĔ jest obecna. Inaczej
niĔ w mechanizmach refleksji, wiñzanie dynamiczne nie pozwala
np. na ominiöcie reguä widocznoĈci skäadowych.
Dynamiczne wiñzanie jözykowe celowo ma moĔliwie blisko odwzo-
rowywaè wiñzanie statyczne (a wiöc dziaäa tak, jak dziaäaäby kom-
pilator, gdyby tylko typ dynamiczny byä mu znany statycznie). Za-
chowanie programu z poprzedniego przykäadu byäoby identyczne,
gdybyĈmy jawnie oprogramowali metodö
Mean
do operowania na ty-
pie
int
. Najbardziej znamienna róĔnica pomiödzy wiñzaniem dyna-
micznym i statycznym dotyczy metod rozszerzajñcych; bödzie o tym
mowa w punkcie „Funkcje niedynamiczne”.
Uwaga
Wiñzanie dynamiczne wiñĔe siö z narzutem wydajnoĈci wykonania
programu, ale dziöki mechanizmom cachowania DLR powtarzajñ-
ce siö wykonania tych samych wyraĔeþ wiñzanych dynamicznie sñ
skutecznie optymalizowane, co pozwala stosunkowo wydajnie
wykonywaè wywoäania dynamiczne na przykäad w pötlach. Opty-
malizacja redukuje narzut rozstrzygniöcia prostego wyraĔenia dy-
namicznego do okoäo 100 ns (mowa o wspóäczesnym komputerze).
Wiézanie dynamiczne _ 167
Wyjétek RuntimeBinderException
JeĈli skäadowej nie uda siö zwiñzaè dynamicznie, Ĉrodowisko wyko-
nawcze zgäosi wyjñtek
RuntimeBinderException
, bödñcy odpowiednikiem
bäödu czasu kompilacji, ale wykrytym dopiero w czasie wykonania:
dynamic d = 5;
d.Hello(); // wywoáanie zgáosi wyjątek RuntimeBinderException
Wyjñtek zgäoszony w powyĔszym kodzie oznacza, Ĕe typ dynamiczny
(tu
int
) nie posiada metody
Hello
.
Reprezentacja typu dynamicznego
Typ dynamiczny cechuje siö znacznym podobieþstwem do typu
ob-
ject
— Ĉrodowisko traktuje na przykäad poniĔsze porównanie jako
prawdziwe:
typeof (dynamic) == typeof (object)
Zasada ta rozciñga siö równieĔ na typy konkretyzowane typem dy-
namicznym i typy tablicowe:
typeof (List<dynamic>) == typeof (List<object>)
typeof (dynamic[]) == typeof (object[])
Tak jak w przypadku referencji
object
, referencja
dynamic
moĔe odno-
siè siö do obiektu dowolnego typu (za wyjñtkiem typów wskaĒni-
kowych):
dynamic x = "ahoj";
Console.WriteLine (x.GetType().Name); // String
x = 123; // nie ma báĊdu (choü to ta sama zmienna)
Console.WriteLine (x.GetType().Name); // Int32
Pomiödzy referencjami
object
i referencjami
dynamic
strukturalnie nie
ma Ĕadnej róĔnicy. Referencja
dynamic
pozwala po prostu na dynamiczne
wiñzanie operacji na obiekcie, do którego siö odnosi. MoĔna nawet
przekonwertowaè obiekt
object
na typ
dynamic
i nastöpnie wykonaè na
nim dowolnñ operacjö dynamicznñ:
object o = new System.Text.StringBuilder();
dynamic d = o;
d.Append ("ahoj");
Console.WriteLine (o); // ahoj
168 _ C# 5.0. Leksykon kieszonkowy
Konwersje typów dynamicznych
Typ dynamiczny daje siö niejawnie skonwertowaè na dowolny inny
typ, a takĔe dowolny inny typ moĔna niejawnie konwertowaè na typ
dynamiczny. Aby jednak konwersja byäa skuteczna, wäaĈciwy typ
obiektu dynamicznego musi faktycznie daè siö skonwertowaè na
docelowy typ statyczny.
PoniĔszy kod sprowokuje wyjñtek
RuntimeBinderException
, poniewaĔ
typ
int
nie daje siö niejawnie konwertowaè na typ
short
:
int i = 7;
dynamic d = i;
long l = d; // OK — niejawna konwersja dziaáa
short j = d; // wyjątek RuntimeBinderException
var a dynamic
Typy
var
i
dynamic
wydajñ siö podobne, ale w istocie zasadniczo siö
róĔniñ:
x
var
oznacza: „niech kompilator okreĈli faktyczny typ”;
x
dynamic
oznacza: „niech Ĉrodowisko wykonawcze okreĈli faktycz-
ny typ”.
Spójrzmy:
dynamic x = "ahoj"; // statyczny typ to dynamic
var y = "ahoj"; // statyczny typ to string
int i = x; // wyjątek wykonania
int j = y; // báąd kompilacji
Wyrażenia dynamiczne
Wiñzanie dynamiczne moĔe dotyczyè pól, wäaĈciwoĈci, metod, zda-
rzeþ, konstruktorów, indekserów, operatorów i konwersji.
Nie moĔna pobraè wyniku wyraĔenia dynamicznego z typem zwra-
canym
void
; podobnie jest w przypadku wyraĔeþ statycznych. RóĔnica
dotyczy momentu wystñpienia bäödu (tutaj w czasie wykonania pro-
gramu).
WyraĔenia dynamiczne to najczöĈciej takie wyraĔenia, w których
uczestniczñ dynamiczne operandy, a to dlatego, Ĕe najczöĈciej niedo-
stöpnoĈè statycznej informacji o typie daje efekt kaskadowy:
dynamic x = 2;
var y = x * 3; // statyczny typ y to dynamic
Wiézanie dynamiczne _ 169
Od tej reguäy jest kilka oczywistych wyjñtków. Po pierwsze, rzuto-
wanie typu dynamicznego na typ statyczny daje wyraĔenie statyczne.
Po drugie, wywoäanie konstruktora zawsze daje wyraĔenie statyczne,
nawet jeĈli argumenty wywoäania majñ typy dynamiczne.
Istnieje teĔ kilka przypadków brzegowych, w których wyraĔenie za-
wierajñce argument dynamiczny samo jest statyczne; zaliczymy tu
przekazanie indeksu do tablicy i wyraĔenia tworzenia delegatów.
Rozstrzyganie przeciéżeħ skĥadowych dynamicznych
Klasycznym przykäadem uĔycia wiñzania dynamicznego jest dyna-
miczny odbiornik komunikatów, to znaczy obiekt dynamiczny jako
podmiot dynamicznego wywoäania metody:
dynamic x = ...;
x.Foo (123); // x "odbiera" wywoáania
Jednak zakres zastosowaþ typów dynamicznych jest szerszy i obejmuje
takĔe dynamiczne wiñzanie argumentów wywoäania metody, gdzie
rozstrzygniöcie wywoäania z dynamicznymi argumentami jest przesu-
wane z czasu kompilacji do czasu wykonania:
class Program
{
static void Foo (int x) { Console.WriteLine ("1"); }
static void Foo (string x) { Console.WriteLine ("2"); }
static void Main()
{
dynamic x = 5;
dynamic y = "arbuz";
Foo (x); // 1
Foo (y); // 2
}
}
Rozstrzyganie przeciñĔenia w czasie wykonania jest równieĔ okreĈlane
mianem wielorozprowadzania albo multimetody (ang. multiple dispatch),
a stosuje siö je miödzy innymi w implementacjach wzorca projektowe-
go Wizytator.
W przypadku dynamicznych argumentów wywoäania metody (ale
bez dynamicznego podmiotu wywoäania) kompilator moĔe przepro-
wadziè podstawowe sprawdziany skutecznoĈci wywoäania dynamicz-
nego: sprawdzane jest wiöc choèby istnienie funkcji z odpowiedniñ
nazwñ i liczbñ parametrów. JeĈli takiej metody nie ma, wiadomo, Ĕe
rozstrzygniöcie dynamiczne równieĔ bödzie nieudane, wiöc kompilator
zgäasza bäñd kompilacji.
170 _ C# 5.0. Leksykon kieszonkowy
W przypadku wywoäaþ z argumentami typów dynamicznych oraz
statycznych ostateczny wybór metody bödzie odzwierciedlaä mie-
szaninö decyzji podjötych statycznie i dynamicznie:
static void X(object x, object y) {Console.Write("oo");}
static void X(object x, string y) {Console.Write("os");}
static void X(string x, object y) {Console.Write("so");}
static void X(string x, string y) {Console.Write("ss");}
static void Main()
{
object o = "ahoj";
dynamic d = "pa, pa";
X (o, d); // os
}
Wywoäanie
X(o,d)
jest wiñzane dynamicznie, poniewaĔ jeden z jego
argumentów ma typ
dynamic
. Ale skoro typ argumentu
o
jest statyczny,
juĔ w czasie kompilacji wiadomo, Ĕe w grö wchodzñ jedynie dwa
pierwsze przeciñĔenia
X
. Ostatecznie wybór padnie na drugie z nich,
a to ze wzglödu na dokäadnie dopasowany statyczny typ
o
i dokäadnie
dopasowany dynamiczny typ
d
. Innymi säowy, kompilator usiäuje
maksymalnie wykorzystaè statycznñ informacjö o typach nawet w przy-
padku wyraĔeþ dynamicznych.
Funkcje niedynamiczne
Niektórych funkcji nie moĔna wywoäaè dynamicznie. Dotyczy to:
x metod rozszerzajñcych (ze skäadniñ metod rozszerzajñcych),
x dowolnych skäadowych interfejsu (w przypadku wywoäaþ
przez interfejs),
x skäadowych typów bazowych przykrytych typami pochodnymi.
NiemoĔnoĈè wynika z tego, Ĕe wiñzanie dynamiczne potrzebuje dwóch
informacji: nazwy metody do wywoäania oraz obiektu, na rzecz które-
go ma siö odbyè wywoäanie. Ale w powyĔszych przypadkach uczestni-
czy dodatkowy typ, znany wyäñcznie w czasie kompilacji. Jözyk C#
w wersji 5.0 nie daje moĔliwoĈci dynamicznego okreĈlenia dodatko-
wego typu.
W przypadku wywoäania metody rozszerzajñcej tym dodatkowym
typem jest klasa rozszerzajñca, wybierana niejawnie na bazie dyrektyw
using
widocznych w kodzie Ēródäowym (a wiöc widocznych tylko
w czasie kompilacji). Przy wywoäaniach za poĈrednictwem interfejsu
dodatkowy typ jest komunikowany jawnñ albo niejawnñ konwersjñ
Atrybuty _ 171
(w przypadku implementacji jawnej nie da siö wywoäaè skäadowej
bez rzutowania na typ interfejsu). Tak samo w przypadku przykry-
wania skäadowych klasy bazowej: dodatkowy typ musi byè okreĈlo-
ny albo poprzez rzutowanie, albo poprzez säowo kluczowe
base
, a oba
sñ widoczne wyäñcznie w czasie kompilacji.
Atrybuty
Znamy juĔ pewnñ metodö oznaczania elementów kodu programu atry-
butami — w postaci modyfikatorów takich jak
virtual
czy
ref
. Konstruk-
cje te sñ wbudowane w jözyk programowania. Tymczasem mechanizm
atrybutów
to rozszerzalny mechanizm przewidziany jako metoda do-
dawania do elementów kodu (zestawów, typów, skäadowych, wartoĈci
zwracanych itd.) wäasnych informacji. RozszerzalnoĈè tego rodzaju jest
wykorzystywana w implementacji usäug integrujñcych siö z samym
systemem typów, bez koniecznoĈci definiowania dla nich nowych,
osobnych säów kluczowych i konstrukcji C#.
Dobrym przykäadem sytuacji uĔycia atrybutów jest serializacja — pro-
ces, w którym dowolny obiekt jest zamieniany na pewnñ umówionñ re-
prezentacjö nadajñcñ siö do utrwalenia, a potem do odzyskania z niej
pierwotnego stanu obiektu. W takim procesie atrybut wystöpujñcy przy
polu moĔe okreĈlaè specyfikö translacji pomiödzy reprezentacjñ tego
pola w C# a reprezentacjñ przyjötñ w formacie serializacji obiektów.
Klasy atrybutów
Atrybut jest definiowany poprzez klasö, która koniecznie musi dzie-
dziczyè (wprost albo poĈrednio) z abstrakcyjnej klasy bazowej
System.
´
Attribute
. Doäñczenie atrybutu do elementu kodu programu polega na
podaniu nazwy atrybutu w nawiasach kwadratowych przed oznacza-
nym elementem kodu. Na przykäad poniĔszy kod doäñcza do klasy
Foo
atrybut
ObsoleteAttribute
:
[ObsoleteAttribute]
public class Foo { … }
Taki atrybut bödzie rozpoznany przez kompilator i przy kompilacji spo-
woduje wyprowadzenie ostrzeĔenia o odwoäaniu do typu albo skäado-
wej, oznaczonych jako przestarzaäe (ang. obsolete). Przyjöäo siö, Ĕe
wszystkie nazwy typów atrybutów majñ w sobie säowo „Attribute”.
W C# ta konwencja jest honorowana do tego stopnia, Ĕe przy doäñcza-
niu atrybutu do elementu w nawiasach kwadratowych nie trzeba juĔ
podawaè przyrostka
Attribute
:
197
Skorowidz
A
abstract class, Patrz: klasa
abstrakcyjna
agregator zadaþ, 183
aplikacja, 9, 10
argument, 8
nazwany, 44
typowy, 94
assembly, Patrz: zestaw
atrybut, 171
CLSCompliant, 173
obiekt docelowy, 172
odwoäania w czasie wykonania,
174
wäasny, 173
wywoäania, 175
XmlElementAttribute, 172
attribute target, Patrz: atrybut obiekt
docelowy
B
biaäa spacja, 34
biblioteka, 9, 10
blok
catch, 117, 118, 120
finally, 117, 119, 120
instrukcji, Patrz: instrukcja blok,
Patrz:
instrukcja blok
try, 117, 118, 120
bäñd wejĈcia-wyjĈcia, 120
boxing, Patrz: pakowanie
broadcaster, Patrz: nadawca
C
callback, Patrz: wywoäanie zwrotne
caller info attributes, Patrz: atrybut
wywoäania
captured variable, Patrz: zmienna
wciñgniöta
cast, Patrz: rzutowanie
ciñg znaków, Patrz: znak ciñg
closure, Patrz: domkniöcie
CLR, 22, 82, 177
CLS, 173
Common Language Runtime,
Patrz:
CLR
Common Language Specification,
Patrz:
CLS
conditional operator, Patrz: operator
warunkowy
constraint, Patrz: ograniczenie
constructor, Patrz: konstruktor
D
dane
skäadowe, 15
statyczne, 99
wejĈciowe, 8, 63
wyjĈciowe, 8
deferred execution, Patrz: operator
wykonanie opóĒnione
delegat, 18, 96, 101, 102
Action, 105, 114
Func, 105, 114
instancja, 101, 102
metoda instancji, 104
pole prywatne, 112
typ, 101, 102
uogólnienie, 100
uogólniony, 105, 107, 114
wielokrotny, 103, 104
zmienna, 102
delegatów, 184
domkniöcie, 114, 115
dostöpnoĈè, 85
198 _ Skorowidz
downcasting, Patrz: referencja
rzutowanie w dóä
dynamic type checking, Patrz: typ
kontrola dynamiczna
dyrektywa
preprocesora, 189, 190, 191
using, 60
warunkowa, 189
dziedziczenie, 72, 73, 78, 79, 84, 87,
88, 93
E
element, 140
enumerator, 124, 125
escape sequence, Patrz: znak sterujñcy
event, Patrz: zdarzenie
F
funkcja, 51
finalizator, 8, 62, 70, 84
finalizer, Patrz: finalizator
fluent syntax, Patrz: skäadnia
kaskadowa
fully qualified type name, Patrz: typ
nazwa w peäni kwalifikowana
funkcja, 8
asynchroniczna, 176, 180, 181, 183
niedynamiczna, 170
przesäoniöta, 75
skäadowa, 15
wirtualna, 75
wysokopoziomowa, 7
wywoäanie, 40
G
garbage collector, Patrz: mechanizm
odĈmiecania
generic method, Patrz: metoda
uogólniona
generic type, Patrz: typ uogólniony
H
hermetyzacja, 85
I
identyfikator, 10, 11
IL, 61
iloczyn logiczny, 30
indekser, 8, 62, 68, 87, 95, 168
wirtualny, 75
indexer, Patrz: indekser
inferencja, 23
instancja
konwersja, Patrz: konwersja
skäadowa, 16
instantiation, Patrz: konkretyzacja
instrukcja, 7, 51
blok, 7, 12, 51
break, 57
continue, 57
deklaracji, 51
fixed, 186
foreach, 35, 125
goto, 57, 58
if, 52
zagnieĔdĔona, 53, 54
if..else, 53
iteracyjna, 55
pötli, Patrz: pötla
return, 57, 58, 126, 128
skoku, 57
switch, 54
throw, 57
try, 117
using, 121, 125, 138
warunkowa, 52
wyboru, 54
wyraĔeniowa, 52
yield, 127
yield break, 128
yield return, 126
interfejs, 18, 62, 87, 96
API, 45
deklaracja, 87
IDisposable, 125
IDMOP, 165
IdynamicMetaObjectProvider, 165
IDynamicMetaObjectProvider, 165
IEnumerable, 35, 100, 139, 140
IEnumerator, 87, 100
implementacja, 89
jawna, 88
wirtualna, 89
IQueryable, 140
ISerializable, 89
Spis treļci _
199
kowariantny, 100
rozszerzanie, 88
skäadowa, 170, Patrz: skäadowa
interfejsu
System.
Collections.Generic.IEnumerator,
125
System.Collections.Generic.
´
IEnumerable, 127
System.Collections.Generic.
´
IEnumerator, 127
System.Collections.IEnumerable,
126, 127
System.Collections.IEnumerator,
125, 127
System.IDisposable, 121
Intermediate Language, Patrz: IL
IronPython, 163
iterator, 126, 127, 128
J
jagged array, Patrz: tablica
wyszczerbiona
jözyk
dynamiczny, 163
IronPython, 163
poĈredni, Patrz: IL
K
klasa, 8, 16, 18, 62, 84, 87, 93, 96
abstrakcyjna, 76
atrybut, 62
bazowa, 62, 73, 76, 77, 80
BitArray, 29
dziedziczenie, Patrz: dziedziczenie
Enumerable, 150, 151
instancja
skäadowe, 16
konstruktor, 78
modyfikator, 62
pochodna, 73, 76, 77
statyczna, 16, 70
string, 68
System.Array, 35
System.Attribute, 171
System.EventArgs, 110
System.Exception, 123
System.Linq.Enumerable, 140, 146
System.Text.StringBuilder, 33
TaskCompletionSource, 181
klauzula
catch, 119
inicjalizacji, 56
iteracji, 56
klucz publiczny, 86
kod
eliminacja powtórzeþ, 93
nienadzorowany, 185, 186
platformy, 109
uogólniony, 40
wäasny uĔytkowników, 109
XML, 191
Ēródäowy, 9, 10, 189
kolejka LIFO, Patrz: LIFO
kolizja nazw, 11
komentarz, 13
dokumentujñcy, 191, 192
jednowierszowy, 13
wielowierszowy, 13
kompilacja, 9, 10, 44, 71, 79, 163
/checked+, 26
/unsafe, 185
bäñd, 27, 100, 190
czasu, 25
opcje, 26
ostrzeĔenie, 190
kompilator, 9, 10, 13, 71, 112, 189
konkatenacja, 33
konkretyzacja, 15
konstruktor, 8, 16, 62, 63, 95, 168
bezparametrowy, 44, 64, 69, 79,
84, 85
klasy, 78
bazowej, 77
niejawny, 64
niepubliczny, 64
przeciñĔanie, 64
statyczny, 69, 70
kontekst
nienadzorowany, 180
synchronizacji, 179
unsafe, 39
kontrawariancja, 99, 101, 106, 107
200 _ Skorowidz
konwersja, 17, 73, 168
jawna, 17, 18, 24, 26, 130
liczbowa, 75
niejawna, 17, 18, 24, 130
numeryczna, 100
odpakowywania, 75, 100
przeciñĔanie, 136
typów dynamicznych, 168
uĔytkownika, 75, 100
kowariancja, 99, 100, 101, 106, 107
kropka, 12, 48, 59
kwalifikator, 146, 149
global, 61
kwantyfikator, 143
L
lambda, 48, 51, 113, 114, 116, 178
asynchroniczne, 184
parametr, 113
zmienne
wciñgniöte, 114, 115
zewnötrzne, 114
lambda expression, Patrz: lambda
Language Integrated Query, Patrz:
LINQ
lazy execution, Patrz: operator
wykonanie leniwe
liczba, 8
caäkowita, 15, 18, 21, 24
16-bitowa, 27
8-bitowa, 27
rzeczywista, 23, 24
zaokrñglanie, 28
zmiennoprzecinkowa, 24
LIFO, 80
lift, Patrz: operator poĔyczanie
LINQ, 139
element, Patrz: element
sekwencja, Patrz: sekwencja
LINQPad, 140
lista, 139
literaä, 8, 12
dosäowny ciñgów znaków, 32
liczb
caäkowitych, 23
rzeczywistych, 23
liczbowy, 23
przyrostek, 23
typ, 23
null, Patrz: null
znakowy, 31
M
makrodefinicja, 69
mechanizm
asynchronicznego wywoäania
funkcji, 176
atrybutów, 171
cachowania, 166
jawnego implementowania
skäadowej interfejsu, 88
odĈmiecania, 39, 71, 186
metoda, 7, 8, 9, 15, 62, 63, 66, 87,
96, 168
Aggregate, 148
All, 149
anonimowa, 116, 117, 184
Any, 149
Append, 33
AsEnumerable, 149
AsQueryable, 149
asynchroniczna, 177, 181, 182
Average, 148
BinarySearch, 35
Cast, 149, 162
Combine.System.Delegate, 104
CompareTo, 33
Concat, 148
Contains, 33, 149
Copy, 35
Count, 148
CreateInstance, 35
czöĈciowa, 71, 72
DefaultIfEmpty, 148
deklaracja, 40
Dispose, 121
Distinct, 147
double.IsNaN, 28
ElementAt, 148
ElementAtOrDefault, 148
Empty, 149
EndsWith, 33
Except, 148
Finalize, 71
Spis treļci _
201
Find, 35
Find LastIndex, 35
FindIndex, 35
First, 148
FirstOrDefault, 148
float.IsNaN, 28
GetEnumerator, 125
GetLength, 36
GetType, 82
GetValue, 35
GroupBy, 148, 160
GroupJoin, 147, 156, 157, 158
IndexOf, 33, 35
Insert, 33, 34
instancji, 138
Intersect, 148
Join, 34, 147, 156, 158
Last, 148
LastIndexOf, 33, 35
LastOrDefault, 148
LongCount, 148
Max, 148
Min, 148
MoveNext, 144
nienazwana, 184
object.Equals, 28, 83, 84
object.GetHashCode, 83, 84
object.ReferenceEquals, 83
object.ToString, 84
OfType, 149, 162
OrderBy, 147, 150, 159
OrderByDescending, 147
PadLeft, 34
PadRight, 34
parametr, Patrz: parametr metody
przeciñĔanie, 63, 79
przesäaniana, 76
publiczna, 44
Range, 149
rekurencyjna, 39
Remove, 33, 34
Remove.System.Delegate, 104
Repeat, 149
Replace, 33
Reverse, 147
rozszerzajñca, 137, 138, 150, 151, 170
wywoäanie kaskadowe, 138
Select, 141, 147, 150
SelectMany, 147, 155
SequenceEqual, 149
SetValue, 35
Single, 143, 148
SingleOrDefault, 143, 148
Skip, 147
SkipWhile, 147
Sort, 35
Split, 34
StartsWith, 33
Substring, 34
Sum, 148
sygnatura, 63
Take, 147
TakeWhile, 147
Task.Run, 177
ThenBy, 147, 159
ThenByDescending, 147
ToArray, 149
ToDictionary, 149
ToList, 149
ToLookup, 149
ToLower, 34
ToString, 33
ToUpper, 34
Trim, 34
TrimEnd, 34
TrimStart, 34
Union, 148
uogólniona, 95, 96
WhenAll, 183
Where, 141, 147, 150
wirtualna, 75, 76, 83
wtyczka, 102
Zip, 147, 159
modyfikator
async, 184
dostöpu, 85
internal, 85
new, 77
out, 41, 43, 44, 100
override, 75
params, 43, 44
private, 85
protected, 85
protected internal, 85
public, 85
202 _ Skorowidz
modyfikator
ref, 41, 42, 44, 171
this, 137
unsafe, 179
virtual, 171
multimetoda, 169
multiple dispatch, Patrz: multimetoda
N
nadawca, 107, 108
namespace, Patrz: przestrzeþ nazw
NaN, 27
nawias klamrowy, 12
negacja wartoĈci wyraĔenia
logicznego, 30
nested type, Patrz: typ zagnieĔdĔony
not a number, Patrz: NaN
null, 20, 40, 48, 75, 97, 129, 133
null coalescing operator, Patrz: znak ??
nullable type, 21, Patrz: typ
z dopuszczalnñ wartoĈciñ pustñ
O
obiekt, 39
char, 31
COM, 163
docelowy atrybutu, 172
dynamiczny, 165, 169
inicjalizator, 65
nadzorowany, 186
przeliczalny, 57, 125
referencja, 39
System.Type, 82
tworzenie, 39
zwalnianie ze sterty, 39
obsäuga
bäödów, 117
wyjñtków, 118, 119
odbiornik komunikatów, 169
odpakowywanie, 80, 81
ograniczenie, 97, 98
operacja
arytmetyczna, 25
bitowa, 30
dzielenia, 25
iterowania, 125
na liczbach caäkowitych, 25
przypisania, 13
operand, 46
operator, 8, 12, 46, 62, 95, 168
agregacji, 143, 146, 148
All, 143
alternatywy dla null, 48
Any, 143
arytmetyczny, 25, 92
as, 75
Average, 143
bitowy, 26, 30, 91, 92
checked, 26
Concat, 144
Contains, 143
Count, 143
dekrementacji, 25, 26
dodawania, 92
dostöpu do skäadowej przez
wskaĒnik, 185, 187
dwuargumentowy, 46
eksportu, 146, 149
ElementAt, 142
elementowy, 146, 148
filtrujñcy, 146, 147
First, 142
funkcja, 134
generujñcy, 146, 149
gäówny, 48, 49
grupowania, 146, 148
importu, 146, 149
indeksowania, 33
inkrementacji, 25, 26
is, 75
jednoargumentowy, 46, 49
konkatenacji, 33
konwersji, 146, 149
Last, 142
logiczny, 30
äñczenia, 146, 147, 156
äñcznoĈè, 47
lewostronna, 48
prawostronna, 48
Max, 143
Min, 143
mnoĔenia, 12, 26
new, 16
obliczenia nadzorowanego, 26
odwoäania, 12
Spis treļci _
203
OrderBy, 150
pierwszeþstwo, 47
pierwszorzödny, 46
pobrania adresu, 185
porównania, 13, 28, 29, 83, 92, 132
przeciñĔanie, 135
porzñdkujñcy, 146, 147
poĔyczanie, 131, 132
priorytet, 47, 48
projekcji, 146, 147
przeciñĔanie, 48, 84, 134
przedrostkowy, 25
przypisania, 47, 48, 51
przyrostkowy, 25
relacji, 29, 30, 33, 132
przeciñĔanie, 135
reszty z dzielenia, 25
Reverse, 142
Select, 141, 150
SequenceEquals, 143
Single, 142
sizeof, 92
Skip, 142
Take, 142
trójargumentowy, 46
trójwartoĈciowy, 48, Patrz:
operator warunkowy
typeof, 96
typu wyliczeniowego, 92
unchecked, 26
Union, 144
warunkowy, 30, 48
Where, 141, 150
wykonanie leniwe, 144
wykonanie opóĒnione, 144
wyäuskania, 185, 188
wywoäania metody, 46
z przypisaniem, 47
zapytania, 140, 146
kaskadowego, 149
zbiorów, 144, 146, 148
outer variable, Patrz: zmienna
zewnötrzna
overflow, Patrz: przepeänienie
zakresu
override function, Patrz: funkcja
przesäoniöta
P
pakowanie, 80, 81, 93
parametr, 8, 40, 43
metody, 63
nazwany, 172
opcjonalny, 40, 43, 44, 45
pozycyjny, 172
przekazywany przez referencjö,
38, 42
przekazywany przez wartoĈè, 38,
41, 42
referencyjny, 63
typowy, 93, 95
deklarowanie, 96
kowariantny, 100
wartoĈè domyĈlna, 97
wyjĈciowy, 38, 63
partially qualified name, Patrz:
przestrzeþ nazw czöĈciowa
kwalifikacja nazw
pötla, 55, 115
do-while, 55
for, 34, 55, 56
foreach, 55, 57, 116
while, 55
podklasa, Patrz: klasa pochodna
pole, 40, 62, 66, 95, 168
inicjalizacja, 62
instancji, 38
statyczne, 38
polimorfizm, 73, 106
preprocesor, 189, 190, 191
primary operators, Patrz: operator
pierwszorzödny
primitive type, Patrz: typ:prosty
programowanie
asynchroniczne, 183
programowanie asynchroniczne, 176
property, Patrz: wäaĈciwoĈè
protokóä, 101
przeciñĔanie, 96
przepeänienie zakresu, 25
przestrzeþ nazw, 9, 58, 59, 60
czöĈciowa kwalifikacja nazw, 60
deklaracja, 61
globalna, 59
hierarchia, 59
204 _ Skorowidz
przestrzeþ nazw
import, 60
importowanie, 61, 138
przesäanianie nazw, 61
System, 14, 21
System.Collections, 29, 35, 87
System.Security.Cryptography, 58
Q
query expression, Patrz; wyraĔenie
zapytaniowe
R
rectangular array, Patrz: tablica
regularna
refaktoryzacja, 86
reference type, Patrz: typ
referencyjny
referencja, 19, 29, 39, 83
konwersja, 73, 75
niejawna, 100
polimorfizm, Patrz: polimorfizm
pusta, 30, 129
rzutowanie, 73
w dóä, 73, 74, 94
w górö, 73, 74
this, 65
rekurencja, 39
relacja, 50
rethrow, Patrz: wyjñtek ponowne
zgäoszenie
rozgäaszanie, 108, 117
rzutowanie, 18, 81, 83, 93, 185, Patrz
teĔ:
referencja rzutowanie
jawne, 81, 91, 94, 131
S
sealing, Patrz: zapieczötowanie
sekwencja, 140
konkatenacja, 144
lokalna, 140
wejĈciowa, 140, 141
wyjĈciowa, 140, 141
short-circuit, Patrz: zasada
skróconego obliczania
skäadnia
kaskadowa, 151, 152
wyraĔeþ zapytaniowych, 151, 152
skäadowa
abstrakcyjna, 76, 87
instancji, Patrz: instancja
skäadowa
interfejsu, 87, 89, 170
klasy, 17, 62, 76
przestarzaäa, 171
statyczna, 16, 39
typu
wyliczeniowego, 90, 91
bazowego, 170
wirtualna, 76, 84
zapieczötowana, 89
säowa kluczowe
async, 178
await, 178, 179, 180
säownik, 35
säowo kluczowe, 10, 11
async, 176
await, 176
base, 77, 79
class, 62
default, 40
delegate, 102, 116
descending, 160
event, 108, 109
explicit, 134
fixed, 187
get, 66, 67
implicit, 134
internal, 59
into, 154, 158
kontekstowe, 12
let, 153
namespace, 59
orderby, 159
private, 59
public, 17, 59
sealed, 77
set, 66, 67
sizeof, 92
stackalloc, 187
static, 16, 70
struct, 18
this, 64, 77, 79
throw, 57
typeof, 96
Spis treļci _
205
unsafe, 185
var, 45, 46
virtual, 75, 89
staäa, 39, 46, 69
deklaracja, 51
lokalna, 52
typ, 69
typu referencyjnego, 19
typu wartoĈciowego, 18
statement, Patrz: instrukcja
sterta, 38, 39, 186
stos, 38, 80, 95, 187
strong name assembly, Patrz: zestaw
zaprzyjaĒniony podpisany
struct, Patrz: struktura
struktura, 84, 85, 87, 93, 96
Nullable, 130, 131
subclass, Patrz: klasa pochodna
subscriber, Patrz: subskrybent
subskrybent, 107, 108
suma logiczna, 30, 50
symbol specjalny, 31, 32
system generowania dokumentacji, 13
Ļ
Ĉrednik, Patrz: znak ;
T
tablica, 8, 18, 34, 43, 57, 139, 186, 187
ciñgów znaków, 8
deklaracja, 34
dynamiczna, 35
element, 38, 40
typu wartoĈciowego, 84
inicjalizacja, 36, 37, 38
jako argument wywoäania
funkcji., 38
liczba wymiarów, 35
odwoäanie
indeksowanie, 34
prostokñtna, Patrz: tablica
regularna
regularna, 36
rozmiar, 35, 36, 37
tablic, Patrz: tablica
wyszczerbiona
wartoĈci typu bool, 29
wielowymiarowa, 36
wyraĔenia inicjalizacji, 35
wyszczerbiona, 36, 37
zagnieĔdĔona, Patrz: tablica
wyszczerbiona
task combinator, Patrz: agregator
zadaþ
typ, 9, 13
anonimowy, 139
bool, 14, 18, 21, 29, 40, 133
byte, 27
caäkowity, 7, 8, 24
char, 18, 21, 31, 40
ciñgu znaków, 21
czöĈciowy, 71
decimal, 23, 24, 28
delegatu, 104
dookreĈlony, Patrz: typ zamkniöty
double, 23, 24, 28
dynamic, 168
dynamiczny, 163, 165, 167
konwersja, 168
enum, 18, Patrz: typ
wyliczeniowy
false, 40
float, 23, 24, 28
instancja, 15, 18
int, 14, 15, 18, 22, 27
konkretyzowanie, 16
kontrola
dynamiczna, 74, 82
statyczna, 82
liczbowy, 18, 21, 22, 40
logiczny, 18, 21, 29, 40
long, 18, 22, 23, 27
model refleksji, 82
nazwa
w peäni kwalifikowana, 59
kwalifikowana, 61
niedookreĈlony, Patrz: typ otwarty
obiektowy, 21
object, 21, 80
otwarty, 94
pochodny, 98
predefiniowany
wartoĈciowy, 22
predefiniowany, 13, 15, 21, 40
206 _ Skorowidz
prosty, 14, 22
przestarzaäy, 171
referencyjny, 18, 19, 21, 29, 32, 36,
40, 42, 80, 84, 97, 129
reprezentacja, 82
RSA, 58
sbyte, 27
short, 18, 27
statyczny, 46
string, 14, 21, 32, 33
struct, 18
strukturowy, 18
synonim, 62
uint, 23
ulong, 23
uogólniony, 93, 95, 96
niezwiñzany, 96
pochodne, 98
ushort, 27
var, 168
void, 8
wartoĈciowy, 18, 21, 32, 42, 84,
97, 185
instancja, 39
wbudowany, Patrz: typ
predefiniowany
wäasny, 14, 15, 40
tworzenie, 18
wnioskowany, 23
wskaĒnikowy, 185
wyliczeniowy, 18, 40, 90
konwersja, 91
operator, 92
z dopuszczalnñ wartoĈciñ pustñ,
130, 131, 133
zagnieĔdĔony, 62, 92, 93
zamkniöty, 94
zäoĔony, 14
zmiennoprzecinkowy, 23, 24, 27, 28
znakowy, 18, 21, 40
typ referencyjny
instancja, 39
type argument, Patrz: argument
typowy
type parameter, Patrz: parametr
typowy
U
ukoĈnik, 13, 49, 132, 134
lewy, 31, 32
unboxing, Patrz: odpakowywanie
uogólnienie, 93, 96, 97, 104
delegatów, 100
kowariantne, 99
ograniczenia, 97
upcasting, Patrz: referencja
rzutowanie w górö
V
value type, Patrz: typ wartoĈciowy
verbatim string literal, Patrz: literaä
dosäowny ciñgów znaków
void, 63, 188
void expression, Patrz: wyraĔenie
puste
W
wartoĈè
+, 27
–0, 27
–, 27
domyĈlna, 40, 43
Epsilon, 27
liczbowa, Patrz: literaä
logiczna, 29
MaxValue, 27
MinValue, 27
NaN, Patrz: NaN
nieliczbowa, Patrz: NaN
pusta, Patrz: null
zwracana, 8
whitespace, Patrz: biaäa spacja
wiñzanie, 163
dynamiczne, 163, 166, 168
jözykowe, 165
ze wskazania, 165
widocznoĈè, Patrz: dostöpnoĈè
wielorozprowadzanie, 169
wäaĈciwoĈè, 8, 62, 66, 67, 87, 95, 168
akcesor, 66, 67
automatyczna, 67
wirtualny, 75
wskaĒnik, 185
beztypowy, 188
Spis treļci _
207
wspóäbieĔnoĈè, 176
wyjñtek, 70
DivideByZeroException, 118
IndexOutOfRangeException, 35
InvalidCastException, 81
InvalidOperationException, 131
obsäuga, 118, 119
odwoäania do pustej referencji, 30
ponowne zgäoszenie, 117
RuntimeBinderException, 167, 168
System.ArgumentException, 123
System.ArgumentNullException,
124
System.ArgumentOutOfRange
´
Exception, 124
System.InvalidOperationException,
124
System.NotImplementedException,
124
System.NotSupportedException,
124
System.ObjectDisposedException,
124
zgäaszanie, 122
ponowne, 122
wyliczenie, Patrz: typ wyliczeniowy
wyraĔenie, 46
dynamiczne, 168
lambda, Patrz: lambda
logiczne, 56
przypisania, Patrz: operator
przypisania
puste, 46
staäowartoĈciowe, 44
zapytaniowe, 151, 152
kompilacja, 152
wywoäanie
zwrotne, 102
X
XML, 191, 192
Z
zadania agregator, 183
zapieczötowanie, 77
zapis wrostkowy, 46
zapytanie
kategorie, 146
kontynuacja, 154
LINQ, 86, Patrz: LINQ
z wieloma generatorami, 155
zintegrowane, Patrz: LINQ
zasada
przypisaþ oznaczonych, 39
skróconego obliczania, 30
zdarzenie, 8, 47, 62, 87, 95, 108, 168
abstrakcyjne, 109
akcesor, 112
jawny, 112
EventArgs, 107
odpalanie, 110
przesäaniane, 109
schemat standardowy, 109
statyczne, 109
wirtualne, 75, 109
z pustym kodem obsäugi zdarzenia,
117
zapieczötowane, 109
zestaw, 9
zaprzyjaĒniony, 86
zmienna, 38, 46
deklaracja, 45, 51
delegatu, 102
inicjalizacja, 45
lokalna, 7, 38, 40, 52
typowana niejawnie, 46
typu referencyjnego, 19
typu wartoĈciowego, 18
wciñgniöta, 114, 115
zewnötrzna, 114
znacznik XML, 13
znak, 31
!, 30, 49, 132, 134
!=, 29, 30, 50, 84, 92, 132, 134, 135
%, 25, 49, 132, 134
&, 26, 30, 49, 50, 91, 92, 132, 133,
134, 185, 187
&&, 30, 50
&=, 51
*, 49, 132, 134, 185, 187, Patrz:
operator mnoĔenia
*=, 51
., 12, 48, 59
208 _ Skorowidz
znak
/, 13, 49, 132, 134
/=, 51, 134
;, 12
?:, 50
??, 133
@, 11, 32
\, 31, 32
^, 26, 50, 92, 132, 134
^=, 51
{, 12
|, 26, 30, 50, 91, 92, 132, 133, 134
||, 30, 50
|=, 51
}, 12
~, 26, 49, 92, 132, 134
+, 33, 49, 50, 92, 103, 104, 132, 134
++, 25, 26, 48, 49, 92, 132, 134
+=, 51, 92, 103, 104, 134
<, 30, 33, 50, 92, 132, 134, 135
<<, 26, 132, 134
<<=, 51
<=, 30, 50, 92, 132, 135
=, 13, 47, 51, 92
-=, 51, 92, 103, 104
==, 13, 29, 30, 50, 83, 84, 92, 132,
134, 135
=>, 51
>, 30, 33, 50, 92, 132, 134, 135
->, 48, 185, 187
>=, 30, 50, 92, 132, 135
>>, 26, 132, 134
>>=, 51
ciñg, 31, 34, 57
äñczenie, 33
porównywanie, 33
wyszukiwanie, 33
interpunkcyjny, 12
specjalny, 31, 32
sterujñcy, 31, 32