Platformy technologiczne Elementy języka c#

Download Report

Transcript Platformy technologiczne Elementy języka c#

PLATFORMY
TECHNOLOGICZNE
ELEMENTY JĘZYKA C#
mgr inż. Tomasz Gawron
O mnie
2






mgr inż Tomasz Gawron
WETI 624
Konsultacje: wtorek 17-18
[email protected]
Zaliczenie – 20 pytań testowych jednokrotnego wyboru
Zachęcam do wypełniania ankiet
Platformy Technologiczne 2013
Czym jest .NET
3

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 2013
Zadada działania
4
Platformy Technologiczne 2013
Stos platformy
5
Platformy Technologiczne 2013
Windows 8
6
Platformy Technologiczne 2013
Czym jest C#
7






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 2013
Struktura programu
8
Platformy Technologiczne 2013
Typy zmiennych
9
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 2013
Typy wartościowe
10

Typy całkowite
(8 bit)
 (16 bit)
 (32 bit)
 (64 bit)


byte
short
int
long
(0, 28-1),
(-215, 215-1),
(-231, 231-1),
(-263, 263-1),
sbyte (-27, 27-1)
ushort
uint
ulong
Typy zmiennoprzecinkowe
(32 bit) float (±1,5*10-45 ,±3,4*1038)
 (64 bit) double (±5,0*10-324 ,±1,7*10308)


Typy binarne

bool
Platformy Technologiczne 2013
float x = 0.5f;
double x = 0.5;
Typy wartościowe „nullowalne”
11

Oprócz standardowych wartości mogą przyjmować również null

Definicja ze znakiem zapytania:
int? i = null;

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 x = a ?? b;
Platformy Technologiczne 2013
Klasy
12

Modyfikatory dostępu:
Public
 Private
 Protected



Internal


Dostępne dla klasy oraz innych po niej dziedziczących
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 2013
Klasy
13


Dziedziczenie po jednej klasie
Implementacja wielu interfejsów
Platformy Technologiczne 2013
Konstruktory klas
14





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 2013
Klasy wieloplikowe
15


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 2013
Struktury
16




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 2013
Struktury vs. klasy
17



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 2013
Interfejsy
18
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 2013
Interfejsy
19
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
//int i; - błąd
zdarzenie;
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 2013
Implementacja interfejsu
20

Niejawna
interface Interfejs1 {
void f();
}
class Klasa : Interfejs1 {
public void f() { Console.WriteLine("Implementacja w sposób niejawny"); }
}

Jawna
interface Interfejs1 {
void f();
}
class Klasa : Interfejs1 {
void Interfejs1.f() {
Console.WriteLine("Implementacja w sposób jawny");
}
}
Platformy Technologiczne 2013
Enum
21

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 2013
Generyczność
22

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 2013
Generyczność - przykłady
23

Generyczne metody

Ograniczenia dla generycznych parametrów
Platformy Technologiczne 2013
Tablice
24

Deklaracja:
int[] tab = new int[4];
float[, ,] tab2 = new float[3, 3, 3];

Cechy tablic:
 Jednorodność
 Swobodny
dostęp
 Stała liczba elementów
 Ciągłość pamięciowa
Platformy Technologiczne 2013
Kolekcje
25

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
Klucz
Posortowana kolekcja Dictionary oparta na drzewach binarnych.
List
Brak
Indeks
Korzystna przy małych kolekcjach bez konieczniści sortowania.
LinkedList
Brak
Indeks
Korzystna przy strukturze często wstawiajacej wartości w środkowe
elementy
SortedList
Posortowany
Indeks
Posortowana lista – drzewo binarne przechowywane w tablicy umożliwia
szybsze wyszukiwanie
HashSet
Brak
Klucz
Kolekcja klucz – wartość z identycznym typem klucza i wartości
SortedSet
Posortowany
Klucz
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 2013
Kolekcje - przykłady
26

Dictionary

List
Platformy Technologiczne 2013
Porównywanie obiektów
27

IComparable (interfejs dla typów posiadających porządek)
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
}

IComparer (interfejs realizujący porównanie i porządkowanie
obiektów)
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 2013
Porównywanie obiektów - przykład
28

Definicja klasy

Sortowanie

A może inaczej?
Platformy Technologiczne 2013
Pętle
29

For

int number = 5;
for(int i = 0; i < number; i++)
{ Console.WriteLine(i); }

Foreach

int number = 0;
while(number < 5)
{number = number + 1;}

