Cyfroteka.pl

klikaj i czytaj online

Cyfro
Czytomierz
00585 006729 11256592 na godz. na dobę w sumie
C# 5.0. Leksykon kieszonkowy. Wydanie III - książka
C# 5.0. Leksykon kieszonkowy. Wydanie III - książka
Autor: , Liczba stron: 208
Wydawca: Helion Język publikacji: polski
ISBN: 978-83-246-6273-9 Data wydania:
Lektor:
Kategoria: ebooki >> komputery i informatyka >> programowanie >> c# - programowanie
Porównaj ceny (książka, ebook, audiobook).

Kompendium C# zawsze pod ręką!

C# to obiektowy język programowania przeznaczony do tworzenia rozwiązań dla platformy .NET. Dzięki licznym zaletom zdobył ogromną popularność wśród programistów i jest jednym z wiodących języków programowania. W jego kolejnej wersji, 5.0, wprowadzono usprawnienia, dzięki którym życie programistów stało się łatwiejsze. Ten podręczny leksykon pozwoli Ci błyskawicznie poznać język C# oraz nowości wprowadzone w wersji 5.

W trakcie lektury poznasz podstawy języka C#, jego składnię, sposób deklarowania zmiennych i tworzenia funkcji. Nauczysz się operować na typach liczbowych, tworzyć pętle, instrukcje warunkowe oraz przestrzenie nazw. Ponadto wkroczysz w świat programowania obiektowego, zaznajamiając się z dziedziczeniem, polimorfizmem i interfejsami. Kolejne strony to coraz bardziej zaawansowana wiedza na temat języka LINQ, wiązań dynamicznych (nowość w C# 5.0) i funkcji asynchronicznych. Ten leksykon to pozycja obowiązkowa dla każdego programisty. Sprawdzi się również w rękach początkujących programistów jako błyskawiczny przewodnik po konstrukcjach języka C#. Warto mieć tę książkę!

Poznaj:

Bądź na bieżąco z nowymi możliwościami C# 5.0!

Znajdź podobne książki Ostatnio czytane w tej kategorii

