Tytuł oryginału: C# 6.0 Pocket Reference: Instant Help for ...pdf.helion.pl/ch6lek/ch6lek.pdf ·...

24

Transcript of Tytuł oryginału: C# 6.0 Pocket Reference: Instant Help for ...pdf.helion.pl/ch6lek/ch6lek.pdf ·...

Page 1: Tytuł oryginału: C# 6.0 Pocket Reference: Instant Help for ...pdf.helion.pl/ch6lek/ch6lek.pdf · Zaczynając od wersji 5.0 języka C# na bazie słów kluczowych await i async ...
Page 2: Tytuł oryginału: C# 6.0 Pocket Reference: Instant Help for ...pdf.helion.pl/ch6lek/ch6lek.pdf · Zaczynając od wersji 5.0 języka C# na bazie słów kluczowych await i async ...

Tytuł oryginału: C# 6.0 Pocket Reference: Instant Help for C# 6.0 Programmers

Tłumaczenie: Przemysław Szeremiota

ISBN: 978-83-283-2446-6© 2016 Helion S.A.

Authorized Polish translation of the English edition C# 6.0 Pocket Reference ISBN 9781491927410 © 2015 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ścilub fragmentu niniejszej publikacji w jakiejkolwiek postaci jest zabronione. Wykonywanie kopii metodą kserograficzną, fotograficzną, a także kopiowanie książki na nośniku filmowym, magnetycznym lub innym powoduje naruszenie praw autorskich niniejszej publikacji.

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

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

Wydawnictwo HELIONul. Kościuszki 1c, 44-100 GLIWICEtel. 32 231 22 19, 32 230 98 63e-mail: [email protected]: 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/ch6lekMożesz tam wpisać swoje uwagi, spostrzeżenia, recenzję.

Printed in Poland.

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

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

Page 3: Tytuł oryginału: C# 6.0 Pocket Reference: Instant Help for ...pdf.helion.pl/ch6lek/ch6lek.pdf · Zaczynając od wersji 5.0 języka C# na bazie słów kluczowych await i async ...

3

Spis treści

Konwencje typograficzne 5Korzystanie z przykładowych programów 6Pierwszy program w C# 7Składnia 10System typów 13Typy liczbowe 21Typ wartości logicznych i operatory logiczne 28Znaki i ciągi znaków 30Tablice 34Zmienne i parametry 38Operatory i wyrażenia 45Operatory na typach z dopuszczalną wartością pustą 50Instrukcje 51Przestrzenie nazw 58Klasy 62Dziedziczenie 74Typ object 81Struktury 86Modyfikatory dostępu 86Interfejsy 88Typy wyliczeniowe 91Typy zagnieżdżone 94Uogólnienia 94Delegaty 102Zdarzenia 108Wyrażenia lambda 113Metody anonimowe 116Wyjątki i instrukcja try 117

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

Page 4: Tytuł oryginału: C# 6.0 Pocket Reference: Instant Help for ...pdf.helion.pl/ch6lek/ch6lek.pdf · Zaczynając od wersji 5.0 języka C# na bazie słów kluczowych await i async ...

4 Spis treści

Enumeratory i iteratory 125Typy z dopuszczalną wartością pustą 130Przeciążanie operatorów 134Metody rozszerzające 137Typy anonimowe 139LINQ 139Wiązanie dynamiczne 161Atrybuty 169Atrybuty wywołania 172Funkcje asynchroniczne 174Wskaźniki i kod nienadzorowany 182Dyrektywy preprocesora 186Dokumentacja XML 188Skorowidz 191O autorach 200

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

Page 5: Tytuł oryginału: C# 6.0 Pocket Reference: Instant Help for ...pdf.helion.pl/ch6lek/ch6lek.pdf · Zaczynając od wersji 5.0 języka C# na bazie słów kluczowych await i async ...

174 C# 6.0. Leksykon kieszonkowy

Funkcje asynchroniczne

Zaczynając od wersji 5.0 języka C# na bazie słów kluczowych await i asyncwprowadzono mechanizmy asynchronicznego wywołania funkcji; programowa-nie asynchroniczne polega na tym, że funkcje o długim czasie wykonania jaknajszybciej zwracają sterowanie do miejsca wywołania, a swoją właściwą pra-cę wykonują w tle. Dla porównania wywołanie synchroniczne oznacza, żepowrót z wywołania funkcji następuje dopiero po wykonaniu całości opera-cji realizowanych przez funkcję. Programowanie asynchroniczne promujewspółbieżność: długotrwałe zadania są wykonywane współbieżnie z podstawo-wym przebiegiem wykonania programu wywołującego. Implementacja wy-wołań asynchronicznych odbywa się albo na bazie osobnego wątku, w którymwykonuje się właściwa część zadań funkcji asynchronicznych (w przypadkuzadań wymagających obliczeniowo), albo na bazie mechanizmu wywołańzwrotnych (w przypadku operacji wejścia-wyjścia).

Uwaga

Programowanie wielowątkowe, współbieżne i asynchroniczne to same w sobieobszerne zagadnienia: w książce C# 6.0 in a Nutshell poświęcono im całe dwarozdziały; szerokie omówienie znajduje się też pod adresem http://albahari.com/threading.

Weźmy za przykład poniższą metodę synchroniczną, wykonującą długo-trwałe obliczenia:

int ComplexCalculation(){ double x = 2; for (int i = 1; i < 100000000; i++) x += Math.Sqrt (x) / i; return (int)x;}

Wywołanie powyższej metody blokuje wywołującego na co najmniej kilkasekund, aż do obliczenia i zwrócenia wyniku:

int result = ComplexCalculation();// Jakiś czas później:Console.WriteLine (result); // 116