Kolekcja musi implementować interfejs
IEnumerable
ArrayList list = new ArrayList();
list.Add(„Jan Kowalski");
list.Add(„Adam Nowak");
foreach(string name in list)
{ Console.WriteLine(name); }
While
Do… while
int number = 0;
do
{ number = number + 1; }
while(number < 5);
Platformy Technologiczne 2013
Delegaty
30





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 2013
Definiowanie i używanie delegatów
31
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 2013
System.MulticastDelegate
32

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 2013
Metody anonimowe
33

Metoda jest tworzona dynamicznie


Ma wszystkie funkcjonalności metod „jawnych”
Przykład:

„f” jest delegatem
int a = 12;
f += delegate(int b) {return a * b; }
Platformy Technologiczne 2013
Wyrażenia lambda
34


Mogą zastępować anonimowe delegaty
Składnia:
 (parametry
wejściowe) => (operacje)
IEnumerable<string> allJohns = allNames.Where(x => x.Equals("John"));
Platformy Technologiczne 2013
Func
35

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 2013
Action
36

Składnia:
 Action<T1,

T2, ...> Delegate
Action nie zwraca wyniku
Platformy Technologiczne 2013
Przesyłanie argumentów do metod
37

Wartość
static void Nazwa(int x){...}
int a = 5;
Nazwa(a);

Referencja
static void Nazwa(ref int x){...}
int a = 5;
Nazwa(ref a);

Parametr wyjściowy
static void Nazwa(out int x){...}
int a;
Nazwa(out a);
Platformy Technologiczne 2013
Przesyłanie argumentów do metod
38


Istnieje możliwość wywoływania metod bez podania wszystkich
parametrów
Metody mogą posiadać nazwy parametrów w swich wywołaniach
Platformy Technologiczne 2013
Właściwości
39

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 2013
Automatyczne właściwości
40


Wprowadzone w C# 3.0
Uproszczenie kodowania
Platformy Technologiczne 2013
Indekser
41

Oferuje sposób dostępu do kolekcji wartości utrzymywanych w
ramach pojedynczego obiektu klasy

1 klasa = 1 indekser
Platformy Technologiczne 2013
Inicjalizatory
42


Pozwalają na uproszczone przypisywanie wartości
do publicznych pól klasy
Można z nich korzystać przy inicjalizacji struktur
Platformy Technologiczne 2013
Zmienne niejawnie typowane
43

Zmienna typu var
var f = 3.0f;


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

Platformy Technologiczne 2013
Zmienne niejawnie typowane
44

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 2013
var vs. dynamic
45

Mniejsze ograniczenia

Dynamiczna zmiana typów
Platformy Technologiczne 2013
Typy anonimowe
46




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 2013
Metody rozszerzające
47

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 2013
Wyjątki
48




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 2013
Wyjątki
49

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 2013
Typy wyjątków
50
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 2013
Obsługa wyjątków
51
Platformy Technologiczne 2013
Obsługa wyjątków
52


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 2013
Antywzorce w obsłudze wyjątków
53

Log and throw

Catch and Ignore


Log and return null

Destructive wrapping
Rzucanie wyjątków w bloku
finally
Platformy Technologiczne 2013
System.IO - Strumienie
54
TextReader
StreamReader
TextWriter
BinaryReader
BinaryWriter
Stream
StreamWriter
…
FileStream
StringReader
MemoryStream
NetworkStream
Platformy Technologiczne 2013
StringWriter
Strumienie - operacje
55

FileStream

MemoryStream
Platformy Technologiczne 2013
Operacje na strukturze plików
56


Wszystkie klasy znajdują się w System.IO
Directory, DirectoryInfo


File, FileInfo


Operacje na plikach
Path


Operacje na katalogach
Operacje na tekście zawierającym informacje o ścieżce
dostępu do pliku lub katalogu
FileSystemWatcher

Monitoring systemu plików
Platformy Technologiczne 2013
Operacje na strukturze plików - przykłady
57
Platformy Technologiczne 2013
System.String
58

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 2013
System.String
59

Obsługa znaków specjalnych w ciągach (zastosowanie „@”)
string rst1 = "Hi there!";
string vst1 = @"Hi there!";
string rst2 = "It started, \"Four score and seven...\"";
string vst2 = @"It started, ""Four score and seven...""";
string rst3 = "Value 1 \t 5, Val2 \t 10";
string vst3 = @"Value 1 \t 5, Val2 \t 10";
// Interprets tab esc sequence
// Does not interpret tab
string rst4 = "C:\\Program Files\\Microsoft\\";
string vst4 = @"C:\Program Files\Microsoft\";
string rst5 = " Print \x000A Multiple \u000A Lines";
string vst5 = @" Print
Multiple
Lines";
Platformy Technologiczne 2013
StringBuilder
60

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 2013
StringBuilder - wydajność
61
Źródło: http://www.dotnetperls.com/stringbuilder.png
Platformy Technologiczne 2013
Wyrażenia regularne
62

Wzorce opisujące łańcuchy / ciągi znaków
Funkcjonalności dostępne w System.Text.RegularExpressions

Przykładowe wyrażenia regularne

Platformy Technologiczne 2013
Wyrażenia regularne
63

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 2013
Konwersja typów
64

Do konwersji z ciagów znaków na liczby mogą służyć dwie metody

Parse


TryParse


W przypadku błędnej konwersji działanie kończy się wyjątkiem
W przypadku błednej konwersji zwraca status operacji
Inne rodzaje konwersji typów udostępnia klasa Convert
Platformy Technologiczne 2013
Konwersja klas
65

Dwa sposoby na rzutowanie obiektów na inne typy

()



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 2013
Wątki
66

Zapewnienie równoległego wykonania
 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 2013
System.Threading.Thread
67

Instancję nowego wątku tworzymy za pomcą delegata ThreadStart
Alpha oAlpha = new Alpha();
Thread oThread = new Thread(new ThreadStart(oAlpha.Beta));

Lista metod
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 2013
Synchronizacja wątków
68


Sekcja krytyczna – fragment kodu, który może być
wykonywany przez jeden wątek
Tworzenie sekcji krytycznych
 Lock
 Monitory
 Przerwania
Platformy Technologiczne 2013
Lock
69



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 2013
Pula wątków
70


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 2013
Wielowątkowość w aplikacjach
71

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 2013
Task Parallel Library
72



„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 2013
Zrównoleglanie pętli
73


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 2013
Zrównoleglanie pętli - przykłady
74

Parallel.For

Parallel.ForEach
Platformy Technologiczne 2013
Zrównoleglanie pętli - wyjątki
75


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 2013
Zrównoleglanie pętli - wyjście
76

Parallel.Break

Parallel.Stop

Wykorzystuje ParallelLoopState


Nie zatrzymuje działających
iteracji
Nie może być użyty razem z
Parallel.Break

Szybszy niż Parallel.Break

Nie wykonują się iteracje z
mniejszym indeksem

Wykonają się iteracje z
mniejszym indeksem
Platformy Technologiczne 2013
Zrównoleglanie operacji
77

Task zamiast Thread
Bardziej rozbudowane API umożliwiające łatwiejsze
zarządzanie

Przechwytywanie wyniku

Platformy Technologiczne 2013
Zrównoleglanie operacji
78

Szeregowanie zadań

Oczekiwanie na ukończenie grupy zadań
Platformy Technologiczne 2013
Asynchroniczność
79




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 2013
async / await
80

Sygnatura metody

Przepływ sterowania
Platformy Technologiczne 2013
async / await
81

Jak to działa?
Żródło: http://i.msdn.microsoft.com/dynimg/IC612215.png
Platformy Technologiczne 2013
Wskaźniki i kod niezarządzany
82



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 2013
P/Invoke
83

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 2013
P/Invoke
84
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 2013
Przetwarzanie XML
85

System.XML
XSLT Stylesheet
XslTransform
XPathNavigator
XPath
XmlWriter
XmlReader
XmlDocument
XmlPathDocument
XmlDataDocument
XmlDocument
Platformy Technologiczne 2013
Odczyt XML w C#
86
Platformy Technologiczne 2013
Zapis XML w C#
87
Platformy Technologiczne 2013
XPath
88

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 2013
Serializacja
89

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 2013
Serializacja binarna
90
// 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);
fs.Close();
Platformy Technologiczne 2013
Serializacja binarna - zdarzenia
91
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 2013
Serializacja XML
92


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 2013
Serializacja XML - przykład
93
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 2013
Garbage Collector
94




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 2013
Finalizatory
95



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 2013
Destruktory
96



Wołane, gdy obiekt „ulega zniszczeniu”
Wykorzystywane do zwolnienia zasobów
alokowanych przez obiekt
Wykonywane strategią bottom-up
Platformy Technologiczne 2013
Automatyczne zwalnianie zasobów
97

Interfejs IDisposable

using

Wykorzystywany do zwalniania
zasobów niezarządzanych (np.
pliki)

Automatyczne wywołanie metody
Dispose() po zakończeniu cyklu
życia obiektu

Dostęp przez medotę Dispose()


Można wywoływać z własnego
kodu
Pozwala na deklarowanie wielu
obiektów
SqlConnection connection;
try
{
connection = new SqlConnection();
}
catch (SqlException se)
{
//obsługa wyjatku
}
finally
{
connection.Close();
connection.Dispose();
}
using (SqlConnection connection = new SqlConnection())
{
//kod programu
}
Platformy Technologiczne 2013
LINQ
98








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 2013
Dlaczego LINQ?
99
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 2013
Style zapytania
100

W LINQ zapytania możemy tworzyć na 2 sposoby
 SQL
– like
IEnumerable<Human> tall = from p in people where p.Height > 200 select p;
W
oparciu o metody
IEnumerable<Human> young = people.Where(p => p.Age < 18).Select(p => p);
Platformy Technologiczne 2013
Elementy zapytania
101
Każde zapytanie składa się z 3 niezależnych akcji:
1.
Pobranie źródła danych.
class IntroToLINQ
2.
Stworzenie zapytania.
{
static void Main()
3.
Wykonanie zapytania.
{
// 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 2013
Podstawowe operatory
102
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
http://aspnetresources.com/downloads/linq_standard_query_operators.pdf
Platformy Technologiczne 2013
LINQ to Objects
103
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 2013