Pobierz prezentację
Pobieranie prezentacji. Proszę czekać
1
Platformy technologiczne Elementy języka c#
mgr inż. Tomasz Gawron
2
O mnie mgr inż Tomasz Gawron WETI 624 gawron@eti.pg.gda.pl
Zachęcam do wypełniania ankiet Platformy Technologiczne 2014
3
Czym jest .NET Platforma nie związana z językiem programowania
Środowisko uruchomieniowe (CLR) Biblioteka klas (BCL) Jezyk pośredni (MSIL) Automatyczne zarządzanie: Kodem Pamięcią Wyjątkami Implementacje OpenSource (Mono, Rotor) Platformy Technologiczne 2014
4
Zadada działania Platformy Technologiczne 2014
Platformy Technologiczne 2014
5
Stos platformy Platformy Technologiczne 2014
6
Windows 8 Platformy Technologiczne 2014
Platformy Technologiczne 2014
7
Czym jest C# Stworzony specjalnie dla .NET
Zbliżony składniowo do C++ i Javy Posiada IDE (Visual Studio) Obiektowy, obsługuje zdarzenia (event-driven) Może współpracować z komponentami stworzonymi w innych językach Język zarządzany (obsługiwany przez garbage collector) Platformy Technologiczne 2014
8
Struktura programu Platformy Technologiczne 2014
9
Typy zmiennych Platformy Technologiczne 2014 Typ Możliwe wartości
Typ wartościwy Wartość zdefiniowanego typu Typ wartościowy „nullable” Wartość zdefiniowanego typu lub null Obiekt Null, referencja do obiektu dowolnego typu, referencja do boxowanej wartości dowolnego typu Klasa Null, referencja do instancji klasy, referencja do instancji klasy dziedziczącej Interfejs Null, referencja do instancji klasy implementującej interfejs, referencja do boxowanej wartości typu implementującego interfejs Tablica Null, referencja do instancji tablicy danego lub kompatybilnego typu Delegat Null, referencja do instancji typu delegatu Platformy Technologiczne 2014
10
Typy wartościowe Typy całkowite Typy zmiennoprzecinkowe Typy binarne
(8 bit) byte (0, 28-1), sbyte (-27, 27-1) (16 bit) short (-215, 215-1), ushort (32 bit) int (-231, 231-1), uint (64 bit) long (-263, 263-1), ulong Typy zmiennoprzecinkowe (32 bit) float (±1,5*10-45 ,±3,4*1038) float x = 0.5f; (64 bit) double (±5,0* ,±1,7*10308) double x = 0.5; Typy binarne bool Platformy Technologiczne 2014
11
Typy wartościowe „nullowalne”
Oprócz standardowych wartości mogą przyjmować również null Definicja ze znakiem zapytania: Dodatkowe właściwości: HasValue (wartość binarna sprawdzająca czy zmienna nie jest null) Value Operator „??” Gdy pierwsza wartość jest null, przekaż wartość drugą int? i = null; int x = a ?? b; Platformy Technologiczne 2014
12
Klasy Modyfikatory dostępu: Elementy klasy: Public Private Protected
Dostępne dla klasy oraz innych po niej dziedziczących Internal Dostępne w ramach jednego assembly Elementy klasy: Stałe, pola, metody, właściwości, indeksery, zdarzenia, operatory, konstruktory, destruktory Elementy statyczne / instancji Typy zagnieżdżone Platformy Technologiczne 2014
13
Klasy Dziedziczenie po jednej klasie Implementacja wielu interfejsów
Platformy Technologiczne 2014
14
Konstruktory klas Konstruktor jest metodą wywoływaną podczas tworzenia nowej instancji klasy Posiada taką samą nazwę jak klasa Nie zwraca żadnych wartości Nie ma potrzeby jawnej deklaracji Może być przeciążony Platformy Technologiczne 2014
15
Klasy wieloplikowe W C# definicję klasy można podzielić pomiędzy wiele plików (np. WinForms) Wszystkie pliki muszą być dostępne w czasie kompilacji //Plik1.cs partial class Klasa1 { //częściowa definicja klasy } //Plik2.cs partial class Klasa1 { //częściowa definicja klasy } Platformy Technologiczne 2014
16
Struktury Struktury są zawsze wartościami
Mogą zawierać pola, interfejsy, funkcje składowe i konstruktory z argumentami Przypisanie kopiuje dane nie referencję Brak możliwości dziedziczenia (tylko implementacja interfejsów) Platformy Technologiczne 2014
17
Struktury vs. klasy Struktury są wydajniejsze przy lekkich obiektach (np. punkt) – nie wymagana obsługa przez GC Wydajniejsze zużycie pamięci (zajmują „mniej miejsca” niż analogiczne klasy) Większe zużycie zasobów przy niektórych operacjach (kopiowanie) Kiedy korzystać ze struktur zamiast klas: Tworzony obiekt jest mały Będziemy tworzyć wiele obiektów (setki, tysiące) Wartości pól nie zmieniają się w cyklu życia obiektu Platformy Technologiczne 2014
18
Interfejsy Zbiór funkcji pod wspólną nazwą
Same deklaracje - brak implementacji Wszystkie składowe publiczne Wielokrotne dziedziczenie Elementy: metody, właściwości, indeksery, zdarzenia Platformy Technologiczne 2014
19
Interfejsy Klasę implementującą jeden lub wiele interfejsów można traktować jako klasę należącą do wielu typów. Może być postrzegana jak instancja typu każdego z implementowanych interfejsów Możliwość traktowania odmiennych klas w podobny sposób, jeśli implementują ten sam interfejs interface INazwa{ void f(); String Wlasciwosc{ get; set; } event EventHandler zdarzenie; //int i; - błąd class Klasa : INazwa { String s; public virtual void f(){...} public virtual String Wlasciwosc { get {return s;} set {s = value;} } public virtual event EventHandler zdarzenie; //Słowo virtual jest opcjonalne Platformy Technologiczne 2014
20
Implementacja interfejsu
Niejawna Jawna interface Interfejs1 { void f(); } class Klasa : Interfejs1 { public void f() { Console.WriteLine("Implementacja w sposób niejawny"); } } interface Interfejs1 { void f(); } class Klasa : Interfejs1 { void Interfejs1.f() { Console.WriteLine("Implementacja w sposób jawny"); } } Platformy Technologiczne 2014
21
Enum Silnie typowane typy wyliczeniowe
Brak jawnej konwersji na int Zawierające zbiór nazwanych stałych Nie mogą być deklarowane wewnątrz metody Można jawnie zadeklarować typ Kod staje się czytelniejszy Platformy Technologiczne 2014
22
Generyczność Tworzenie kodu, dla którego typ parametrów zostanie określony później Korzyści Kod jest bardziej uniwersalny Unikamy problemów z rzutowaniem/odpowiednim doborem typów Z mechanizmów generyczności mogą korzystać Klasy Metody Interfejsy Delegaty Jednowymiarowe tabele Najczęstsze wykorzystanie – kolekcje System.Collections.Generic Platformy Technologiczne 2014
23
Generyczność - przykłady
Generyczne metody Ograniczenia dla generycznych parametrów Platformy Technologiczne 2014
24
Tablice Deklaracja: Cechy tablic: Jednorodność Swobodny dostęp
Stała liczba elementów Ciągłość pamięciowa int[] tab = new int[4]; float[, ,] tab2 = new float[3, 3, 3]; Platformy Technologiczne 2014
25
Kolekcje System.Collections oraz System.Collections.Generic
Nazwa Porządek Bezpośredni dostęp Opis / Zastosowanie Dictionary Brak Klucz Kolekcja typu klucz – wartość. Klucze muszą być unikalne. Umożliwia bardzo szybkie wyszukiwanie i wstawianie elementów – O(1) SortedDictionary Posortowany Posortowana kolekcja Dictionary oparta na drzewach binarnych. List Indeks Korzystna przy małych kolekcjach bez konieczniści sortowania. LinkedList Korzystna przy strukturze często wstawiajacej wartości w środkowe elementy SortedList Posortowana lista – drzewo binarne przechowywane w tablicy umożliwia szybsze wyszukiwanie HashSet Kolekcja klucz – wartość z identycznym typem klucza i wartości SortedSet Posortowany HashSet Stack LIFO Tylko góra Lista przetwarzana w strategii dostępu LIFO Queue FIFO Tylko początek Lista przetwarzana w strategii dostępu FIFO Platformy Technologiczne 2014
26
Kolekcje - przykłady Dictionary List Platformy Technologiczne 2014
27
Porównywanie obiektów
IComparable (interfejs dla typów posiadających porządek) IComparer (interfejs realizujący porównanie i porządkowanie obiektów) public interface IComparable { int CompareTo(object obj); // <0 if this < obj, 0 if this == obj, >0 if this > obj } public interface IComparable<T> { int CompareTo(T obj); // <0 if this < obj, 0 if this == obj, >0 if this > obj public interface IComparer { int Compare(object x, object y); // <0 if x < y, 0 if x == y, >0 if x > y } public interface IComparer<T> { int Compare(T x, T y); // <0 if x < y, 0 if x == y, >0 if x > y Platformy Technologiczne 2014
28
Porównywanie obiektów - przykład
Definicja klasy Sortowanie A może inaczej? Platformy Technologiczne 2014
29
Pętle For Foreach While Do… while int number = 5;
Kolekcja musi implementować interfejs IEnumerable While Do… while int number = 5; for(int i = 0; i < number; i++) { Console.WriteLine(i); } int number = 0; while(number < 5) {number = number + 1;} int number = 0; do { number = number + 1; } while(number < 5); ArrayList list = new ArrayList(); list.Add(„Jan Kowalski"); list.Add(„Adam Nowak"); foreach(string name in list) { Console.WriteLine(name); } Platformy Technologiczne 2014
30
Delegaty Zorientowane obiektowo wskaźniki na metody
Zastępuje wskaźniki do funkcji Sygnatura i typ wartości zwracanej delegacji musi być identyczny jak funkcji którą reprezentuje Pozwala wywołać dowolną metodę z dowolnego obiektu Dwa typy: System.Delegate System.MulticastDelegate Platformy Technologiczne 2014
31
Definiowanie i używanie delegatów
Deklaracja delegatu delegate void Notifier (string sender); // ordinary method signature // with the keyword delegate Deklaracja zmiennej delegatu Notifier greetings; Przypisanie metody void SayHello(string sender) { Console.WriteLine("Hello from " + sender); } greetings = new Notifier(SayHello); // or just: greetings = SayHello; Wywołanie delegacji greetings("John"); // invokes SayHello("John") => "Hello from John" Platformy Technologiczne 2014
32
System.MulticastDelegate
Delegat zawierający referencję do kilku metod Notifier greetings; greetings = SayHello; greetings += SayGoodBye; greetings("John"); // "Hello from John" // "Good bye from John" greetings -= SayHello; greetings("John"); // "Good bye from John" Platformy Technologiczne 2014
33
Metody anonimowe Metoda jest tworzona dynamicznie Przykład:
Ma wszystkie funkcjonalności metod „jawnych” Przykład: „f” jest delegatem int a = 12; f += delegate(int b) {return a * b; } Platformy Technologiczne 2014
34
Wyrażenia lambda Mogą zastępować anonimowe delegaty Składnia:
(parametry wejściowe) => (operacje) IEnumerable<string> allJohns = allNames.Where(x => x.Equals("John")); Platformy Technologiczne 2014
35
Func Składnia: Func<T1, T2, ..., TResult> Delegate Pozwala na enkapsulację metody przyjmującej parametry wejściowe T i zwracającej parametr typu TResult Platformy Technologiczne 2014
36
Action Składnia: Action nie zwraca wyniku
Action<T1, T2, ...> Delegate Action nie zwraca wyniku Platformy Technologiczne 2014
37
Przesyłanie argumentów do metod
Wartość Referencja Parametr wyjściowy static void Nazwa(int x){...} int a = 5; Nazwa(a); static void Nazwa(ref int x){...} int a = 5; Nazwa(ref a); static void Nazwa(out int x){...} int a; Nazwa(out a); Platformy Technologiczne 2014
38
Przesyłanie argumentów do metod
Istnieje możliwość wywoływania metod bez podania wszystkich parametrów Metody mogą posiadać nazwy parametrów w swich wywołaniach Platformy Technologiczne 2014
39
Właściwości Definicja wirtualnego atrybutu
Dostęp definiowany przez „get” oraz „set” Korzyści: Pojęcie reprezentuje pewien atrybut klasy, ale w celu jego implementacji trzeba wywołać pewne funkcje Jedną wartość można w prosty sposób obliczyć na podstawie drugiej Dostęp do pola klasy musi być kontrolowany w celu zapewnienia spójności (poprawności) obiektu Ukrycie implementacji (typu) Platformy Technologiczne 2014
40
Automatyczne właściwości
Wprowadzone w C# 3.0 Uproszczenie kodowania Platformy Technologiczne 2014
41
Indekser Oferuje sposób dostępu do kolekcji wartości utrzymywanych w ramach pojedynczego obiektu klasy 1 klasa = 1 indekser Platformy Technologiczne 2014
42
Inicjalizatory Pozwalają na uproszczone przypisywanie wartości do publicznych pól klasy Można z nich korzystać przy inicjalizacji struktur Platformy Technologiczne 2014
43
Zmienne niejawnie typowane
Zmienna typu var Kompilator zawsze generuje statyczną, silnie typowaną referencję na podstawie aktualnej wartości Ograniczenia: Wartość musi być zainicjalizowana przy deklaracji Nie może być zainicjalizowana jako null Typ musi być dostępnu dla kompilatora Nie mogą być polami klas Nie mogą być parametrami metody var f = 3.0f; Platformy Technologiczne 2014
44
Zmienne niejawnie typowane
Zmienna typu dynamic Nowy typ wprowadzony w C# 4.0 Traktowany jak System.Object Zgodność typów sprawdzana w runtime Może być polem klasy Może przyjmować wartości różnego typu Może być parametrem metody Platformy Technologiczne 2014
45
var vs. dynamic Mniejsze ograniczenia Dynamiczna zmiana typów
Platformy Technologiczne 2014
46
Typy anonimowe Tworzone dynamicznie przy użyciu zmiennych niejawnych
Dobra metoda enkapsulacji właściwości tylko do odczytu Typy są generowane dynamicznie na poziomie kompilatora Wykorzystanie w LINQ Platformy Technologiczne 2014
47
Metody rozszerzające Umożliwiają rozszerzanie istniejących klas o nowe metody Metoda musi być zdefiniowana jako statyczna public static class Extensions { public static int Increment(this int i) return ++i; } //wywołanie int i = 0; int j = i.Increment(); Platformy Technologiczne 2014
48
Wyjątki Wyjątek jest sytuacją, która nie może być rozwiązana w danym kontekście aplikacji (dzielenie przez 0, błąd połączenia z bazą danych) Zgłoszenie wyjątku oznacza, że wystąpiła błędna sytuacja, której aplikacja nie potrafi sama rozwiązać Wyjątek powinien być przechwycony w kodzie oraz odpowiednio obsłużony poprzez przekazanie sterowania do właściwego bloku Standardowym procesem obsługi wyjątków jest zgłoszenie i zalogowanie błędu oraz zakończenie błędnego procesu Platformy Technologiczne 2014
49
Wyjątki Wyjątki mogą pojawiać się na różnych poziomach abstrakcji
Sprzętu / systemu operacyjnego Dzielenie przez 0 Stack overflow Języka Niepoprawna konwersja Null pointer exception Błędy rzutowania Programu Wyjątki zdefiniowane przez użytkownika Platformy Technologiczne 2014
50
Typy wyjątków Typ Opis Exception
Najbardziej ogólna klasa, może reprezentować wszystkie wyjątki, dziedziczą po niej wszystkie klasy wyjątków. Dzieli się na 2 podgrupy (ApplicationException, SystemException ) ApplicationException Wyjątki specyficzne dla danej aplikacji SystemException Klasa ogólna dla predefiniowanych wyjątków ArithmeticException Zgłaszany w razie wystąpienia błędu podczas operacji arytmetycznych lub konwersji FormatException Zgłaszany np. przez metody klasy Convert, gdy podany napis nie reprezentuje wartości, do której chcemy go przekonwertować NullReferenceException Zgłaszany, kiedy używana jest zmienna referencyjna, która ma wartość null OutOfMemoryException Zgłaszany, kiedy występuje niewystarczająca ilość pamięci IndexOutOfRangeException Zgłaszany, gdy następuje odwołanie do nieistniejącego elementu tablicy ArgumentException Zgłaszany w przypadku, kiedy jeden z argumentów dostarczanych do metody jest nieprawidłowy Platformy Technologiczne 2014
51
Obsługa wyjątków Platformy Technologiczne 2014
52
Obsługa wyjątków Powinniśmy zawsze starać się złapać jak najbardziej szczegółowy wyjątek, np ArithmeticException a nie Exception Mechanizm wyjatków nie może służyc do maskowania błedów – przechwycony wyjątek musi być obsłużony Platformy Technologiczne 2014
53
Antywzorce w obsłudze wyjątków
Log and throw Catch and Ignore Rzucanie wyjątków w bloku finally Log and return null Destructive wrapping Platformy Technologiczne 2014
54
System.IO - Strumienie … TextReader StreamReader StringReader
TextWriter StreamWriter StringWriter BinaryReader BinaryWriter Stream FileStream MemoryStream NetworkStream Platformy Technologiczne 2014
55
Strumienie - operacje FileStream MemoryStream
Platformy Technologiczne 2014
56
Operacje na strukturze plików
Wszystkie klasy znajdują się w System.IO Directory, DirectoryInfo Operacje na katalogach File, FileInfo Operacje na plikach Path Operacje na tekście zawierającym informacje o ścieżce dostępu do pliku lub katalogu FileSystemWatcher Monitoring systemu plików Platformy Technologiczne 2014
57
Operacje na strukturze plików - przykłady
Platformy Technologiczne 2014
58
System.String Służy do obsługi ciągów znaków Porównywane wg wartości
Zmodyfikowane zapisywane są pod innym adresem Metody Opis Compare() porównanie dwóch łańcuchów Concat() utworzenie nowego łańcucha z jednego lub większej liczby Copy() utworzenie nowego łańcucha przez przekopiowanie zawartości Chars[] indekser łańcucha Insert() zwraca nowy łańcuch z dostawionym nowym łańcuchem Remove() usunięcie z łańcucha określonej liczby znaków Split() rozbicie łańcucha na podłańcuchy przy założonym zbiorze ograniczników StartsWith() wskazuje czy łańcuch rozpoczyna się od określonych znaków Substring() wyłuskanie podłańcucha ToLower() zwraca kopię łańcucha składającego się z małych liter Trim() wyrzucenie określonego zbioru znaków z początku i końca łańcucha Platformy Technologiczne 2014
59
System.String Obsługa znaków specjalnych w ciągach (zastosowanie „@”)
string rst1 = "Hi there!"; string vst1 there!"; string rst2 = "It started, \"Four score and seven...\""; string vst2 started, ""Four score and seven..."""; string rst3 = "Value 1 \t 5, Val2 \t 10"; // Interprets tab esc sequence string vst3 1 \t 5, Val2 \t 10"; // Does not interpret tab string rst4 = "C:\\Program Files\\Microsoft\\"; string vst4 Files\Microsoft\"; string rst5 = " Print \x000A Multiple \u000A Lines"; string vst5 Print Multiple Lines"; Platformy Technologiczne 2014
60
StringBuilder Zastosowanie do tworzenia i przetwarzania ciągów znaków
Ciągi są przechowywane w buforze – operacje zazwyczaj są szybsze i zużywają mniej zasobów Zaleca się korzystanie ze StringBuilder przy przetwarzaniu stringów w dużych pętlach Namespace System.Text Platformy Technologiczne 2014
61
StringBuilder - wydajność
Źródło: Platformy Technologiczne 2014
62
Wyrażenia regularne Wzorce opisujące łańcuchy / ciągi znaków
Funkcjonalności dostępne w System.Text.RegularExpressions Przykładowe wyrażenia regularne Platformy Technologiczne 2014
63
Wyrażenia regularne Przydatne symbole Symbol Działanie \
Następny znak jako znak specjalny (\n = nowa linia, \\ = ‘\’) ^ Wzorzec musi wystąpić na początku ciągu $ Wzorzec musi wystąpić na końcu ciągu * Poprzedzający wzorzec występuje 0-n razy + Poprzedzający wzorzec występuje 1-n razy ! Poprzedzający wzorzec występuje 0 lub 1 razy {n, m} Poprzedzający wzorzec występuje od n do m razy Platformy Technologiczne 2014
64
Konwersja typów Do konwersji z ciagów znaków na liczby mogą służyć dwie metody Parse W przypadku błędnej konwersji działanie kończy się wyjątkiem TryParse W przypadku błednej konwersji zwraca status operacji Inne rodzaje konwersji typów udostępnia klasa Convert Platformy Technologiczne 2014
65
Konwersja klas Dwa sposoby na rzutowanie obiektów na inne typy () as
Rzutowanie jednego typu na drugi W przypadku niepowodzenia generuje wyjątek as Konwersja jednego typu na drugi W przypadku niepowodzenia otrzymujemy null Nie wspiera konwersji definiowanych przez użytkownika Platformy Technologiczne 2014
66
Wątki Zapewnienie równoległego wykonania Wątki a procesy
Prawdziwe zrównoleglanie tylko w instancjach wieloprocesorowych Wątki a procesy „tańsza” komunikacja w ramach wątków jednego procesu wspólna pula adresowa dla wątków Platformy Technologiczne 2014
67
System.Threading.Thread
Instancję nowego wątku tworzymy za pomcą delegata ThreadStart Lista metod Alpha oAlpha = new Alpha(); Thread oThread = new Thread(new ThreadStart(oAlpha.Beta)); Metoda Działanie Start Startuje wątek Abort Kończy wątek, generuje wyjątek ThreadAbortException Sleep Blokuje wątek na przekazaną ilość milisekund Join Blokuje wątek tworzący do czasu zakończenia operacji/wątku Priority (Property)Pozwala na zdefiniowanie ważności wątku (ThreadPriority) Finalize Zwalnia wszystkie zasoby wykorzystywane przez wątek Platformy Technologiczne 2014
68
Synchronizacja wątków
Sekcja krytyczna – fragment kodu, który może być wykonywany przez jeden wątek Tworzenie sekcji krytycznych Lock Monitory Przerwania Platformy Technologiczne 2014
69
Lock Blokuje wielowątkowe wykonanie kodu Zapewnia sekwencyjny dostęp
Wykorzystywany przy dostępie do współdzielonej pamięci public int Increment(ref int x) { lock (this) return ++x; } Platformy Technologiczne 2014
70
Pula wątków Umożliwia zarządzanie grupą wątków
Wykorzystywana podczas tworzenia wielowątkowych zadań wykonujących zbliżone operacje Wielowątkowe obliczanie ciągu Fibonacciego Wątek po zakończeniu wraca do puli Dodanie wątku do puli: Platformy Technologiczne 2014
71
Wielowątkowość w aplikacjach
Thread / ThreadPool Może być zastosowany w każdego typu aplikacjach Do stosowania gdy GUI nie wymaga informacji o stanie wątków BackgroundWorker Do stosowania w aplikacjach z GUI Udostępnia zdarzenia pozwalające monitorować wątek z poziomu GUI Umożliwia interakcję wątku z GUI Platformy Technologiczne 2014
72
Task Parallel Library „Wielowątkowość dla mas” Scott Hanselmann©
Prostsze API ułatwiające wytwarzanie aplikacji wielowątkowych Dzieli się na trzy grupy Data Parallelism Task Parallelism Parallel LINQ Platformy Technologiczne 2014
73
Zrównoleglanie pętli Możemy zrównoleglić for lub foreach
Przydatne przy przetwarzaniu niezależnych od siebie zestawów danych Dane przetwarzane w aktualnym kroku nie mogą być zależne od wyników działania poprzedniej iteracji Struktura: Operacje w pętli nie są wykonywane sekwencyjnie Platformy Technologiczne 2014
74
Zrównoleglanie pętli - przykłady
Parallel.For Parallel.ForEach Platformy Technologiczne 2014
75
Zrównoleglanie pętli - wyjątki
Po wystąpieniu wyjątku stare iteracje kończą swoją pracę, nowe nie rozpoczynają się Wyjątki mogą nawarstwiać się AggregateException Wyjątki mają wyższy priorytet niż operacje kończące pętlę Platformy Technologiczne 2014
76
Zrównoleglanie pętli - wyjście
Parallel.Break Wykorzystuje ParallelLoopState Nie zatrzymuje działających iteracji Wykonają się iteracje z mniejszym indeksem Parallel.Stop Nie może być użyty razem z Parallel.Break Szybszy niż Parallel.Break Nie wykonują się iteracje z mniejszym indeksem Platformy Technologiczne 2014
77
Zrównoleglanie operacji
Task zamiast Thread Bardziej rozbudowane API umożliwiające łatwiejsze zarządzanie Przechwytywanie wyniku Platformy Technologiczne 2014
78
Zrównoleglanie operacji
Szeregowanie zadań Oczekiwanie na ukończenie grupy zadań Platformy Technologiczne 2014
79
Asynchroniczność async i await wprowadzone w C# 5.0 Oparte na metodach
Kod przypomina „zwykły”, ciężar przerzucony na kompilator Dlaczego warto korzystać: Lepsze wrażenia użytkownika (zwłaszcza podczas operacji na GUI) Wydajniejsze przetwarzanie Platformy Technologiczne 2014
80
async / await Sygnatura metody Przepływ sterowania
Platformy Technologiczne 2014
81
async / await Jak to działa? Platformy Technologiczne 2014
Żródło: Platformy Technologiczne 2014
82
Wskaźniki i kod niezarządzany
W C# możemy w szczególnych przypadkach korzystać z kodu niezarządzanego (komunikacja z systemem, elementy wymagające zwiększonej wydajności, …) Słowo kluczowe unsafe Wymaga zmiany ustawienia kompilatora Platformy Technologiczne 2014
83
P/Invoke Platform Invoke pozwala na wywoływanie z poziomu kodu .NET obiektów niezarządzanych biblioteki dll, obiekty COM, dostęp do WIN32 API, … Użycie atrubutu [DllImport] Kroki: Zlokalizowanie implementowanej biblioteki Załadowanie biblioteki do pamieci Znalezienie adresu funkcji i przesłanie argumentów na stos Przekazanie kontroli do kodu niezarządzanego Platformy Technologiczne 2014
84
P/Invoke using System; using System.Runtime.InteropServices;
class Class1 { [DllImport("user32.dll", CharSet=CharSet.Auto)] static extern int MessageBox(IntPtr hWnd, String text, String caption, int options); [STAThread] static void Main(string[] args) MessageBox(IntPtr.Zero, "Text", "Caption", 0); } Platformy Technologiczne 2014
85
Przetwarzanie XML System.XML Platformy Technologiczne 2014
86
Odczyt XML w C# Platformy Technologiczne 2014
87
Zapis XML w C# Platformy Technologiczne 2014
88
XPath Ułatwia wyszukiwanie w XML pozwalając iterować po kolekcji węzłów Podstawowe elementy (namespace System.Xml.XPath) XPathDocument – dokument XML XPathNavigator – przetwarzanie i parsowanie zapytań XPath XPathNodeIterator – iterator po liście wynikowej Platformy Technologiczne 2014
89
Serializacja Serializacja – proces zamiany obiektów na strumień danych
Deserializacja – zamiana strumienia danych na obiekt Bazowo dostępne rodzaje serializacji: Binarna – tworzy binarną reprezentację danych za pomocą klasy BinaryFormatter SOAP – serializowanie do strumienia XML zgodnego ze standardami SOAP (SoapFormatter) XML – serializowanie do strumienia XML (XmlSerializer) Platformy Technologiczne 2014
90
Serializacja binarna // Załadowanie obiektu Chair do Hashtable
Hashtable ht = new Hashtable(); // Chair i Upholstery muszą mieć atrybut [Serializable] Chair ch = new Chair(100.00D, "Broyhill", "10-09"); ch.myUpholstery = new Upholstery("Cotton"); ht.Add("10-09", ch); // (1) Serializacja // Stworzenie pliku docelowego FileStream fs= new FileStream("c:\\chairs.dat", FileMode.Create); BinaryFormatter bf= new BinaryFormatter(); bf.Serialize(fs,ht); fs.Close(); // (2) Deserializacja pliku do Hashtable ht.Clear(); fs = new FileStream("c:\\chairs.dat", FileMode.Open); ht = (Hashtable) bf.Deserialize(fs); Platformy Technologiczne 2014
91
Serializacja binarna - zdarzenia
Zdarzenie Atrybut Opis OnSerializing [Serializing] Wywoływany przed serializacją; Dla każdego obiektu oddzielne wywołanie OnSerialized [Serialized] Wywołanie po serializacji; Dla każdego obiektu oddzielne wywołanie OnDeserializing [Deserializing] Wywoływany przed deserializacją; Dla każdego obiektu oddzielne wywołanie OnDeserialized [Deserialized] Wywołanie po deserializacji; Dla każdego obiektu oddzielne wywołanie public class Chair { [OnDeserialized] void OnDeserialized(StreamingContext context) { /* some logic */ } } Platformy Technologiczne 2014
92
Serializacja XML Elementy tworzone na podstawie serializowanych obiektów klasy domyślnie otrzymują nazwy zgodne z nazwami reprezentowanych właściwości. Istnieją Atrybuty serializacji, za pomocą których możemy przykrywać domyślne nazwy elementów. XmlElement Zmienna lub właściwość zostanie podczas serializacji zapisana jako węzeł XmlAttribute Dołączony do pola klasy powoduje wygenerowanie jako atrybutu w elemencie. XmlIgnore Pole jest omijane podczas serializacji. XmlText Atrybut dołączony do pola powoduje serializację jako tekstu. Nazwa pola zostaje ominięta. Platformy Technologiczne 2014
93
Serializacja XML - przykład
public class movies { public int movieID {} public string movie_Title public int movie_Year public string movie_Director public string bestPicture [XmlElement("AFIRank")] public int rank } <?xml version="1.0" standalone="yes"?> <movies> <movie_ID>5</movie_ID> <movie_Title>Citizen Kane </movie_Title> <movie_Year>1941</movie_Year> <movie_DirectorID>Orson Welles</movie_DirectorID> <bestPicture>Y</bestPicture> <AFIRank>1</AFIRank> </movies> Platformy Technologiczne 2014
94
Garbage Collector Służy do zarządzania pamięcią
Różne cele na różnych maszynach (serwer / stacja robocza) Namespace System.GC Podstawowe techniki: Zliczanie referencji Graf osiągalności (reachabiliy graph) Nie zaleca się manualnego wywoływania Platformy Technologiczne 2014
95
Finalizatory Uruchamiane przez GarbageCollector przed zwolnieniem zasobu Wywoływane niedeterministycznie Można wymusić automatyczne wywołanie GC.SuppressFinalize Finalizacja wymaga 2 cykli GarbageCollectora 1 – przesuniecie obiektu do kolejki finalizacji, wywołanei finalizatora 2 – zwolnienie zaalokowanej pamięci Platformy Technologiczne 2014
96
Destruktory Wołane, gdy obiekt „ulega zniszczeniu”
Wykorzystywane do zwolnienia zasobów alokowanych przez obiekt Wykonywane strategią bottom-up Platformy Technologiczne 2014
97
Automatyczne zwalnianie zasobów
Interfejs IDisposable Wykorzystywany do zwalniania zasobów niezarządzanych (np. pliki) Dostęp przez medotę Dispose() Można wywoływać z własnego kodu using Automatyczne wywołanie metody Dispose() po zakończeniu cyklu życia obiektu Pozwala na deklarowanie wielu obiektów using (SqlConnection connection = new SqlConnection()) { //kod programu } SqlConnection connection; try { connection = new SqlConnection(); } catch (SqlException se) //obsługa wyjatku finally connection.Close(); connection.Dispose(); Platformy Technologiczne 2014
98
LINQ Language INtegrated Queries Wprowadzony w .NET 3
Daje możliwość unifikacji dostępu do różnego typu danych Uproszczone odpytywanie obiektów, daych i XML poprzez integrację zapytań z językiem programownia Umożliwia odpytywanie kolekcji implementujących IEnumerable<>, przykładowo tablicy, listy, XML DOM, tabel dazy danych Wprowadza zbliżoną do SQL składnię niezależną od źródła danych Oferuje sprawdzanie typów oraz dynamiczne tworzenie zapytań. Namespace System.Linq Platformy Technologiczne 2014
99
Dlaczego LINQ? class Contact { … };
List<Contact> contacts = new List<Contacts>(); foreach(Customer c in customers) { if(c.State == “WA”) Contact ct = new Contact(); ct.Name = c.Name; ct.Phone = c.Phone; contacts.Add(ct); } var contacts = from c in customers where c.State == "WA" select new { c.Name, c.Phone }; Platformy Technologiczne 2014
100
Style zapytania W LINQ zapytania możemy tworzyć na 2 sposoby
SQL – like W oparciu o metody IEnumerable<Human> tall = from p in people where p.Height > 200 select p; IEnumerable<Human> young = people.Where(p => p.Age < 18).Select(p => p); Platformy Technologiczne 2014
101
Elementy zapytania Każde zapytanie składa się z 3 niezależnych akcji:
Pobranie źródła danych. Stworzenie zapytania. Wykonanie zapytania. class IntroToLINQ { static void Main() { // The Three Parts of a LINQ Query: // 1. Data source. int[] numbers = new int[5] { 0, 1, 2, 3, 4}; // 2. Query creation. // numQuery is an IEnumerable<int> var numQuery = from num in numbers where (num % 2) == 0 select num; // 3. Query execution. foreach (int num in numQuery) Console.Write("{0,1} ", num); } Platformy Technologiczne 2014
102
Podstawowe operatory Operator Działanie Where Zwraca elementy, dla których warunek zwraca „true” Select Dla każdego elementu w kolekcji zwraca wartość przekazaną w operatorze First Zwraca pierwszy element kolekcji Last Zwraca ostatni element kolekcji Single Zwraca pojedynczy element kolekcji OrderBy Sortuje kolekcję wynikową zgodnie z zadanym predykatem Distinct Usuwa z kolekcji wynikowej duplikaty Count Zwraca ilość rekordów w kolekcji wynikowej Average Zwraca średnią wartość dla pola kolekcji wynikowej Join Pozwala na złączenie dwóch kolekcji w oparciu o przekazane klucze Platformy Technologiczne 2014
103
LINQ to Objects Platformy Technologiczne 2014 using System;
using System.Linq; using System.Collections.Generic; class app { static void Main() { string[] names = { "Burke", "Connor", "Frank", "Everett", "Albert”, "George", "Harris", "David" }; Func<string, bool> filter = s => s.Length == 5; Func<string, string> extract = s => s; Func<string, string> project = s => s.ToUpper(); IEnumerable<string> expr = names .Where(filter).OrderBy(extract) .Select(project); foreach (string item in expr) Console.WriteLine(item); } Platformy Technologiczne 2014
Podobne prezentacje
© 2024 SlidePlayer.pl Inc.
All rights reserved.