Środowisko uruchomieniowe CLR definiuje (w System.Threading. Tasks) klasęo nazwie Task<TResult>, reprezentującą operację, która kończy się w przyszłości.Instancję Task<TResult> dla zadania obliczeniowego można utworzyć za po-średnictwem metody Task.Run, która nakazuje środowisku CLR uruchomieniewskazanego delegatu w osobnym wątku, wykonywanym współbieżnie z wąt-kiem wywołującego:

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

Page 6: Tytuł oryginału: C# 6.0 Pocket Reference: Instant Help for ...pdf.helion.pl/ch6lek/ch6lek.pdf · Zaczynając od wersji 5.0 języka C# na bazie słów kluczowych await i async ...

Funkcje asynchroniczne 175

Task<int> ComplexCalculationAsync(){ return Task.Run (() => ComplexCalculation());}

Powyższa metoda staje się asynchroniczna, ponieważ zwraca sterowanie dowywołującego natychmiast po wywołaniu Task.Run. Potrzebny jest tu jednak ja-kiś sposób poinstruowania środowiska przez wywołującego, co zrobić po za-kończeniu współbieżnej operacji i udostępnieniu jej wyniku. Służy do tegometoda GetAwaiter klasy Task<TResult>, która z asynchronicznym wywołaniemkojarzy tzw. kontynuację (ang. continuation):

Task<int> task = ComplexCalculationAsync();var awaiter = task.GetAwaiter();awaiter.OnCompleted (() => // Kontynuacja{ int result = awaiter.GetResult(); Console.WriteLine (result); // 116});

Powyższe oznacza: „po zakończeniu wywołaj podany delegat”. Nasza konty-nuacja najpierw pobiera wynik operacji asynchronicznej (GetResult; wywo-łanie to może też przerzucić wyjątek rzucony przez wywołanie asynchroniczne).Pobrany wynik jest następnie wypisywany na wyjście programu za pomocą wy-wołania Console.WriteLine.

Słowa kluczowe await i async

Słowo await upraszcza kojarzenie kontynuacji z wywołaniami asynchronicz-nymi. Począwszy od najprostszego scenariusza, kompilator rozwija blok:

var wynik = await wyra enie;instrukcja/instrukcje;

do czegoś w rodzaju:

var awaiter = wyra enie.GetAwaiter();awaiter.OnCompleted (() =>{ var wynik = awaiter.GetResult(); instrukcja/instrukcje;);

Uwaga

Kompilator dodatkowo emituje kod optymalizujący scenariusz synchro-nicznego (natychmiastowego) zakończenia operacji; operacja asynchronicz-na kończy się od razu najczęściej w wyniku działania wewnętrznego mechani-zmu cache, kiedy to wynik operacji jest gotowy w momencie wywołania.

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

Page 7: Tytuł oryginału: C# 6.0 Pocket Reference: Instant Help for ...pdf.helion.pl/ch6lek/ch6lek.pdf · Zaczynając od wersji 5.0 języka C# na bazie słów kluczowych await i async ...

176 C# 6.0. Leksykon kieszonkowy

Dzięki temu możemy swoją asynchroniczną metodę ComplexCalculationAsyncwywołać następująco:

int result = await ComplexCalculationAsync();Console.WriteLine (result);

Żeby całość skompilować, trzeba jeszcze dodać modyfikator async do de-klaracji funkcji zawierającej wywołanie z await:

async void Test(){ int result = await ComplexCalculationAsync(); Console.WriteLine (result);}

Modyfikator async informuje kompilator, aby słowo await traktować jakosłowo kluczowe, a nie identyfikator widoczny wewnątrz metody (służy to zabez-pieczeniu kodu przed kompilacją kompilatorem starszym niż C# 5.0, w któ-rym uznanie słowa await za zwyczajny identyfikator spowodowałoby nie-poprawną kompilację). Modyfikator async można stosować tylko wobec metod(i wyrażeń lambda) bez wartości zwracanych albo zwracających wartości typuTask bądź Task<TResult>.

Uwaga

Modyfikator async działa podobnie jak modyfikator unsafe w tym sensie,że nie ma wpływu na sygnaturę czy widoczność metody; wpływa wyłącz-nie na to, jak metoda jest interpretowana i realizowana wewnętrznie.

Metody z modyfikatorem async są nazywane funkcjami asynchronicznymi, boteż zazwyczaj są w istocie asynchroniczne. Aby to uwidocznić, zobaczmy, jakprzebiega wykonanie funkcji asynchronicznej.

Po napotkaniu wyrażenia await sterowanie (zazwyczaj) wraca do wywołującego(podobnie jak w przypadku instrukcji yield return w iteratorach), ale jeszczezanim to nastąpi, środowisko wykonawcze kojarzy z oczekującym na wyko-nanie zadaniem kontynuację, aby już po zakończeniu wykonania zadaniamożliwe było podjęcie wykonania od określonego miejsca programu. Jeślizadanie asynchroniczne wykona się błędnie, rzucony przez nie wyjątek zosta-nie przerzucony do kontynuacji (jak po wywołaniu GetResult); jeśli zadaniezwróci wartość, zostanie ona przypisana do wyrażenia await.

Uwaga

Wbudowana implementacja metody OnComplete kontynuacji oczekującejna zakończenie wykonania asynchronicznego gwarantuje zachowaniebieżącego kontekstu synchronizacji (jeśli takowy istnieje). W praktyce oznacza

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

Page 8: Tytuł oryginału: C# 6.0 Pocket Reference: Instant Help for ...pdf.helion.pl/ch6lek/ch6lek.pdf · Zaczynając od wersji 5.0 języka C# na bazie słów kluczowych await i async ...

Funkcje asynchroniczne 177

to, że w aplikacjach z rozbudowanym interfejsem użytkownika (WPF,WinRT, Silverlight czy Windows Forms), przy oczekiwaniu na operacjęna interfejsie użytkownika, kontynuacja będzie się wykonywać w tym samymwątku co sama operacja; jest to bardzo pomocne w zachowaniu bezpie-czeństwa wątkowego aplikacji.

Wyrażenie występujące za await to zazwyczaj zadanie, czyli egzemplarz klasy Task;może to być jednak dowolny obiekt z metodą GetAwaiter zwracającą obiekt im-plementujący interfejs INotify Completion.OnCompleted i z metodą GetResulto odpowiedniej sygnaturze (oraz z właściwością IsCompleted, służącą do spraw-dzania możliwości wykonania synchronicznego).

Zauważmy, że wyrażenie await jest obliczane jako wartość typu int; spowo-dowane jest to tym, że oczekiwaliśmy na asynchroniczne wykonanie zadaniatypu Task<int> (którego metoda GetAwaiter().GetResult() zwraca wartośćtypu int).

Możliwe jest również oczekiwanie na wykonanie zadania nieuogólnionej kla-sy Task; wyrażenie await jest wtedy wyrażeniem pustym:

await Task.Delay (5000);Console.WriteLine ("Min o pi sekund!");

Metoda Task.Delay jest statyczną metodą zwracającą obiekt Task kończącywykonanie po odczekaniu określonej liczby milisekund. Synchronicznymodpowiednikiem wywołania Task.Delay jest wywołanie Thread.Sleep.

Klasa Task to nieuogólniona klasa bazowa dla Task<TResult> i funkcjonalnie jestrównoważna klasie Task<TResult> we wszystkim poza wartością zwracaną.

Zachowanie lokalnego kontekstu

Największą siłą wyrażeń await jest to, że mogą występować w niemal dowolnymmiejscu kodu; w szczególności wyrażenie await (w obrębie funkcji asynchro-nicznej) może się pojawiać w miejscu, gdzie dozwolone jest wystąpienie do-wolnego wyrażenia za wyjątkiem wyrażenia blokady, kontekstu nienadzoro-wanego, wnętrza bloku catch lub bloku finally, kodu nienadzorowanego czy,wreszcie, punktu wejścia do wykonania (czyli głównej metody programu).

W poniższym przykładzie stosujemy wyrażenie await w ciele pętli:

async void Test(){ for (int i = 0; i < 10; i++) { int result = await ComplexCalculationAsync();

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

Page 9: Tytuł oryginału: C# 6.0 Pocket Reference: Instant Help for ...pdf.helion.pl/ch6lek/ch6lek.pdf · Zaczynając od wersji 5.0 języka C# na bazie słów kluczowych await i async ...

178 C# 6.0. Leksykon kieszonkowy

Console.WriteLine (result); }}

Po pierwszym wywołaniu ComplexCalculationAsync sterowanie powraca domiejsca wywołania za wyrażeniem await. Kiedy metoda zakończy działanie(albo rzuci wyjątek), wykonanie zostanie wznowione w przerwanym miejscu,z zachowaniem wartości zmiennych lokalnych, w tym licznika pętli. Kompi-lator uzyskuje ten efekt poprzez translację powyższego kodu na maszynę sta-nową, podobnie jak w przypadku iteratorów.

Nieobecność słowa kluczowego await oznaczałaby, że to programista musiałbyjawnie oprogramować taką maszynę stanową ze starannym ręcznym stosowa-niem kontynuacji; tradycyjnie to właśnie ten element programowania asyn-chronicznego przysparza najwięcej trudności.

Pisanie funkcji asynchronicznych

W każdej funkcji synchronicznej można zastąpić pusty typ zwracany instancjąklasy Task, a funkcja ta stanie się w pełni użyteczną funkcją asynchroniczną;żadne inne zmiany nie są konieczne:

async Task PrintAnswerToLife(){ await Task.Delay (5000); int answer = 21 * 2; Console.WriteLine (answer);}

Zauważmy, że w ciele metody nie ma jawnej instrukcji zwracającej obiektzadania (Task). Zajmuje się tym kompilator, to on również obsługuje sygnali-zację zakończenia bądź przerwania wykonania metody (w przypadku wyjąt-ku). Dzięki temu można łatwo tworzyć łańcuchy wywołań asynchronicznych:

async Task Go(){ await PrintAnswerToLife(); Console.WriteLine ("Gotowe");}

(A ponieważ metoda Go zwraca Task, Go sama w sobie jest również asynchro-niczna). Kompilator rozwinie funkcję asynchroniczną zwracającą zadaniewspółbieżne Task do postaci kodu, który (pośrednio) wykorzystuje klasę Ta-skCompletionSource do utworzenia zadania współbieżnego wraz z sygnalizacjązakończenia bądź błędu.

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

Page 10: Tytuł oryginału: C# 6.0 Pocket Reference: Instant Help for ...pdf.helion.pl/ch6lek/ch6lek.pdf · Zaczynając od wersji 5.0 języka C# na bazie słów kluczowych await i async ...

Funkcje asynchroniczne 179

Uwaga

TaskCompletionSource to typ środowiska uruchomieniowego CLR, po-zwalający na tworzenie zadań współbieżnych pozostających pod ręczną kon-trolą programisty, a także zajmujący się sygnalizacją zakończenia wykonaniawspółbieżnego albo błędu wykonania. W przeciwieństwie do Task.Run,TaskCompletionSource nie wiąże wątku, w którym występuje wywołanie,na czas wykonania operacji. TaskCompletionSource znajduje też zastoso-wanie przy pisaniu metod obsługujących wejście-wyjście i zwracających za-dania współbieżne (jak Task. Delay).

Chodzi o zapewnienie, by kiedy metoda asynchroniczna zwracająca zadaniewspółbieżne zakończy wykonanie, sterowanie mogło zostać przekazane (za po-średnictwem kontynuacji) do miejsca, w którym ktoś na to oczekuje.

Zwracanie Task<TResult>

Jeśli ciało funkcji synchronicznej zwraca wartość uogólnionego typu TResult,można ją zamienić na asynchroniczną poprzez zamianę wartości zwracanej naTask<TResult>:

async Task<int> GetAnswerToLife(){ await Task.Delay (5000); int answer = 21 * 2; // answer to int, więc nasza metoda zwraca Task<int> return answer;}

Działanie metody GetAnswerToLife można zademonstrować poprzez wywołaniejej wewnątrz wcześniej zdefiniowanej metody PrintAnswerToLife (która z koleijest wywoływana we wnętrzu Go):

async Task Go(){ await PrintAnswerToLife(); Console.WriteLine ("Gotowe");}async Task PrintAnswerToLife(){ int answer = await GetAnswerToLife(); Console.WriteLine (answer);}async Task<int> GetAnswerToLife(){ await Task.Delay (5000); int answer = 21 * 2; return answer;}

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

Page 11: Tytuł oryginału: C# 6.0 Pocket Reference: Instant Help for ...pdf.helion.pl/ch6lek/ch6lek.pdf · Zaczynając od wersji 5.0 języka C# na bazie słów kluczowych await i async ...

180 C# 6.0. Leksykon kieszonkowy

Funkcje asynchroniczne upodobniają programowanie asynchroniczne do kla-sycznego programowania synchronicznego. Poniżej zaprezentowany jest syn-chroniczny równoważnik powyższego łańcucha wywołań, w którym wywołanieGo() daje taki sam efekt po blokującym (synchronicznym) odczekaniu pięciusekund:

void Go(){ PrintAnswerToLife(); Console.WriteLine ("Gotowe");}void PrintAnswerToLife(){ int answer = GetAnswerToLife(); Console.WriteLine (answer);}int GetAnswerToLife(){ Thread.Sleep (5000); int answer = 21 * 2; return answer;}

Powyższy przykład ilustruje też podstawową zasadę projektowania funkcjiasynchronicznych w C#, czyli pisanie metod najpierw jako synchronicznych,a następnie zastępowanie wywołań synchronicznych wywołaniami asynchro-nicznymi z oczekiwaniem na ich wykonanie współbieżne.

Współbieżność

Poznaliśmy najprostszy schemat programowania asynchronicznego, w któ-rym tuż po wywołaniu funkcji asynchronicznych oczekujemy na zakończenieodpowiadających im zadań współbieżnych. W efekcie otrzymujemy programz uszeregowanym wykonaniem, z logicznego punktu widzenia równoważny pro-gramowi w pełni synchronicznemu.

Natomiast prawdziwie współbieżne wykonanie implementujemy wtedy, kiedywywołujemy funkcje asynchroniczne bez momentalnego oczekiwania naich zakończenie. Na przykład poniższy kod dokona współbieżnego, dwu-krotnego wykonania metody PrintAnswerToLife:

var task1 = PrintAnswerToLife();var task2 = PrintAnswerToLife();await task1; await task2;

Współbieżny przebieg wykonania programu kończy się w miejscu oczekiwaniana zakończenie obu współbieżnych zadań (tam też dochodzi do kolekcjonowa-nia wyników albo rzucenia wyjątków). Klasa Task udostępnia statyczną metodęo nazwie WhenAll, agregującą oczekiwanie i przez to nieco wydajniejszą. Me-

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

Page 12: Tytuł oryginału: C# 6.0 Pocket Reference: Instant Help for ...pdf.helion.pl/ch6lek/ch6lek.pdf · Zaczynając od wersji 5.0 języka C# na bazie słów kluczowych await i async ...

Funkcje asynchroniczne 181

toda WhenAll zwraca zadanie współbieżne, które kończy się, kiedy zakończą sięwszystkie zadania współbieżne wskazane w wywołaniu:

await Task.WhenAll (PrintAnswerToLife(), PrintAnswerToLife());

Metoda WhenAll to tak zwany agregator zadań (ang. task combinator; klasa Taskudostępnia również agregator o nazwie WhenAny, kończący wykonanie w momen-cie zakończenia dowolnego z przekazanych zadań). Agregatory zadań współ-bieżnych zostały szczegółowo omówione w książce C# 6.0 in a Nutshell.

Asynchroniczne wyrażenia lambda

Zwyczajne metody możemy łatwo definiować jako asynchroniczne za pomo-cą modyfikatora async:

async Task NamedMethod(){ await Task.Delay (1000); Console.WriteLine ("Ple");}

To samo dotyczy metod nienazwanych (czyli wyrażeń lambda i metod anoni-mowych), byle tylko były poprzedzone słowem async:

Func<Task> unnamed = async () =>{ await Task.Delay (1000); Console.WriteLine ("Ple");};

Analogicznie możemy też stosować wyrażenie await z metodami anonimo-wymi i wyrażeniami lambda:

await NamedMethod();await unnamed();

Asynchroniczne wyrażenia lambda są przydatne przy dołączaniu delegatów ob-sługi rozmaitych zdarzeń:

myButton.Click += async (sender, args) =>{ await Task.Delay (1000); myButton.Content = "Gotowe";};

Otrzymujemy w ten sposób bardziej zwarty i lepiej umiejscowiony kod ob-sługi zdarzenia, który zresztą poza tym jest równoważny poniższemu:

myButton.Click += ButtonHandler;...async void ButtonHandler (object sender, EventArgs args){

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

Andrzej
Prostokąt
Page 13: Tytuł oryginału: C# 6.0 Pocket Reference: Instant Help for ...pdf.helion.pl/ch6lek/ch6lek.pdf · Zaczynając od wersji 5.0 języka C# na bazie słów kluczowych await i async ...

191

Skorowidz

A

akcesor, 112właściwości, Patrz:

właściwość akcesoraplikacja, 9argument, Patrz też:

parametrdynamiczny, 168nazwany, 44przekazywanie, 40,

41, 42assembly, Patrz: zestawatrybut, 169

CLSCompliant, 170obiekt docelowy, 170ObsoleteAttribute,

169odwołanie, 172parametr, 170własny, 171wywołanie, 172XmlElementAttribute,

170attribute target, Patrz:

atrybut obiektdocelowy

B

biblioteka, 9, 10blok

catch, 117, 118, 119finally, 117, 119, 120instrukcji, 7, 12, 51try, 117

broadcaster, Patrz: nadawca

C

caller info attribute,Patrz: atrybutwywołanie

ciągłączenie, 32porównywanie, 33przeszukiwanie, 33znaków, 31, 32

constructor, Patrz:konstruktor

custom binding, Patrz:wiązanieniestandardowe

D

daneskładowe, 15, 16statyczne, 100wejściowe, 8, 63wyjściowe, 8

delegat, 102, 103, 108Action, 105do metody

instancji, 104statycznej, 105

Func, 105modyfikowalność, 104typ, 102

kontrawariancja, 107kowariancja, 106,

107

uogólniony, 105zgodność, 106

uogólniony, 107wielokrotny, 103, 104

domknięcie, 114dyrektywa

#define, 187#elif, 187#else, 187#endif, 187#endregion, 187#error, 186, 187#if, 187#line, 187#pragma, 187#region, 187#undef, 187#warning, 186, 187preprocesora, 186, 187using, 59using static, 60

dziedziczenie, 74, 80, 81,88, 89

po klasie, 74

E

enumerator, 125escape sequence,

Patrz: znak sterującyevent, Patrz: zdarzenieexception filter,

Patrz: wyjątek filtr

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

Page 14: Tytuł oryginału: C# 6.0 Pocket Reference: Instant Help for ...pdf.helion.pl/ch6lek/ch6lek.pdf · Zaczynając od wersji 5.0 języka C# na bazie słów kluczowych await i async ...

192 Skorowidz

F

finalizator, 8, 72, 86finalizer, Patrz: finalizatorflaga, 92fluent syntax, Patrz:

wyrażenie składniakaskadowa

fully qualified type name,Patrz: typ nazwaw pełni kwalifikowana

funkcjaasynchroniczna, 174,

178, 179niedynamiczna, 168przesłanianie, 77składowa, 15, 79,

Patrz też: metodasynchroniczna, 178wirtualna, 77wywołanie, 39

asynchroniczne, 174synchroniczne, 174

G

garbage collector,Patrz: mechanizmodśmiecania

generic method, Patrz:metoda uogólniona

generic type, Patrz:uogólnienie

I

identyfikator, 10interfejs, 163indekser, 8, 69

implementowanie, 70wirtualny, 77

indexer, Patrz: indekserinferencja, 23instancja, 15

składowa, 16typu

wartościowego, 39

instantiation,Patrz: konkretyzacja

instrukcja, 7, 51blok, Patrz: blok

instrukcjibreak, 57continue, 57deklaracji, 52do-while, 55fixed, 183for, 55, 56foreach, 35, 55, 57,

125goto, 57, 58if, 53if..else, 53iteracyjna, Patrz:

instrukcja pętlipętli, 55return, 57, 58, 128skoku, 57switch, 54, 57throw, 57, 122, 123try, 117, 120using, 121warunkowa, 52while, 55wyrażeniowa, 52,

Patrz też: wyrażenieyield, 128yield break, 128

interfejs, 82, 88, 90deklaracja, 88dziedziczenie, 89IComparable, 136IdynamicMetaObject

Binding, 163IDynamicMetaObject

Provider, 163, 164IEnumerable, 35, 101,

125, 127, 128IEnumerator, 101, 127implementacja

jawna, 89ponowna, 90wirtualna, 90

INotifyCompletion.OnCompleted,

177rozszerzanie, 138składowa, 168System.Collections.

Generic.IEnumerable, 128

System.Collections.Generic.IEnumerator, 125, 128

System.Collections.IEnumerable,

126, 128System.Collections.

IEnumerator,125, 128

System.IDisposable,121

interpolated string,Patrz: ciąg znakówinterpolowany

iterator, 126, 127, 128sekwencja złożona,

129

J

jagged array, Patrz: tablicawyszczerbiona

K

klasa, 9, 62, 88abstrakcyjna, 78bazowa, 74, 75, 78Console, 9definiowanie, 62dziedziczenie,

Patrz: dziedziczeniepo klasie

Enumerable, 149, 150nazwa, 10object, 82, 84

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

Page 15: Tytuł oryginału: C# 6.0 Pocket Reference: Instant Help for ...pdf.helion.pl/ch6lek/ch6lek.pdf · Zaczynając od wersji 5.0 języka C# na bazie słów kluczowych await i async ...

Skorowidz 193

pochodna, 74, 75, 78,80, Patrz też:podklasa

pochodne, 78statyczna, 71string, 34, 69System.Array, 35System.Console, 71System.EventArgs, 110System.Exception, 123System.Math, 71

kod nienadzorowany, 183kod XML, 188kolejka

LIFO, Patrz: stoskolekcja, 126komentarz

dokumentujący, 188jednowierszowy, 13wielowierszowy, 13

kompilator, 9, 10, 187komunikat, 187konkretyzacja, 15konstruktor, 8, 64, 80

bezparametrowy, 65,86

kolejność, 81niepubliczny, 65obiektu, 16przeciążanie, 64statyczny, 71wywoływany, 65

kontrawariancja, 100, 101,107

konwencja wielbłądzia, 11kowariancja, 100, 101, 106,

107kwalifikator, 148

global::, 62kwantyfikator, 143, 144

L

lambda expression, Patrz:wyrażenie lambda

language binding,Patrz: wiązaniejęzykowe

Language IntegratedQuery, Patrz: LINQ

LINQ, 139, 140, 150element, 140sekwencja, 140złączenie,

Patrz: złączenielista, 69literał, 8, 12

ciągu znaków, 32liczb, 22

M

mechanizmatrybutów, 169LINQ, Patrz: LINQodśmiecania, 39, 72

metoda, 7, 15, 63Aggregate, 148All, 148anonimowa, 116Any, 148AsEnumerable, 148AsQueryable, 148Average, 148BinarySearch, 35Cast, 148CompareTo, 33Concat, 147Contains, 148Copy, 35Count, 148CreateInstance, 35częściowa, 73deklaracja, 40Display, 122Dispose, 121Distinct, 146ElementAt, 147ElementAtOrDefault,

147Empty, 148

Equals, 84, 85Except, 147Finalize, 72Find, 35Find LastIndex, 35FindIndex, 35First, 147FirstOrDefault, 147GetHashCode, 85GetLength, 36GetResult, 177GetType, 84GetValue, 35GroupBy, 147GroupJoin, 147, 155,

156IndexOf, 35Insert, 34instancji, 104, 139Intersect, 147IsCapitalized, 137Join, 147, 155Last, 147LastIndexOf, 35LastOrDefault, 147LongCount, 148Main, 9Max, 148Min, 148MoveNext, 144nazwa, 10, 63OfType, 148OnComplete, 176OrderBy, 147, 149OrderByDescending,

147PadLeft, 34PadRight, 34parametr,

Patrz: parametrprzeciążanie, 64, 81Range, 148ReferenceEquals, 85Remove, 34Repeat, 148Reverse, 147

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

Page 16: Tytuł oryginału: C# 6.0 Pocket Reference: Instant Help for ...pdf.helion.pl/ch6lek/ch6lek.pdf · Zaczynając od wersji 5.0 języka C# na bazie słów kluczowych await i async ...

194 Skorowidz

metodarozszerzająca, 137,

139, 141, 168wywołanie

kaskadowe, 138Select, 141, 146, 149SelectMany, 146SequenceEqual, 148SetValue, 35Single, 147Skip, 146SkipWhile, 146skrócona do

wyrażenia, 63Sort, 35statyczna, 65Substring, 34Sum, 148sygnatura, 63Take, 146TakeWhile, 146ThenBy, 147ThenByDescending,

147ToArray, 148ToDictionary, 148ToList, 148ToLookup, 148ToLower, 34ToString, 85ToUpper, 34Trim, 34TrimEnd, 34TrimStart, 34Union, 147uogólniona, 96wartość zwracana, 8Where, 146, 149wirtualna, 77, 78WriteLine, 9Zip, 147

modyfikatorasync, 176, 181await, 176, 177dostępu

internal, 87private, 87

protected, 87protected internal,

87public, 86

out, 40, 42params, 42readonly, 63ref, 40, 41, 169this, 137unsafe, 176virtual, 169

multimetoda, 168multiple dispatch,

Patrz: multimetoda

N

nadawca, 108namespace, Patrz:

przestrzeń nazwnested type, Patrz: typ

zagnieżdżonynull coalescing operator,

Patrz: operator ??nullable type, Patrz: typ

z dopuszczalnąwartością pustą

null-conditional operator,Patrz: operator ?.

O

obiekt, 38inicjalizator, 65instancja, Patrz:

instancjakonstruktor, Patrz:

konstruktor obiektunadzorowany, 183przeliczalny, 125System.Object, 81System.Type, 84tablicy, 35tworzenie, 38typ, Patrz: typType, 97

obliczenie nadzorowane,25

odbiornik komunikatów,167

odpakowywanie, 82operand, 45operator, 8, 12, 45, 47,

Patrz też: znak!= , 29, 49, 93, 132,

134przeciążanie, 85

&, 26, 49, 93, 133,134, 182

&&, 29?., 50?:, 49??, 50, 134^, 26, 49, 93, 133, 134|, 26, 49, 93, 133, 134||, 29, 49~, 26, 93, 133+, 32<<, 26==, 131, 134

przeciążanie, 85>>, 26addytywny, 48agregacji, 143, 144,

145All, 143alternatywy dla null,

47Any, 143arytmetyczny, 24, 93as, 49, 76Average, 143await, 48bitowej sumy

wyłączającej, 49bitowy, 26, 93Cast, 160checked, 25, 26, 48Concat, 143Contains, 143Count, 143default, 48

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

Page 17: Tytuł oryginału: C# 6.0 Pocket Reference: Instant Help for ...pdf.helion.pl/ch6lek/ch6lek.pdf · Zaczynając od wersji 5.0 języka C# na bazie słów kluczowych await i async ...

Skorowidz 195

dekrementacji, 25dostępu przez

wskaźnik, 182, 184dwuargumentowy, 45

zapis wrostkowy, 45elementowy, 142, 144,

147Elvis, Patrz: operator ?.Except, 144First, 142FirstOrDefault, 142funkcja, 135główny, 47GroupBy, 159, 160GroupJoin, 155iloczynu bitowego, 49iloczynu logicznego,

49inkrementacji, 25Intersect, 144is, 49, 77jednoargumentowy,

45, 48Join, 155konwersji, 144, 145lambda, 47, 49Last, 142łączność, 46

lewostronna, 47prawostronna, 47

Max, 143Min, 143mnożenia, 12multiplikatywny, 48nameof, 47, 73new, 16, 47obliczenia

nadzorowanego,Patrz: operatorchecked

odwołania doskładowej, 12

OfType, 160pierwszorzędny, 45pobrania adresu, 182

porównania, 29, 49,84, 93, 132, 135

pożyczanie, 131, 132priorytet, 46, 47przeciążanie, 134,

135, 136przesunięć bitowych,

48przypisania, 13, 46, 47,

49relacji, 29, 48, 132, 135Reverse, 142równości, 29SelectMany, 154SequenceEquals, 143Single, 142sizeof, 48, 93Skip, 142stackalloc, 47struktury Nullable,

131, 132, 133sumy bitowej, 49sumy logicznej, 49Take, 142ToArray, 144ToDictionary, 144ToList, 144, 145ToLookup, 144trójargumentowy, 45trójwartościowy, 47typeof, 47, 97typu wyliczeniowego,

93unchecked, 26, 48Union, 143warunkowego dostępu

do składowej,Patrz: operator ?.

warunkowy, 47, 49Where, 140wyłuskania, 182XOR, 49zapytania, 141, 144,

145, 146, 147kaskadowy, 149

zapytania, 141

zbiorów, 143złączenia, 155

P

pakowanie, 82, 83parametr, 8, 38, 40, 63,

114, Patrz też:argument

opcjonalny, 43typowy, 95

deklarowanie, 96wartość domyślna,

98partially qualified name,

Patrz: przestrzeń nazwnazwa częściowakwalifikacja

pętla, Patrz: instrukcjapętli

platforma .NETFramework, 9

plik.cs, 9.dll, 9.exe, 9csc.exe, 10

podklasa, 74podzapytanie, 145pole, 38, 39, 63

deklarowanie, 63inicjalizacja, 63instancji, 38publiczne, 67statyczne, 38

polimorfizm, 74preprocesor, 186, 187

symbol#error, 186#warning, 186

primary operator,Patrz: operatorpierwszorzędny

programowanieasynchroniczne, 174,178, 179

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

Page 18: Tytuł oryginału: C# 6.0 Pocket Reference: Instant Help for ...pdf.helion.pl/ch6lek/ch6lek.pdf · Zaczynając od wersji 5.0 języka C# na bazie słów kluczowych await i async ...

196 Skorowidz

property, Patrz:właściwość

protokół, 102przesłanianie, 79przestrzeń nazw, 9, 58, 59,

138alias, 62deklaracja, 62globalna, 59importowanie, 59, 62nazwa

częściowakwalifikacja, 61

przesłanianie, 61zasięg, 61

System, 9, 14System.Collections, 35

przypisanie oznaczone, 39przyrostek

D, 23L, 23liczbowy, 23U, 23

Q

query expression, Patrz:wyrażenie zapytaniowe

R

rectangular array, Patrz:tablica regularna

referencja, 29, 41dynamic, 165object, 165polimorficzna, 74pusta, 130rzutowana

jawnie, 75niejawnie, 75w dół, 75, 76w górę, 75

this, 65, 66

S

sealing, Patrz:zapieczętowanieimplementacji

serializacja, 169słownik, 35, 69, 85, 126słowo kluczowe, 11

async, 174, 176, 181await, 174, 175, 177base, 79class, 62const, 70default, 40, 98delegate, 116dynamic, 161explicit, 134fixed, 185implicit, 134internal, 59into, 153kontekstowe, 12let, 152namespace, 59orderby, 158partial, 72private, 59public, 59stackalloc, 184static, 16, 71this, 64, 66, 79unsafe, 182var, 44virtual, 77

stała, 13, 45, 70deklarowanie, 70

statement, Patrz:instrukcja

sterta, 38stos, 38, 82, 184struktura, 86, 88

Nullable, 130operatory, 131

strumień wejścia-wyjścia, 9subclass, Patrz: podklasa

subscriber, Patrz:subskrybent

T

tablica, 34, 184deklaracja, 34dynamiczna, 35element, 38inicjalizacja, 35, 37, 39kopiowanie, 35liczb całkowitych, 35liczba wymiarów, 35mieszająca, 85nieposortowana, 35posortowana, 35regularna, 36

deklaracja, 36rozmiar, 35sortowanie, 35tworzenie, 35typ, 36wielowymiarowa, 36wyszczerbiona, 36, 37wyszukiwanie, 35zagnieżdżona,

Patrz: tablicawyszczerbiona

typ, 13anonimowy, 139bazowy, 168bool, 14, 21, 28, 40byte, 21, 22, 26całkowitoliczbowy, 8,

17przepełnienie, 25

char, 21, 30, 40ciągu znaków, 21częściowy, 72decimal, 21, 22, 23, 28delegatu, 102

kontrawariancja, 107kowariancja, 106,

107uogólniony, 105zgodność, 106

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

Page 19: Tytuł oryginału: C# 6.0 Pocket Reference: Instant Help for ...pdf.helion.pl/ch6lek/ch6lek.pdf · Zaczynając od wersji 5.0 języka C# na bazie słów kluczowych await i async ...

Skorowidz 197

dookreślony, Patrz:typ zamknięty

dostępność, 88double, 21, 22, 23, 28dynamiczny, 165

konwersja, 166enum, 91false, 40float, 21, 22, 23, 28int, 8, 14, 15, 21, 22, 35kontrola, 83konwersja, 24, 136, 166

jawna, 24niejawna, 24, 26

liczbowy, 21, 40, 86logiczny, 14, 21, 28, 40long, 17, 21, 22, 23nazwa

kolizja, 62w pełni

kwalifikowana, 59niedookreślony,

Patrz: typ otwartyniejawnie

konwertowany, 23niemodyfikowalny, 69obiektowy, 21object, 21, 81, 82, 165ObsoleteAttribute,

169, 170odwołanie, 59otwarty, 95, 97predefiniowany, 13,

14, 15, 21, 40referencyjny, 21, 29, 31,

36, 38, 41, 63, 130sbyte, 21, 22, 26short, 21, 22, 26string, 14, 21, 31, 33uint, 21, 22, 23ulong, 21, 22, 23uogólniony,

Patrz: uogólnienieushort, 21, 22, 26void, 63, 104wartościowy, 21, 31,

39, 86, 182

wartośćdomyślna,

Patrz: wartośćdomyślna

wbudowany, Patrz:typ predefiniowany

własny, 14wnioskowany, 23wskaźnikowy, 182wyliczeniowy, 40, 91,

92konwersja, 92

z dopuszczalnąwartością pustą, 130konwersja, 131, 133pakowanie, 131

zagnieżdżony, 94zamknięty, 95znakowy, 21, 40

type argument, Patrz:argument typowy

type parameter, Patrz:parametr typowy

operator, 84argument, 95

U

uogólnienie, 94, 95, 96ograniczenia, 98pochodne, 99

V

verbatim string literal,Patrz: literał ciąguznaków dosłowny

void expression, Patrz:wyrażenie puste

W

wartośćdomyślna, 40, 43, 63,

92minus 0, 27

minusnieskończoność, 27

NaN, 27null, 36, 40, 104, 130plus nieskończoność,

27whitespace, Patrz: znak

biała spacjawiązanie

dynamiczne, 161, 162,163, 164, 165, 167

językowe, 163, 164, 165niestandardowe, 163statyczne, 162według reguł, 163ze wskazania,

Patrz: wiązanieniestandardowe

wielorozprowadzanie,Patrz: multimetoda

wiersz poleceń, 10właściwość, 8, 66

akcesor, 67, 68get, 67, 69poziom dostępności,

69set, 67, 68, 69

automatyczna, 68inicjalizacja, 68

Length, 35Rank, 35skrócona do wyrażenia,

68this, 70wirtualna, 77wyłącznie do

odczytu, 67zapisu, 67

wskaźnik beztypowy, 185współbieżność, 174, 179,

180wyjątek

czasu wykonania, 133,165

DivideByZeroException, 118

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

Page 20: Tytuł oryginału: C# 6.0 Pocket Reference: Instant Help for ...pdf.helion.pl/ch6lek/ch6lek.pdf · Zaczynając od wersji 5.0 języka C# na bazie słów kluczowych await i async ...

198 Skorowidz

wyjątekfiltr, 120IndexOutOfRange

Exception, 35InvalidCastException,

83NullReference

Exception, 50OverflowException,

25RuntimeBinder

Exception, 165,166

System.ArgumentException, 124

System.ArgumentNullException, 122,

124System.ArgumentOut

OfRangeException, 124

System.InvalidOperationException,

124System.NotImple

mentedException,124

System.NotSupportedException, 124

System.ObjectDisposedException, 124

typ, 119OutOfMemory

Exception, 119System.Exception,

119WebException, 120zgłaszanie, 122

ponowne, 122, 123wyrażenie, 45, 52, 63, 65

dynamiczne, 167lambda, 113, 114

asynchroniczne, 181zmienna

wciągnięta, 114,115

zmiennazewnętrzna, 114

logiczne, 29przypisania, 46puste, 45składnia

kaskadowa, 150,151

wyrażeniowa, 150,151

zapytaniowe, 150, 156

X

XML, 188znacznik

c, 189code, 190example, 189exception, 189include, 190list, 190para, 190param, 189paramref, 190permission, 189remarks, 189returns, 189see, 190seealso, 190summary, 189

Z

zapieczętowanieimplementacji, 79

zapytanie, 140, 150, 153zintegrowane, 139,

Patrz też: LINQzasada przypisań

oznaczonych, 39zdarzenie, 8, 108

akcesor,Patrz: akcesor

EventArgs, 107implementacja, 109

KeyEventArgs, 107MouseEventArgs, 107nadawca,

Patrz: nadawcasubskrybent,

Patrz: subskrybentwirtualne, 77

zestaw, 9zaprzyjaźniony, 87

Zip, Patrz: złączeniesuwakowe

złączenie, 155suwakowe, 157

zmienna, 13, 38, 45deklaracja, 44inicjalizacja, 44lokalna, 38, 39, 52,

114nazwa, 10

znak!, 48, 133, 134!=, 29, 49, 85, 93, 132,

134$, 32%, 24, 48, 133, 134&, 26, 48, 49, 93, 133,

134, 182, 184&&, 29, 49&=, 49(), 47, 48(), 12*, 12, 24, 48, 133, 134,

182, 184*/, 13*=, 49., 12, 47/, 24, 48, 133, 134/*, 13//, 13/=, 49;, 12?, 130?., 48?:, 49??, 134@, 11

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

Page 21: Tytuł oryginału: C# 6.0 Pocket Reference: Instant Help for ...pdf.helion.pl/ch6lek/ch6lek.pdf · Zaczynając od wersji 5.0 języka C# na bazie słów kluczowych await i async ...

Skorowidz 199

znak[], 47^, 26, 49, 93, 133, 134^=, 49{, 12|, 26, 49, 93, 133, 134||, 29, 49|=, 49}, 12~, 26, 48, 93, 133, 134+, 24, 32, 48, 93, 133,

134

++, 25, 47, 48, 93, 133,134

+=, 49, 93<, 29, 48, 93, 132, 134<<, 26, 48, 133, 134<<=, 49<=, 29, 48, 93, 132=, 12, 46, 49, 93-=, 49, 93==, 13, 29, 49, 85, 93,

131, 132, 134=>, 49

>, 29, 48, 93, 132, 134->, 47, 182, 184>=, 29, 49, 93, 132>>, 26, 48, 133, 134>>=, 49biała spacja, 34ciąg, Patrz: ciąg

znakówinterpunkcyjny

języka C, 12sterujący, 30

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

Page 22: Tytuł oryginału: C# 6.0 Pocket Reference: Instant Help for ...pdf.helion.pl/ch6lek/ch6lek.pdf · Zaczynając od wersji 5.0 języka C# na bazie słów kluczowych await i async ...

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

Page 24: Tytuł oryginału: C# 6.0 Pocket Reference: Instant Help for ...pdf.helion.pl/ch6lek/ch6lek.pdf · Zaczynając od wersji 5.0 języka C# na bazie słów kluczowych await i async ...