Pobierz prezentację
Pobieranie prezentacji. Proszę czekać
1
Łukasz Bieszczad Mateusz Gałązka Karol Włodarek
Delegaty i LINQ Łukasz Bieszczad Mateusz Gałązka Karol Włodarek
2
Co to są delegaty? Delegaty – silnie typowane wskaźniki do metod. Jest jednym z 5 głównych typów. Do utworzonego obiektu delegata można przypisać dowolną metodę mającą zgodne z delegatem typu parametrów i typ zwracanej wartości. Zalety: Delegaty są jak wskaźniki do funkcji w C++, ale są bezpieczniejsze ze względu na kontrolę typu. Delegaty umożliwiają przekazywanie metod jako parametry. Delegatów można używać do definiowania metod wywoływania zwrotnego. Delegaty można łączyć w łańcuch; na przykład w jednym zdarzeniu można wywołać wiele metod. Metody nie muszą dokładnie pasować do typu delegata. Kowariancja pozwala na przekazywanie do delegata metod, których typ zwracanej wartości nie jest identyczny z sygnaturą delegata, ale jest potomnym w stosunku do zwracanego typu zdefiniowanego w tym delegacie. K
3
Co to są zdarzenia? Zdarzenia upraszczają korzystanie z delegatów.
Zdefiniowany za pomocą słówka kluczowego event obiekt delegata jest automatycznie wyposażony w mechanizm do rejestrowania i wyrejestrowywania metod (operatory += i -=), które dany obiekt ma przechowywać. Dodatkowo, zdarzenia nie można wywołać poza klasą, w której zostało zdefiniowane. W przypadku, gdy nie korzystamy ze słówka event, sami musimy zapewnić bezpieczeństwo obiektu delegata (zdefiniować go jako prywatną składową i zdefiniować publiczne metody d dodawania i usuwania metod do danego obiektu delegata). M
4
Co to są metody anonimowe?
Metoda anonimowa to metoda, której dziwactwo polega na tym, że nie posiada swojej nazwy (dlatego jest „anonimowa”). Jednak nie możemy tego uważać za powód do dyskryminacji, bowiem oprócz braku przydomka jest całkiem normalna, tzn. może przyjmować argumenty i ma swoje ciało w którym możliwe jest zwrócenie wartości. Używana jest np. gdy będzie użyta tylko raz TypDelegacji obiektDelegacji = delegate(int x) { Console.WriteLine("Wywołano metode anonimową"); return(x*x); }; Console.Writeln(obiektDelegacji(2)); Ł
5
Co to są wyrażenia lambda?
Wyrażenie lambda to funkcja anonimowa służąca do tworzenia typów delegatów. Za pomocą wyrażenia lambda można pisać funkcje lokalne, które mogą być przekazywane jako argumenty lub zwracane jako wartość wywołania funkcji. Wyrażenie lambda zawiera tylko dwa elementy: listę parametrów oraz ciało metody. Wyrażenia Lambda nie określają swojej nazwy. Wyrażenie lambda nie definiuje też zwrotnego parametru. Jednak jakiś parametr może być zwracany jeśli wynika to z zawartości jej ciała. Typ parametru jest wnioskowany z kontekstu wyrażenia. K
6
Na czym polega kowariancja i kontrkowariancja?
Kowariancja pozwala na przekazywanie do delegata metod, których typ zwracanej wartości nie jest identyczny z sygnaturą delegata, ale jest potomnym w stosunku do zawracanego typu zdefiniowane w tym delegacie. Kontrkowariancja działa na podobnej zasadzie, z tym że dotyczy ona argumentów metod przekazywanych do delegata. M
7
Z jakich standardowych delegatów korzystałeś?
EventHandler np. w aplikacjach okienkowych Zwraca void, przyjmuje object i EventArgs Predicate: np. w kolekcjach gen. Zwraca boolean, przyjmuje parametr typu gen. Func: np. w zapytanie LINQ Zwraca obiekt typu gen., przyjmuję obiekty typu gen. Ł
8
Do czego wykorzystywane są delegaty w zapytaniach LINQ i aplikacjach okienkowych?
9
Co to jest LINQ? Technologia LINQ jest próbą zapewnienia spójnego, i uniwersalnego sposobu, w który programiści mogliby pozyskiwać i manipulować danymi, w szerokim tego słowa znaczeniu. Dzięki niemu można tworzyć bezpośrednio w języku programowania C# konstrukcje zwane wyrażeniami zapytania. M
10
Co mają wspólnego z LINQ metody rozszerzeniowe?
Metody rozszerzeniowe pozwalają na dodanie nowej funkcjonalności do wcześniej zdefiniowanych i skomplikowanych typów. Zapytanie LINQ może być użyte do przechodzenia po elementach kontenerów implementujących generyczny interfejs IEnumerable<T>. System.Array tego interfejsu nie implementuje. System.Array zyskuje funkcjonalność poprzez metody rozszerzeniowe zdefiniowane w statycznej klasie System.Linq.Enumerable. System.Enumerable rozszerza funkcjonalność nie tylko typu tablicowego. Metody rozszerzeniowe muszą być definiowane w klasach statycznych, więc każda metoda rozszerzeniowa musi być statyczna. Metody rozszerzające są oznaczone jako takie poprzez użycie słowa this jako modyfikatora pierwszego parametru danej metody. Każda metoda rozszerzeniowa może być wywołana z aktualnej instancji typu w pamięci lub statycznie, poprzez definiującą ją klasę statyczną. Ł
11
Na czym polega natychmiastowe i odroczone wykonanie zapytań?
12
Na jakich obiektach może działać LINQ?
Termin LINQ jest używany do opisania ogólnego podejścia do dostępu do danych. Istnieją 4 implementacje tej technologii: - LINQ to Objects – to LINQ dla obiektów implementujących interfejs IEnumerable<T> - LINQ to SQL – dla relacyjnych baz danych - LINQ to DataSet – nadzbiór LINQ to SQL - LINQ to XML – dla dokumentów XML. M
13
Jak dostosować kolekcje niegeneryczne do LINQ?
Operatory zapytań LINQ działają na typach implementujących interfejs IEnumerable<T> (bezpośrednio lub pośrednio poprzez metody rozszerzeniowe). W odróżnieniu od typu System.Array dla kolekcji niegenerycznych nie zdefiniowano odpowiednich metod rozszerzeniowych. Można realizować zapytania na kolekcjach niegenerycznych poprzez metodę OfType<T>() zdefiniowanej w klasie Enumerable. Wywołując tę metodę dla kolekcji niegenerycznej implementującej interfejs IEnumerable(takiej jak ArrayList), podajemy typ elementów zawartych w kontenerze w celu uzyskania obiektu kompatybilnego z interfejsem IEnumerable<T>. Kolekcje generyczne są prototypowane do operowania na obiektach typu System.Object, co oznacza że mogą przechowywać kilka różnych typów. Metoda OfType<T>() pozwala na pobranie z kolekcji obiektów wskazanego typu. Ł
14
Jak definiuje się zapytania LINQ?
operatorów zapytania , wywołania metod LINQ w wersji instancyjnej (po kropce) i wyrażeń lambda jako parametrami tych metod, wywołania metod LINQ w wersji rozszerzeniowej i wyrażeń lambda jako parametrami tych metod, wywołania metod LINQ w wersji instancyjnej (po kropce) i metodami anonimowymi jako parametrami tych metod, wywołania metod LINQ w wersji instancyjnej (po kropce) , których parametrami będą jawnie zdefiniowane metody (zgodne z odpowiednimi delegatami), nie korzystając z LINQ. K
15
Dziękujemy za uwagę!
Podobne prezentacje
© 2024 SlidePlayer.pl Inc.
All rights reserved.