Darmowy fragment publikacji:

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. • Kup książkę • Poleć książkę • Oceń książkę • Księgarnia internetowa • Lubię to! » Nasza społeczność Leksykon kieszonkowy Konwencje typograficzne Korzystanie z przyk(cid:228)adowych programów Pierwszy program w C# Sk(cid:228)adnia System typów Typy liczbowe Typ warto(cid:264)ci logicznych i operatory logiczne Znaki i ci(cid:241)gi znaków Tablice Zmienne i parametry Operatory i wyra(cid:276)enia Instrukcje Przestrzenie nazw Klasy Dziedziczenie Typ object Struktury Modyfikatory dost(cid:246)pu Interfejsy Typy wyliczeniowe Typy zagnie(cid:276)d(cid:276)one Uogólnienia Delegaty Zdarzenia Wyra(cid:276)enia lambda Metody anonimowe Wyj(cid:241)tki i instrukcja try Enumeratory i iteratory Typy z dopuszczaln(cid:241) warto(cid:264)ci(cid:241) pust(cid:241) Spis tre(cid:316)ci 5 5 6 7 10 13 22 29 31 34 38 46 51 58 62 72 80 84 85 87 90 92 93 101 107 113 116 117 124 129 3 Kup książkęPoleć książkę Przeci(cid:241)(cid:276)anie operatorów Metody rozszerzaj(cid:241)ce Typy anonimowe LINQ Wi(cid:241)zanie dynamiczne Atrybuty Atrybuty wywo(cid:228)ania Funkcje asynchroniczne Wska(cid:274)niki i kod nienadzorowany Dyrektywy preprocesora Dokumentacja XML O autorach Skorowidz 134 137 139 139 163 171 175 176 185 189 191 195 197 4 (cid:95) Spis tre(cid:316)ci Kup książkęPoleć książkę Wi(cid:233)zanie dynamiczne Wi(cid:241)zanie dynamiczne oznacza przesuni(cid:246)cie momentu wi(cid:241)zania — pro- cesu ustalania typów, sk(cid:228)adowych i wywo(cid:228)a(cid:254) — od czasu kompilacji do czasu wykonania programu. Wi(cid:241)zanie dynamiczne zosta(cid:228)o wpro- wadzone do j(cid:246)zyka C# w wersji 4.0; ma zastosowanie, kiedy programista wie, (cid:276)e pewna metoda, sk(cid:228)adowa czy operacja istnieje, ale kompilator nie ma o niej informacji. Do takich sytuacji dochodzi cz(cid:246)sto w ramach interoperacji z j(cid:246)zykami dynamicznymi (jak IronPython) i obiektami COM, a tak(cid:276)e w sytuacjach typowych dla zastosowa(cid:254) mechanizmów refleksji. Typ dynamiczny jest deklarowany z kontekstowym s(cid:228)owem klu- czowym dynamic: dynamic d = GetSomeObject(); d.Quack(); Typ dynamiczny nakazuje kompilatorowi rozlu(cid:274)ni(cid:232) kontrol(cid:246) typów; programista oczekuje, (cid:276)e w czasie wykonania zmienna typu d b(cid:246)dzie posiada(cid:228)a metod(cid:246) Quack. Jedyna trudno(cid:264)(cid:232) w tym, (cid:276)e w czasie kompi- lacji nie mo(cid:276)na tego potwierdzi(cid:232). Poniewa(cid:276) d jest zmienn(cid:241) typu dy- namicznego, kompilator opó(cid:274)ni wi(cid:241)zanie wywo(cid:228)ania metody Quack na rzecz d do czasu wykonania programu. Aby lepiej zrozumie(cid:232), co to oznacza, nale(cid:276)a(cid:228)oby zdefiniowa(cid:232) rozró(cid:276)nienie pomi(cid:246)dzy wi(cid:241)zaniem statycznym i dynamicznym. Wi(cid:233)zanie statyczne a wi(cid:233)zanie dynamiczne Klasycznym przyk(cid:228)adem wi(cid:241)zania jest odwzorowanie nazwy wyst(cid:246)- puj(cid:241)cej w kompilowanym wyra(cid:276)eniu na konkretn(cid:241) metod(cid:246) czy sk(cid:228)a- dow(cid:241). Na przyk(cid:228)ad w poni(cid:276)szym wyra(cid:276)eniu kompilator musi odszuka(cid:232) implementacj(cid:246) metody o nazwie Quack: d.Quack(); Za(cid:228)ó(cid:276)my, (cid:276)e statyczny typ d to Duck: Duck d = ... d.Quack(); W najprostszym przypadku kompilator dokonuje wi(cid:241)zania poprzez wyszukanie bezparametrowej metody Quack w klasie Duck. Je(cid:264)li to si(cid:246) nie powiedzie, kompilator rozszerzy poszukiwania na metody z pa- rametrami opcjonalnymi, metody typów bazowych, a wreszcie metody rozszerzaj(cid:241)ce, które przyjmuj(cid:241) zmienn(cid:241) typu Duck w miejsce pierwsze- go argumentu wywo(cid:228)ania. Je(cid:264)li i to nie doprowadzi do dopasowania Wi(cid:233)zanie dynamiczne (cid:95) 163 Kup książkęPoleć książkę wywo(cid:228)ania do metody, kompilator zg(cid:228)osi b(cid:228)(cid:241)d kompilacji. Jak wida(cid:232), niezale(cid:276)nie od tego, jaka metoda zostanie ostatecznie wybrana do realizacji wywo(cid:228)ania, wybór ten jest dokonywany przez kompilator, a samo dopasowanie wywo(cid:228)ania i metody bazuje wy(cid:228)(cid:241)cznie na infor- macji dost(cid:246)pnej statycznie, to znaczy na widocznych w kodzie defi- nicjach typów operandów (tutaj d). Tyle o wi(cid:241)zaniu statycznym. Zmie(cid:254)my teraz statyczny typ zmiennej d na typ object: object d = ... d.Quack(); Wywo(cid:228)anie Quack sprowokuje teraz b(cid:228)(cid:241)d kompilacji, poniewa(cid:276) cho(cid:232) warto(cid:264)(cid:232) przechowywana w d mo(cid:276)e zawiera(cid:232) metod(cid:246) Quack, kompi- lator nie mo(cid:276)e jej zna(cid:232), gdy(cid:276) jedyn(cid:241) informacj(cid:241), jak(cid:241) dysponuje, jest najogólniejszy z mo(cid:276)liwych typ zmiennej object. Co innego, je(cid:264)li typ d zostanie okre(cid:264)lony jako dynamic: dynamic d = ... d.Quack(); Typ dynamiczny jest troch(cid:246) jak typ object, to znaczy równie ma(cid:228)o mówi o zmiennej d. Ró(cid:276)nica polega na tym, (cid:276)e typ dynamiczny mo(cid:276)e by(cid:232) u(cid:276)ywany w sposób nieweryfikowalny w czasie kompilacji. Opera- cje na obiekcie deklarowanym jako dynamic b(cid:246)d(cid:241) rozstrzygane w opar- ciu o typ obiektu ustalony w czasie wykonania programu, a nie typ z czasu kompilacji. Kompilator, napotkawszy wyra(cid:276)enie wi(cid:241)zane dynamicznie (czyli wyra(cid:276)enie, w którym wyst(cid:246)puje dowolna war- to(cid:264)(cid:232) typu dynamicznego), ogranicza si(cid:246) jedynie do takiego obrobienia wyra(cid:276)enia, (cid:276)eby wi(cid:241)zanie mog(cid:228)o zosta(cid:232) rozstrzygni(cid:246)te w czasie wy- konania programu. W czasie wykonania, je(cid:264)li oka(cid:276)e si(cid:246), (cid:276)e obiekt dynamiczny imple- mentuje interfejs IDynamicMetaObjectProvider, to w(cid:228)a(cid:264)nie ten interfejs zo- stanie wykorzystany do rozstrzygni(cid:246)cia dopasowania; w innym przy- padku (cid:264)rodowisko wykonawcze rozstrzygnie wywo(cid:228)anie analogicznie, jak zrobi(cid:228)by to kompilator w czasie kompilacji, to znaczy przeszuka aktualny typ obiektu, jego typy bazowe oraz metody rozszerzaj(cid:241)ce. Rozstrzyganie w oparciu o implementacj(cid:246) interfejsu IdynamicMetaObject (cid:180)Binding nazywamy wi(cid:241)zaniem ze wskazania albo wi(cid:241)zaniem niestandar- dowym (ang. custom binding), a rozstrzyganie w oparciu o dost(cid:246)pn(cid:241) w czasie wykonania wiedz(cid:246) o typie i jego typach bazowych nazy- wamy wi(cid:241)zaniem wed(cid:228)ug regu(cid:228) albo wi(cid:241)zaniem j(cid:246)zykowym (ang. language binding). 164 (cid:95) C# 5.0. Leksykon kieszonkowy Kup książkęPoleć książkę Wi(cid:233)zanie ze wskazania Wi(cid:241)zanie ze wskazania dotyczy przypadku, kiedy obiekt typu dy- namicznego implementuje interfejs IDynamicMetaObjectProvider (IDMOP). Interfejs ten mo(cid:276)na co prawda implementowa(cid:232) w typach pisanych w j(cid:246)zyku C#, ale najcz(cid:246)(cid:264)ciej dotyczy to obiektów pozyskiwanych z in- nych j(cid:246)zyków dynamicznych z rodziny .NET, operuj(cid:241)cych w ramach (cid:264)rodowiska wykonawczego Dynamic Language Runtime (DLR) (jak IronPython czy IronRuby). Obiekty pochodz(cid:241)ce z tych j(cid:246)zyków nie- jawnie implementuj(cid:241) interfejs IDMOP jako sposób bezpo(cid:264)redniego kontrolowania znaczenia operacji, które b(cid:246)d(cid:241) na tych obiektach wykonywane. Oto prosty przyk(cid:228)ad: using System; using System.Dynamic; public class Test { static void Main() { dynamic d = new Duck(); d.Quack(); // wywo(cid:225)ano Quack d.Waddle(); // wywo(cid:225)ano Waddle } } public class Duck : DynamicObject { public override bool TryInvokeMember ( InvokeMemberBinder binder, object[] args, out object result) { Console.WriteLine ( wywo(cid:239)ano + binder.Name); result = null; return true; } } Klasa Duck w istocie nie posiada metody Quack, a jedynie wskazanie wi(cid:241)zania, dzi(cid:246)ki któremu przechwytuje i interpretuje wywo(cid:228)ania wszyst- kich metod na rzecz obiektów tej klasy. Wi(cid:241)zania ze wskazania s(cid:241) omawiane szerzej w 20. rozdziale ksi(cid:241)(cid:276)ki C# 5.0 in a Nutshell. Wi(cid:233)zanie j(cid:253)zykowe Z wi(cid:241)zaniem j(cid:246)zykowym mamy do czynienia w przypadku obiektów dynamicznych, które nie implementuj(cid:241) interfejsu IdynamicMetaObject (cid:180)Provider. Wi(cid:241)zanie j(cid:246)zykowe stosuje si(cid:246) przede wszystkim do ob- Wi(cid:233)zanie dynamiczne (cid:95) 165 Kup książkęPoleć książkę chodzenia niedogodno(cid:264)ci niedoskonale zaprojektowanych typów, a tak(cid:276)e niektórych ogranicze(cid:254) w(cid:228)a(cid:264)ciwych systemowi typów plat- formy .NET. Typowym problemem jest na przyk(cid:228)ad brak jednolitego interfejsu typów liczbowych (wiemy ju(cid:276), (cid:276)e wi(cid:241)zanie dynamiczne dotyczy metod; dopowiedzmy, (cid:276)e dotyczy równie(cid:276) 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(cid:241)zania dynamicznego s(cid:241) oczywiste, bo nie trzeba powiela(cid:232) kodu wspólnych operacji obliczeniowych dla ka(cid:276)dego z rozmaitych typów liczbowych. Wad(cid:241) jest natomiast utrata statycznej kontroli typów, a wi(cid:246)c i ryzyko zamiany b(cid:228)(cid:246)dów kompilacji na wyj(cid:241)tki czasu wykonania. Uwaga Wi(cid:241)zanie dynamiczne oznacza os(cid:228)abienie kontroli typów, ale tylko statycznej — kontrola dynamiczna wci(cid:241)(cid:276) jest obecna. Inaczej ni(cid:276) w mechanizmach refleksji, wi(cid:241)zanie dynamiczne nie pozwala np. na omini(cid:246)cie regu(cid:228) widoczno(cid:264)ci sk(cid:228)adowych. Dynamiczne wi(cid:241)zanie j(cid:246)zykowe celowo ma mo(cid:276)liwie blisko odwzo- rowywa(cid:232) wi(cid:241)zanie statyczne (a wi(cid:246)c dzia(cid:228)a tak, jak dzia(cid:228)a(cid:228)by kom- pilator, gdyby tylko typ dynamiczny by(cid:228) mu znany statycznie). Za- chowanie programu z poprzedniego przyk(cid:228)adu by(cid:228)oby identyczne, gdyby(cid:264)my jawnie oprogramowali metod(cid:246) Mean do operowania na ty- pie int. Najbardziej znamienna ró(cid:276)nica pomi(cid:246)dzy wi(cid:241)zaniem dyna- micznym i statycznym dotyczy metod rozszerzaj(cid:241)cych; b(cid:246)dzie o tym mowa w punkcie „Funkcje niedynamiczne”. Uwaga Wi(cid:241)zanie dynamiczne wi(cid:241)(cid:276)e si(cid:246) z narzutem wydajno(cid:264)ci wykonania programu, ale dzi(cid:246)ki mechanizmom cachowania DLR powtarzaj(cid:241)- ce si(cid:246) wykonania tych samych wyra(cid:276)e(cid:254) wi(cid:241)zanych dynamicznie s(cid:241) skutecznie optymalizowane, co pozwala stosunkowo wydajnie wykonywa(cid:232) wywo(cid:228)ania dynamiczne na przyk(cid:228)ad w p(cid:246)tlach. Opty- malizacja redukuje narzut rozstrzygni(cid:246)cia prostego wyra(cid:276)enia dy- namicznego do oko(cid:228)o 100 ns (mowa o wspó(cid:228)czesnym komputerze). 166 (cid:95) C# 5.0. Leksykon kieszonkowy Kup książkęPoleć książkę Wyj(cid:233)tek RuntimeBinderException Je(cid:264)li sk(cid:228)adowej nie uda si(cid:246) zwi(cid:241)za(cid:232) dynamicznie, (cid:264)rodowisko wyko- nawcze zg(cid:228)osi wyj(cid:241)tek RuntimeBinderException, b(cid:246)d(cid:241)cy odpowiednikiem b(cid:228)(cid:246)du czasu kompilacji, ale wykrytym dopiero w czasie wykonania: dynamic d = 5; d.Hello(); // wywo(cid:225)anie zg(cid:225)osi wyj(cid:261)tek RuntimeBinderException Wyj(cid:241)tek zg(cid:228)oszony w powy(cid:276)szym kodzie oznacza, (cid:276)e typ dynamiczny (tu int) nie posiada metody Hello. Reprezentacja typu dynamicznego Typ dynamiczny cechuje si(cid:246) znacznym podobie(cid:254)stwem do typu ob- ject — (cid:264)rodowisko traktuje na przyk(cid:228)ad poni(cid:276)sze porównanie jako prawdziwe: typeof (dynamic) == typeof (object) Zasada ta rozci(cid:241)ga si(cid:246) równie(cid:276) 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(cid:276)e odno- si(cid:232) si(cid:246) do obiektu dowolnego typu (za wyj(cid:241)tkiem typów wska(cid:274)ni- kowych): dynamic x = ahoj ; Console.WriteLine (x.GetType().Name); // String x = 123; // nie ma b(cid:225)(cid:266)du (cho(cid:252) to ta sama zmienna) Console.WriteLine (x.GetType().Name); // Int32 Pomi(cid:246)dzy referencjami object i referencjami dynamic strukturalnie nie ma (cid:276)adnej ró(cid:276)nicy. Referencja dynamic pozwala po prostu na dynamiczne wi(cid:241)zanie operacji na obiekcie, do którego si(cid:246) odnosi. Mo(cid:276)na nawet przekonwertowa(cid:232) obiekt object na typ dynamic i nast(cid:246)pnie wykona(cid:232) na nim dowoln(cid:241) operacj(cid:246) dynamiczn(cid:241): object o = new System.Text.StringBuilder(); dynamic d = o; d.Append ( ahoj ); Console.WriteLine (o); // ahoj Wi(cid:233)zanie dynamiczne (cid:95) 167 Kup książkęPoleć książkę Konwersje typów dynamicznych Typ dynamiczny daje si(cid:246) niejawnie skonwertowa(cid:232) na dowolny inny typ, a tak(cid:276)e dowolny inny typ mo(cid:276)na niejawnie konwertowa(cid:232) na typ dynamiczny. Aby jednak konwersja by(cid:228)a skuteczna, w(cid:228)a(cid:264)ciwy typ obiektu dynamicznego musi faktycznie da(cid:232) si(cid:246) skonwertowa(cid:232) na docelowy typ statyczny. Poni(cid:276)szy kod sprowokuje wyj(cid:241)tek RuntimeBinderException, poniewa(cid:276) typ int nie daje si(cid:246) niejawnie konwertowa(cid:232) na typ short: int i = 7; dynamic d = i; long l = d; // OK — niejawna konwersja dzia(cid:225)a short j = d; // wyj(cid:261)tek RuntimeBinderException var a dynamic Typy var i dynamic wydaj(cid:241) si(cid:246) podobne, ale w istocie zasadniczo si(cid:246) ró(cid:276)ni(cid:241): (cid:120) var oznacza: „niech kompilator okre(cid:264)li faktyczny typ”; (cid:120) dynamic oznacza: „niech (cid:264)rodowisko wykonawcze okre(cid:264)li faktycz- ny typ”. Spójrzmy: dynamic x = ahoj ; // statyczny typ to dynamic var y = ahoj ; // statyczny typ to string int i = x; // wyj(cid:261)tek wykonania int j = y; // b(cid:225)(cid:261)d kompilacji Wyra(cid:348)enia dynamiczne Wi(cid:241)zanie dynamiczne mo(cid:276)e dotyczy(cid:232) pól, w(cid:228)a(cid:264)ciwo(cid:264)ci, metod, zda- rze(cid:254), konstruktorów, indekserów, operatorów i konwersji. Nie mo(cid:276)na pobra(cid:232) wyniku wyra(cid:276)enia dynamicznego z typem zwra- canym void; podobnie jest w przypadku wyra(cid:276)e(cid:254) statycznych. Ró(cid:276)nica dotyczy momentu wyst(cid:241)pienia b(cid:228)(cid:246)du (tutaj w czasie wykonania pro- gramu). Wyra(cid:276)enia dynamiczne to najcz(cid:246)(cid:264)ciej takie wyra(cid:276)enia, w których uczestnicz(cid:241) dynamiczne operandy, a to dlatego, (cid:276)e najcz(cid:246)(cid:264)ciej niedo- st(cid:246)pno(cid:264)(cid:232) statycznej informacji o typie daje efekt kaskadowy: dynamic x = 2; var y = x * 3; // statyczny typ y to dynamic 168 (cid:95) C# 5.0. Leksykon kieszonkowy Kup książkęPoleć książkę Od tej regu(cid:228)y jest kilka oczywistych wyj(cid:241)tków. Po pierwsze, rzuto- wanie typu dynamicznego na typ statyczny daje wyra(cid:276)enie statyczne. Po drugie, wywo(cid:228)anie konstruktora zawsze daje wyra(cid:276)enie statyczne, nawet je(cid:264)li argumenty wywo(cid:228)ania maj(cid:241) typy dynamiczne. Istnieje te(cid:276) kilka przypadków brzegowych, w których wyra(cid:276)enie za- wieraj(cid:241)ce argument dynamiczny samo jest statyczne; zaliczymy tu przekazanie indeksu do tablicy i wyra(cid:276)enia tworzenia delegatów. Rozstrzyganie przeci(cid:233)(cid:348)e(cid:295) sk(cid:293)adowych dynamicznych Klasycznym przyk(cid:228)adem u(cid:276)ycia wi(cid:241)zania dynamicznego jest dyna- miczny odbiornik komunikatów, to znaczy obiekt dynamiczny jako podmiot dynamicznego wywo(cid:228)ania metody: dynamic x = ...; x.Foo (123); // x odbiera wywo(cid:225)ania Jednak zakres zastosowa(cid:254) typów dynamicznych jest szerszy i obejmuje tak(cid:276)e dynamiczne wi(cid:241)zanie argumentów wywo(cid:228)ania metody, gdzie rozstrzygni(cid:246)cie wywo(cid:228)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(cid:241)(cid:276)enia w czasie wykonania jest równie(cid:276) okre(cid:264)lane mianem wielorozprowadzania albo multimetody (ang. multiple dispatch), a stosuje si(cid:246) je mi(cid:246)dzy innymi w implementacjach wzorca projektowe- go Wizytator. W przypadku dynamicznych argumentów wywo(cid:228)ania metody (ale bez dynamicznego podmiotu wywo(cid:228)ania) kompilator mo(cid:276)e przepro- wadzi(cid:232) podstawowe sprawdziany skuteczno(cid:264)ci wywo(cid:228)ania dynamicz- nego: sprawdzane jest wi(cid:246)c cho(cid:232)by istnienie funkcji z odpowiedni(cid:241) nazw(cid:241) i liczb(cid:241) parametrów. Je(cid:264)li takiej metody nie ma, wiadomo, (cid:276)e rozstrzygni(cid:246)cie dynamiczne równie(cid:276) b(cid:246)dzie nieudane, wi(cid:246)c kompilator zg(cid:228)asza b(cid:228)(cid:241)d kompilacji. Wi(cid:233)zanie dynamiczne (cid:95) 169 Kup książkęPoleć książkę W przypadku wywo(cid:228)a(cid:254) z argumentami typów dynamicznych oraz statycznych ostateczny wybór metody b(cid:246)dzie odzwierciedla(cid:228) mie- szanin(cid:246) decyzji podj(cid:246)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(cid:228)anie X(o,d) jest wi(cid:241)zane dynamicznie, poniewa(cid:276) jeden z jego argumentów ma typ dynamic. Ale skoro typ argumentu o jest statyczny, ju(cid:276) w czasie kompilacji wiadomo, (cid:276)e w gr(cid:246) wchodz(cid:241) jedynie dwa pierwsze przeci(cid:241)(cid:276)enia X. Ostatecznie wybór padnie na drugie z nich, a to ze wzgl(cid:246)du na dok(cid:228)adnie dopasowany statyczny typ o i dok(cid:228)adnie dopasowany dynamiczny typ d. Innymi s(cid:228)owy, kompilator usi(cid:228)uje maksymalnie wykorzysta(cid:232) statyczn(cid:241) informacj(cid:246) o typach nawet w przy- padku wyra(cid:276)e(cid:254) dynamicznych. Funkcje niedynamiczne Niektórych funkcji nie mo(cid:276)na wywo(cid:228)a(cid:232) dynamicznie. Dotyczy to: (cid:120) metod rozszerzaj(cid:241)cych (ze sk(cid:228)adni(cid:241) metod rozszerzaj(cid:241)cych), (cid:120) dowolnych sk(cid:228)adowych interfejsu (w przypadku wywo(cid:228)a(cid:254) przez interfejs), (cid:120) sk(cid:228)adowych typów bazowych przykrytych typami pochodnymi. Niemo(cid:276)no(cid:264)(cid:232) wynika z tego, (cid:276)e wi(cid:241)zanie dynamiczne potrzebuje dwóch informacji: nazwy metody do wywo(cid:228)ania oraz obiektu, na rzecz które- go ma si(cid:246) odby(cid:232) wywo(cid:228)anie. Ale w powy(cid:276)szych przypadkach uczestni- czy dodatkowy typ, znany wy(cid:228)(cid:241)cznie w czasie kompilacji. J(cid:246)zyk C# w wersji 5.0 nie daje mo(cid:276)liwo(cid:264)ci dynamicznego okre(cid:264)lenia dodatko- wego typu. W przypadku wywo(cid:228)ania metody rozszerzaj(cid:241)cej tym dodatkowym typem jest klasa rozszerzaj(cid:241)ca, wybierana niejawnie na bazie dyrektyw using widocznych w kodzie (cid:274)ród(cid:228)owym (a wi(cid:246)c widocznych tylko w czasie kompilacji). Przy wywo(cid:228)aniach za po(cid:264)rednictwem interfejsu dodatkowy typ jest komunikowany jawn(cid:241) albo niejawn(cid:241) konwersj(cid:241) 170 (cid:95) C# 5.0. Leksykon kieszonkowy Kup książkęPoleć książkę (w przypadku implementacji jawnej nie da si(cid:246) wywo(cid:228)a(cid:232) sk(cid:228)adowej bez rzutowania na typ interfejsu). Tak samo w przypadku przykry- wania sk(cid:228)adowych klasy bazowej: dodatkowy typ musi by(cid:232) okre(cid:264)lo- ny albo poprzez rzutowanie, albo poprzez s(cid:228)owo kluczowe base, a oba s(cid:241) widoczne wy(cid:228)(cid:241)cznie w czasie kompilacji. Atrybuty Znamy ju(cid:276) pewn(cid:241) metod(cid:246) oznaczania elementów kodu programu atry- butami — w postaci modyfikatorów takich jak virtual czy ref. Konstruk- cje te s(cid:241) wbudowane w j(cid:246)zyk programowania. Tymczasem mechanizm atrybutów to rozszerzalny mechanizm przewidziany jako metoda do- dawania do elementów kodu (zestawów, typów, sk(cid:228)adowych, warto(cid:264)ci zwracanych itd.) w(cid:228)asnych informacji. Rozszerzalno(cid:264)(cid:232) tego rodzaju jest wykorzystywana w implementacji us(cid:228)ug integruj(cid:241)cych si(cid:246) z samym systemem typów, bez konieczno(cid:264)ci definiowania dla nich nowych, osobnych s(cid:228)ów kluczowych i konstrukcji C#. Dobrym przyk(cid:228)adem sytuacji u(cid:276)ycia atrybutów jest serializacja — pro- ces, w którym dowolny obiekt jest zamieniany na pewn(cid:241) umówion(cid:241) re- prezentacj(cid:246) nadaj(cid:241)c(cid:241) si(cid:246) do utrwalenia, a potem do odzyskania z niej pierwotnego stanu obiektu. W takim procesie atrybut wyst(cid:246)puj(cid:241)cy przy polu mo(cid:276)e okre(cid:264)la(cid:232) specyfik(cid:246) translacji pomi(cid:246)dzy reprezentacj(cid:241) tego pola w C# a reprezentacj(cid:241) przyj(cid:246)t(cid:241) w formacie serializacji obiektów. Klasy atrybutów Atrybut jest definiowany poprzez klas(cid:246), która koniecznie musi dzie- dziczy(cid:232) (wprost albo po(cid:264)rednio) z abstrakcyjnej klasy bazowej System. (cid:180)Attribute. Do(cid:228)(cid:241)czenie atrybutu do elementu kodu programu polega na podaniu nazwy atrybutu w nawiasach kwadratowych przed oznacza- nym elementem kodu. Na przyk(cid:228)ad poni(cid:276)szy kod do(cid:228)(cid:241)cza do klasy Foo atrybut ObsoleteAttribute: [ObsoleteAttribute] public class Foo { … } Taki atrybut b(cid:246)dzie rozpoznany przez kompilator i przy kompilacji spo- woduje wyprowadzenie ostrze(cid:276)enia o odwo(cid:228)aniu do typu albo sk(cid:228)ado- wej, oznaczonych jako przestarza(cid:228)e (ang. obsolete). Przyj(cid:246)(cid:228)o si(cid:246), (cid:276)e wszystkie nazwy typów atrybutów maj(cid:241) w sobie s(cid:228)owo „Attribute”. W C# ta konwencja jest honorowana do tego stopnia, (cid:276)e przy do(cid:228)(cid:241)cza- niu atrybutu do elementu w nawiasach kwadratowych nie trzeba ju(cid:276) podawa(cid:232) przyrostka Attribute: Atrybuty (cid:95) 171 Kup książkęPoleć książkę 196 (cid:95) C# 5.0. Leksykon kieszonkowy Kup książkęPoleć książkę A abstract class, Patrz: klasa abstrakcyjna agregator zada(cid:254), 183 aplikacja, 9, 10 argument, 8 nazwany, 44 typowy, 94 assembly, Patrz: zestaw atrybut, 171 CLSCompliant, 173 obiekt docelowy, 172 odwo(cid:228)ania w czasie wykonania, 174 w(cid:228)asny, 173 wywo(cid:228)ania, 175 XmlElementAttribute, 172 attribute target, Patrz: atrybut obiekt docelowy B bia(cid:228)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(cid:228)(cid:241)d wej(cid:264)cia-wyj(cid:264)cia, 120 boxing, Patrz: pakowanie broadcaster, Patrz: nadawca C callback, Patrz: wywo(cid:228)anie zwrotne caller info attributes, Patrz: atrybut wywo(cid:228)ania Skorowidz captured variable, Patrz: zmienna wci(cid:241)gni(cid:246)ta cast, Patrz: rzutowanie ci(cid:241)g znaków, Patrz: znak ci(cid:241)g closure, Patrz: domkni(cid:246)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(cid:228)adowe, 15 statyczne, 99 wej(cid:264)ciowe, 8, 63 wyj(cid:264)ciowe, 8 deferred execution, Patrz: operator wykonanie opó(cid:274)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(cid:246)cie, 114, 115 dost(cid:246)pno(cid:264)(cid:232), 85 197 Kup książkęPoleć książkę downcasting, Patrz: referencja indekser, 8, 62, 68, 87, 95, 168 rzutowanie w dó(cid:228) dynamic type checking, Patrz: typ kontrola dynamiczna dyrektywa wirtualny, 75 indexer, Patrz: indekser inferencja, 23 instancja 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(cid:241)cy event, Patrz: zdarzenie F funkcja, 51 finalizator, 8, 62, 70, 84 finalizer, Patrz: finalizator fluent syntax, Patrz: sk(cid:228)adnia kaskadowa fully qualified type name, Patrz: typ nazwa w pe(cid:228)ni kwalifikowana funkcja, 8 asynchroniczna, 176, 180, 181, 183 niedynamiczna, 170 przes(cid:228)oni(cid:246)ta, 75 sk(cid:228)adowa, 15 wirtualna, 75 wysokopoziomowa, 7 wywo(cid:228)anie, 40 G garbage collector, Patrz: mechanizm generic method, Patrz: metoda od(cid:264)miecania uogólniona generic type, Patrz: typ uogólniony H hermetyzacja, 85 I identyfikator, 10, 11 IL, 61 iloczyn logiczny, 30 198 (cid:95) Skorowidz konwersja, Patrz: konwersja sk(cid:228)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(cid:276)d(cid:276)ona, 53, 54 if..else, 53 iteracyjna, 55 p(cid:246)tli, Patrz: p(cid:246)tla return, 57, 58, 126, 128 skoku, 57 switch, 54 throw, 57 try, 117 using, 121, 125, 138 warunkowa, 52 wyboru, 54 wyra(cid:276)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 Kup książkęPoleć książkę kowariantny, 100 rozszerzanie, 88 sk(cid:228)adowa, 170, Patrz: sk(cid:228)adowa interfejsu System. Collections.Generic.IEnumerator, 125 System.Collections.Generic. (cid:180)IEnumerable, 127 System.Collections.Generic. (cid:180)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(cid:246)zyk dynamiczny, 163 IronPython, 163 po(cid:264)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(cid:228)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(cid:254), 93 nienadzorowany, 185, 186 platformy, 109 uogólniony, 40 w(cid:228)asny u(cid:276)ytkowników, 109 XML, 191 (cid:274)ród(cid:228)owy, 9, 10, 189 kolejka LIFO, Patrz: LIFO kolizja nazw, 11 komentarz, 13 dokumentuj(cid:241)cy, 191, 192 jednowierszowy, 13 wielowierszowy, 13 kompilacja, 9, 10, 44, 71, 79, 163 /checked+, 26 /unsafe, 185 b(cid:228)(cid:241)d, 27, 100, 190 czasu, 25 opcje, 26 ostrze(cid:276)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(cid:241)(cid:276)anie, 64 statyczny, 69, 70 kontekst nienadzorowany, 180 synchronizacji, 179 unsafe, 39 kontrawariancja, 99, 101, 106, 107 Spis tre(cid:316)ci (cid:95) 199 Kup książkęPoleć książkę konwersja, 17, 73, 168 jawna, 17, 18, 24, 26, 130 liczbowa, 75 niejawna, 17, 18, 24, 130 numeryczna, 100 odpakowywania, 75, 100 przeci(cid:241)(cid:276)anie, 136 typów dynamicznych, 168 u(cid:276)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(cid:241)gni(cid:246)te, 114, 115 zewn(cid:246)trzne, 114 lambda expression, Patrz: lambda Language Integrated Query, Patrz: LINQ lazy execution, Patrz: operator wykonanie leniwe liczba, 8 ca(cid:228)kowita, 15, 18, 21, 24 16-bitowa, 27 8-bitowa, 27 rzeczywista, 23, 24 zaokr(cid:241)glanie, 28 zmiennoprzecinkowa, 24 LIFO, 80 lift, Patrz: operator po(cid:276)yczanie LINQ, 139 element, Patrz: element sekwencja, Patrz: sekwencja LINQPad, 140 lista, 139 litera(cid:228), 8, 12 dos(cid:228)owny ci(cid:241)gów znaków, 32 liczb ca(cid:228)kowitych, 23 rzeczywistych, 23 liczbowy, 23 200 (cid:95) Skorowidz przyrostek, 23 typ, 23 null, Patrz: null znakowy, 31 M makrodefinicja, 69 mechanizm asynchronicznego wywo(cid:228)ania funkcji, 176 atrybutów, 171 cachowania, 166 jawnego implementowania sk(cid:228)adowej interfejsu, 88 od(cid:264)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(cid:246)(cid:264)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 Kup książkęPoleć książkę 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(cid:241)(cid:276)anie, 63, 79 przes(cid:228)aniana, 76 publiczna, 44 Range, 149 rekurencyjna, 39 Remove, 33, 34 Remove.System.Delegate, 104 Repeat, 149 Replace, 33 Reverse, 147 rozszerzaj(cid:241)ca, 137, 138, 150, 151, 170 wywo(cid:228)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(cid:246)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 Spis tre(cid:316)ci (cid:95) 201 Kup książkęPoleć książkę 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(cid:254) nazw NaN, 27 nawias klamrowy, 12 negacja warto(cid:264)ci wyra(cid:276)enia logicznego, 30 nested type, Patrz: typ zagnie(cid:276)d(cid:276)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(cid:241) warto(cid:264)ci(cid:241) pust(cid:241) 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(cid:228)uga b(cid:228)(cid:246)dów, 117 wyj(cid:241)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(cid:228)kowitych, 25 przypisania, 13 202 (cid:95) Skorowidz 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(cid:246)pu do sk(cid:228)adowej przez wska(cid:274)nik, 185, 187 dwuargumentowy, 46 eksportu, 146, 149 ElementAt, 142 elementowy, 146, 148 filtruj(cid:241)cy, 146, 147 First, 142 funkcja, 134 generuj(cid:241)cy, 146, 149 g(cid:228)ó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 (cid:228)(cid:241)czenia, 146, 147, 156 (cid:228)(cid:241)czno(cid:264)(cid:232), 47 lewostronna, 48 prawostronna, 48 Max, 143 Min, 143 mno(cid:276)enia, 12, 26 new, 16 obliczenia nadzorowanego, 26 odwo(cid:228)ania, 12 Kup książkęPoleć książkę OrderBy, 150 pierwsze(cid:254)stwo, 47 pierwszorz(cid:246)dny, 46 pobrania adresu, 185 porównania, 13, 28, 29, 83, 92, 132 przeci(cid:241)(cid:276)anie, 135 porz(cid:241)dkuj(cid:241)cy, 146, 147 po(cid:276)yczanie, 131, 132 priorytet, 47, 48 projekcji, 146, 147 przeci(cid:241)(cid:276)anie, 48, 84, 134 przedrostkowy, 25 przypisania, 47, 48, 51 przyrostkowy, 25 relacji, 29, 30, 33, 132 przeci(cid:241)(cid:276)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(cid:264)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ó(cid:274)nione, 144 wy(cid:228)uskania, 185, 188 wywo(cid:228)ania metody, 46 z przypisaniem, 47 zapytania, 140, 146 kaskadowego, 149 zbiorów, 144, 146, 148 outer variable, Patrz: zmienna zewn(cid:246)trzna overflow, Patrz: przepe(cid:228)nienie zakresu override function, Patrz: funkcja przes(cid:228)oni(cid:246)ta P pakowanie, 80, 81, 93 parametr, 8, 40, 43 metody, 63 nazwany, 172 opcjonalny, 40, 43, 44, 45 pozycyjny, 172 przekazywany przez referencj(cid:246), 38, 42 przekazywany przez warto(cid:264)(cid:232), 38, 41, 42 referencyjny, 63 typowy, 93, 95 deklarowanie, 96 kowariantny, 100 warto(cid:264)(cid:232) domy(cid:264)lna, 97 wyj(cid:264)ciowy, 38, 63 partially qualified name, Patrz: przestrze(cid:254) nazw cz(cid:246)(cid:264)ciowa kwalifikacja nazw p(cid:246)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(cid:246)dny primitive type, Patrz: typ:prosty programowanie asynchroniczne, 183 programowanie asynchroniczne, 176 property, Patrz: w(cid:228)a(cid:264)ciwo(cid:264)(cid:232) protokó(cid:228), 101 przeci(cid:241)(cid:276)anie, 96 przepe(cid:228)nienie zakresu, 25 przestrze(cid:254) nazw, 9, 58, 59, 60 cz(cid:246)(cid:264)ciowa kwalifikacja nazw, 60 deklaracja, 61 globalna, 59 hierarchia, 59 Spis tre(cid:316)ci (cid:95) 203 Kup książkęPoleć książkę przestrze(cid:254) nazw import, 60 importowanie, 61, 138 przes(cid:228)anianie nazw, 61 System, 14, 21 System.Collections, 29, 35, 87 System.Security.Cryptography, 58 query expression, Patrz; wyra(cid:276)enie zapytaniowe Q 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ó(cid:228), 73, 74, 94 w gór(cid:246), 73, 74 this, 65 rekurencja, 39 relacja, 50 rethrow, Patrz: wyj(cid:241)tek ponowne zg(cid:228)oszenie rozg(cid:228)aszanie, 108, 117 rzutowanie, 18, 81, 83, 93, 185, Patrz te(cid:276): referencja rzutowanie jawne, 81, 91, 94, 131 S sealing, Patrz: zapiecz(cid:246)towanie sekwencja, 140 konkatenacja, 144 lokalna, 140 wej(cid:264)ciowa, 140, 141 wyj(cid:264)ciowa, 140, 141 short-circuit, Patrz: zasada skróconego obliczania sk(cid:228)adnia kaskadowa, 151, 152 wyra(cid:276)e(cid:254) zapytaniowych, 151, 152 204 (cid:95) Skorowidz sk(cid:228)adowa abstrakcyjna, 76, 87 instancji, Patrz: instancja sk(cid:228)adowa interfejsu, 87, 89, 170 klasy, 17, 62, 76 przestarza(cid:228)a, 171 statyczna, 16, 39 typu wyliczeniowego, 90, 91 bazowego, 170 wirtualna, 76, 84 zapiecz(cid:246)towana, 89 s(cid:228)owa kluczowe async, 178 await, 178, 179, 180 s(cid:228)ownik, 35 s(cid:228)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 Kup książkęPoleć książkę unsafe, 185 var, 45, 46 virtual, 75, 89 sta(cid:228)a, 39, 46, 69 deklaracja, 51 lokalna, 52 typ, 69 typu referencyjnego, 19 typu warto(cid:264)ciowego, 18 statement, Patrz: instrukcja sterta, 38, 39, 186 stos, 38, 80, 95, 187 strong name assembly, Patrz: zestaw zaprzyja(cid:274)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 (cid:315) (cid:264)rednik, Patrz: znak ; T tablica, 8, 18, 34, 43, 57, 139, 186, 187 ci(cid:241)gów znaków, 8 deklaracja, 34 dynamiczna, 35 element, 38, 40 typu warto(cid:264)ciowego, 84 inicjalizacja, 36, 37, 38 jako argument wywo(cid:228)ania funkcji., 38 liczba wymiarów, 35 odwo(cid:228)anie indeksowanie, 34 prostok(cid:241)tna, Patrz: tablica regularna regularna, 36 rozmiar, 35, 36, 37 tablic, Patrz: tablica wyszczerbiona warto(cid:264)ci typu bool, 29 wielowymiarowa, 36 wyra(cid:276)enia inicjalizacji, 35 wyszczerbiona, 36, 37 zagnie(cid:276)d(cid:276)ona, Patrz: tablica wyszczerbiona task combinator, Patrz: agregator zada(cid:254) typ, 9, 13 anonimowy, 139 bool, 14, 18, 21, 29, 40, 133 byte, 27 ca(cid:228)kowity, 7, 8, 24 char, 18, 21, 31, 40 ci(cid:241)gu znaków, 21 cz(cid:246)(cid:264)ciowy, 71 decimal, 23, 24, 28 delegatu, 104 dookre(cid:264)lony, Patrz: typ zamkni(cid:246)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(cid:228)ni kwalifikowana, 59 kwalifikowana, 61 niedookre(cid:264)lony, Patrz: typ otwarty obiektowy, 21 object, 21, 80 otwarty, 94 pochodny, 98 predefiniowany warto(cid:264)ciowy, 22 predefiniowany, 13, 15, 21, 40 Spis tre(cid:316)ci (cid:95) 205 Kup książkęPoleć książkę prosty, 14, 22 przestarza(cid:228)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(cid:241)zany, 96 pochodne, 98 ushort, 27 var, 168 void, 8 warto(cid:264)ciowy, 18, 21, 32, 42, 84, 97, 185 instancja, 39 wbudowany, Patrz: typ predefiniowany w(cid:228)asny, 14, 15, 40 tworzenie, 18 wnioskowany, 23 wska(cid:274)nikowy, 185 wyliczeniowy, 18, 40, 90 konwersja, 91 operator, 92 z dopuszczaln(cid:241) warto(cid:264)ci(cid:241) pust(cid:241), 130, 131, 133 zagnie(cid:276)d(cid:276)ony, 62, 92, 93 zamkni(cid:246)ty, 94 z(cid:228)o(cid:276)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 206 (cid:95) Skorowidz U uko(cid:264)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(cid:246) V value type, Patrz: typ warto(cid:264)ciowy verbatim string literal, Patrz: litera(cid:228) dos(cid:228)owny ci(cid:241)gów znaków void, 63, 188 void expression, Patrz: wyra(cid:276)enie puste W warto(cid:264)(cid:232) +(cid:146), 27 –0, 27 –(cid:146), 27 domy(cid:264)lna, 40, 43 Epsilon, 27 liczbowa, Patrz: litera(cid:228) logiczna, 29 MaxValue, 27 MinValue, 27 NaN, Patrz: NaN nieliczbowa, Patrz: NaN pusta, Patrz: null zwracana, 8 whitespace, Patrz: bia(cid:228)a spacja wi(cid:241)zanie, 163 dynamiczne, 163, 166, 168 j(cid:246)zykowe, 165 ze wskazania, 165 widoczno(cid:264)(cid:232), Patrz: dost(cid:246)pno(cid:264)(cid:232) wielorozprowadzanie, 169 w(cid:228)a(cid:264)ciwo(cid:264)(cid:232), 8, 62, 66, 67, 87, 95, 168 akcesor, 66, 67 automatyczna, 67 wirtualny, 75 wska(cid:274)nik, 185 beztypowy, 188 Kup książkęPoleć książkę wspó(cid:228)bie(cid:276)no(cid:264)(cid:232), 176 wyj(cid:241)tek, 70 DivideByZeroException, 118 IndexOutOfRangeException, 35 InvalidCastException, 81 InvalidOperationException, 131 obs(cid:228)uga, 118, 119 odwo(cid:228)ania do pustej referencji, 30 ponowne zg(cid:228)oszenie, 117 RuntimeBinderException, 167, 168 System.ArgumentException, 123 System.ArgumentNullException, 124 System.ArgumentOutOfRange (cid:180)Exception, 124 System.InvalidOperationException, 124 System.NotImplementedException, 124 System.NotSupportedException, 124 zapytanie kategorie, 146 kontynuacja, 154 LINQ, 86, Patrz: LINQ z wieloma generatorami, 155 zintegrowane, Patrz: LINQ zasada przypisa(cid:254) 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(cid:228)aniane, 109 schemat standardowy, 109 statyczne, 109 wirtualne, 75, 109 z pustym kodem obs(cid:228)ugi zdarzenia, 117 System.ObjectDisposedException, zapiecz(cid:246)towane, 109 124 zg(cid:228)aszanie, 122 ponowne, 122 wyliczenie, Patrz: typ wyliczeniowy wyra(cid:276)enie, 46 dynamiczne, 168 lambda, Patrz: lambda logiczne, 56 przypisania, Patrz: operator przypisania puste, 46 sta(cid:228)owarto(cid:264)ciowe, 44 zapytaniowe, 151, 152 kompilacja, 152 zestaw, 9 zaprzyja(cid:274)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(cid:264)ciowego, 18 wci(cid:241)gni(cid:246)ta, 114, 115 zewn(cid:246)trzna, 114 znacznik XML, 13 znak, 31 wywo(cid:228)anie zwrotne, 102 XML, 191, 192 X Z zadania agregator, 183 zapiecz(cid:246)towanie, 77 zapis wrostkowy, 46 !, 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(cid:276)enia *=, 51 ., 12, 48, 59 Spis tre(cid:316)ci (cid:95) 207 Kup książkęPoleć książkę 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(cid:241)g, 31, 34, 57 (cid:228)(cid:241)czenie, 33 porównywanie, 33 wyszukiwanie, 33 interpunkcyjny, 12 specjalny, 31, 32 steruj(cid:241)cy, 31, 32 208 (cid:95) Skorowidz Kup książkęPoleć książkę
Pobierz darmowy fragment (pdf)

Gdzie kupić całą publikację:

C# 5.0. Leksykon kieszonkowy. Wydanie III
Autor:
,

Opinie na temat publikacji:


Inne popularne pozycje z tej kategorii:


Czytaj również:


Prowadzisz stronę lub blog? Wstaw link do fragmentu tej książki i współpracuj z Cyfroteką: