Platformy technologiczne Elementy języka c#

Slides:



Advertisements
Podobne prezentacje
Wstęp do strumieni danych
Advertisements

C++ wykład 2 ( ) Klasy i obiekty.
C++ wykład 4 ( ) Przeciążanie operatorów.
Język C/C++ Funkcje.
Standardowa biblioteka języka C++
Wzorce.
Generics w .NET 2.0 Łukasz Rzeszot.
Wydajne aplikacje na platformie .NET
Nowa wersja C# Autor: Piotr Sobczak
Visual Studio Codename „Orcas”, LINQ
Inżynieria oprogramowania Lecture XXX JavaTM – część IV: IO
Podstawy informatyki Wirtotechnologia – Wskaźniki i referencje
Podstawy informatyki Powtórka Grupa: 1A Prowadzący: Grzegorz Smyk
Struktury.
Tablice.
1 Dygresja: cztery płyty główne…. 2 Dygresja: osobliwości C /* cos o nieistniejacym typie Boolean */ /* oraz o operatorze przecinkowym */ #include int.
C++ wykład 2 ( ) Klasy i obiekty.
Języki programowania obiektowego
Podstawy C# Grupa .NET PO.
Podstawy programowania
Pakiety w Javie Łukasz Smyczyński (132834). Czym są pakiety? Klasy w Javie są grupowane w pewne zbiory zwane pakietami. Pakiety są więc pewnym podzbiorem.
Podstawy programowania II Wykład 2: Biblioteka stdio.h Zachodniopomorska Szkoła Biznesu.
Programowanie urządzeń mobilnych – wykład IV
Java 3 MPDI Programowanie obiektowe W7. import java.io.*; public class X { // kontrukcja throws – określenie jakie wyjątki może dana metoda // sygnalizować
Platformy technologiczne Elementy języka c#
Programowanie obiektowe III rok EiT
Programowanie Windows na przykładzie C# część 1
ŻYWE JĘZYKI PROGRAMOWANIA LIVING IT UP WITH A LIVE PROGRAMMING LANGUAGE Sean McDirmid Ecole Polytechnique Fédérale de Lausanne (EPFL)
Programowanie obiektowe – zastosowanie języka Java SE
Andrzej Repak Nr albumu
Java – coś na temat Klas Piotr Rosik
Inicjalizacja i sprzątanie
Seminarium problemowe
Programowanie obiektowe Wykład 3 dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/21 Dariusz Wardowski.
Programowanie obiektowe Wykład 6 dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/14 Dariusz Wardowski.
C# Cz.7 Refleksja, Atrybuty
C# Platforma .NET CZ.3 Kuba Ostrowski.
Programowanie komponentowe jesień-zima 2013
Podstawy informatyki 2013/2014
Programowanie obiektowe 2013/2014
1 Strumienie Hierarchie klas strumieniowych, strumienie bajtowe - klasy InputStream i OutputStream i ich metody, klasa File, strumienie plikowe, strumienie.
Programowanie w języku C++
Programowanie w języku C++
Platformy technologiczne Elementy języka c#
Treści multimedialne - kodowanie, przetwarzanie, prezentacja Odtwarzanie treści multimedialnych Andrzej Majkowski informatyka +
Wydział Elektroniki Kierunek: AiR Zaawansowane metody programowania Wykład 5.
Zmienne i typy danych w C#
Kurs języka C++ – wykład 4 ( )
Podstawy programowania (4)
Technologie internetowe Wykład 7 Kontrola danych użytkownika.
Technologie internetowe Wykład 5 Wprowadzenie do skrytpów serwerowych.
Elementy geometryczne i relacje
Waldemar Bartyna Pytania egzaminacyjne 1.
Paweł Starzyk Obiektowe metody projektowania systemów
Waldemar Bartyna 1 Programowanie zaawansowane LINQ to XML.
Łukasz Bieszczad Mateusz Gałązka Karol Włodarek
Programowanie Zaawansowane
Zestaw pytań nr. 3 Typy generyczne Wyjątki OPRACOWALI: JAKUB GRYCZEWSKIKINGA ROSA DANIEL KAPTEJNYWOJCIECH ŁĘCZYCKI
Waldemar Bartyna Pytania egzaminacyjne 1.
Programowanie Obiektowe – Wykład 6
Strumienie, Wczytywanie, Zapisywanie, Operacje na plikach
Typy wyliczeniowe, kolekcje
Wątki, programowanie współbieżne
(według:
Delegaty Delegat to obiekt „wiedzący”, jak wywołać metodę.
Programowanie Obiektowe – Wykład 2
Programowanie obiektowe – zastosowanie języka Java SE
Założenia projektowe Javy
Język C++ Typy Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi i Pawła Jerzego.
Zapis prezentacji:

Platformy technologiczne Elementy języka c# mgr inż. Tomasz Gawron

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 2012

Struktura programu Platformy Technologiczne 2012 // Namespace Declaration using System; namespace MyProgram { // helper class class OutputClass { string myString; // Constructor public OutputClass(string inputString) myString = inputString; } // Instance Method public void printString() Console.WriteLine("{0}", myString); // Program start class class InteractiveWelcome {  // Main begins program execution.     public static void Main(string[] args)     {   // Write to console/get input         Console.Write("What is your name?: ");         Console.Write("Hello, {0}! ", Console.ReadLine());         Console.WriteLine("Welcome to the C# Tutorial!"); // Instance of OutputClass OutputClass outCl = new OutputClass("This is printed by the output class."); // Call Output class' method outCl.printString()     } } Platformy Technologiczne 2012

Typy zmiennych Platformy Technologiczne 2012 Typ Zawartość 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 delegata Platformy Technologiczne 2012

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*10-324 ,±1,7*10308) double x = 0.5; Typy binarne bool Platformy Technologiczne 2012

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 2012

Boxing i unboxing Wykorzystywane przy przejściach pomiędzy typami wartościowymi a referencyjnymi Boxing: Alokacja „pudełka” na stercie, skopiowanie wartości do „pudełka” Unboxing: Sprawdzenie typu „pudełka”, skopiowanie wartości z „pudełka” na stos Korzyści: Nie są potrzebne klasy – wrappery Kolekcje są uniwersalne – współpracują z każdym typem Platformy Technologiczne 2012

Boxing i unboxing i 123 int i = 123; object o = i; int j = (int)o; o System.Int32 123 j 123 Platformy Technologiczne 2012

Co się stanie? F a = new F(5); //konstruktor przypisuje przekazaną wartość zmiennej a F b = a; b.X= 10; Console.WriteLine(a.X); //wynik? int a = 1; int b = a; b = 2; Console.WriteLine(a); //wynik? Platformy Technologiczne 2012

Klasy Dziedziczenie po jednej klasie Implementacja wielu interfejsów Modyfikatory dostępu: Public Private Protected Internal Elementy klasy: Stałe, pola, metody, właściwości, indeksery, zdarzenia, operatory, konstruktory, destruktory Elementy statyczne / instancji Typy zagnieżdżone Platformy Technologiczne 2012

Konstruktory klas Konstruktor jest metodą wywoływaną podczas tworzenia nowej instancji klasy Posiada taką samą nazwę jak klasa Nie zwraca żadnych wartości Może być przeciążony class NazwaKlasy{ public NazwaKlasy(){ //konstruktor bezargumentowy  ... } public NazwaKlasy(int arg1,double arg2){ //konstruktor z argumentami ... } } Platformy Technologiczne 2012

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 2012

Struktury Struktury są zawsze wartościami Mogą zawierać pola, interfejsy, funkcje składowe i konstruktory z argumentami Przypisanie kopiuje dane nie referencję Brak dziedziczenia Struktury są wydajniejsze przy lekkich obiektach (np. punkt) – nie wymagana obsługa przez GC Wydajniejsze zużycie pamięci Platformy Technologiczne 2012

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 2012

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 2012

Implementacja interfejsu Jawna Niejawna interface Interfejs1 { void f(); } interface Interfejs2 { void f(); } class Klasa : Interfejs1, Interfejs2 { public void f() { Console.WriteLine("Implementacja w sposób niejawny"); } } interface Interfejs1 { void f(); } interface Interfejs2 { void f(); } class Klasa : Interfejs1, Interfejs2 { void Interfejs2.f() { Console.WriteLine("Implementacja w sposób jawny"); } } Platformy Technologiczne 2012

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 enum Color: byte { Red = 1, Green = 2, Blue = 4, Black = 0, White = Red | Green | Blue, } Platformy Technologiczne 2012

Kompilacja warunkowa #define, #undef #if, #elif, #else, #endif Logika bool - owska Można implementować metody warunkowe Wykonanie zależne od trybu wywołania programu Platformy Technologiczne 2012

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 2012

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 2012

Porównywanie obiektów IComparable (interfejs dla typów posiadających porządek) IComparer (interfejs realizujący porównanie 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 2012

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 2012

Atrybuty Służą dołączaniu metadanych do kodu public class OrderProcessor { [WebMethod] public void SubmitOrder(PurchaseOrder order) {...} } [XmlRoot("Order", Namespace="urn:acme.b2b-schema.v1")] public class PurchaseOrder [XmlElement("shipTo")] public Address ShipTo; [XmlElement("billTo")] public Address BillTo; [XmlElement("comment")] public string Comment; [XmlElement("items")] public Item[] Items; [XmlAttribute("date")] public DateTime OrderDate; Platformy Technologiczne 2012

Atrybuty Mogą być dołączane do klas, typów oraz metod Dostęp uzyskujemy za pomocą refleksji W pełni „konfigurowalne” Klasy dziedziczące po System.Attribute Bezpieczne (typ sprawdzany jest podczas kompilacji) Przykłady użycia: Web Services, XML, serializacja, konfiguracja kodu Platformy Technologiczne 2012

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 2012

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 2012

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 2012

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 2012

Zdarzenia Zdarzenia (event) w C# są specjalnym typem delegatów Dwóch uczestników: Źródło zdarzeń - ten który publikuje Odbiorca – subskrybent (może być wielu subskrybentów) Deklarowane wewnątrz klas Platformy Technologiczne 2012

Zdarzenia - źródło Zdefiniowanie delegatu Zdefiniowanie logiki public delegate void EventHandler(object sender, EventArgs e); public class Button { public event EventHandler Click; protected void OnClick(EventArgs e) { // This is called when button is clicked if (Click != null) Click(this, e); } } Platformy Technologiczne 2012

Zdarzenia - subskrybent Definicja i zarejestrowanie obsługi public class MyForm : Form { Button okButton; static void OkClicked(object sender, EventArgs e) { ShowMessage("You pressed the OK button"); } public MyForm() { okButton = new Button(...); okButton.Caption = "OK"; okButton.Click += new EventHandler(OkClicked); Platformy Technologiczne 2012

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 2012

Właściwości Definicja wirtualnego atrybutu Korzyści: 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) [modyfikator dostępu] typ Nazwa { get{...} set{...} } Platformy Technologiczne 2012

Automatyczne właściwości Wprowadzone w C# 3.0 Uproszczenie kodowania //C# 2.0 private int age; public int Age { get { return age; } set { age = value; } } //C# 3.0 public int MyAge { get; set; } Platformy Technologiczne 2012

Indekser Oferuje sposób dostępu do kolekcji wartości utrzymywanych w ramach pojedynczego obiektu klasy – parametry jak indeks kolekcji public class SkyScraper { Story[] stories; public Story this [int index] { get { return stories[index]; } set { if (value!=null) { stories[index] = value; } SkyScraper searsTower = new SkyScraper(); searsTower[155] = new Story(“Observation Deck”); searsTower[0] = new Story(“Entrance”); Platformy Technologiczne 2012

Inicjalizatory Pozwalają na uproszczone przypisywanie wartości do publicznych pól klasy Można z nich korzystać przy inicjalizacji struktur public class Human { public int Age { get; set; } public int Height { get; set; } } Human h1 = new Human(); h1.Age = 24; h1.Height = 175; Human h2 = new Human() { Age = 18, Height = 168 }; Platformy Technologiczne 2012

Zmienne niejawnie typowane Zmienna typu „var” Kompilator zawsze generuje 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 var f = 3.0f; Platformy Technologiczne 2012

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 var v = new { Price = 200, Quantity = 5 }; Platformy Technologiczne 2012

Wyrażenia lambda Składnia: (parametry wejściowe) => (operacje) IEnumerable<string> allJohns = allNames.Where(x => x.Equals("John")); Platformy Technologiczne 2012

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 2012

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 2012

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 2012

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 2012

Obsługa wyjątków Platformy Technologiczne 2012 using System; class ExceptionTestClass { public static void Main() int x = 0; try int y = 100/x; } catch (ArithmeticException e) Console.WriteLine("ArithmeticException Handler: {0}", e.ToString()); catch (Exception e) Console.WriteLine("Generic Exception Handler: {0}", e.ToString()); finally { //some finalization logic } Platformy Technologiczne 2012

System.IO - Strumienie … TextReader StreamReader StringReader TextWriter StreamWriter StringWriter BinaryReader BinaryWriter Stream FileStream MemoryStream NetworkStream Platformy Technologiczne 2012

System.IO.Stream Bazowe właściwości strumienia public abstract class Stream : MarshalByRefObject, IDisposable { public abstract bool CanRead { get; } public abstract bool CanSeek { get; } public abstract bool CanWrite { get; } public abstract int Read(out byte[] buff, int offset, int count); public abstract void Write(byte[] buff, int offset, int count); public virtual int ReadByte(); public virtual void WriteByte(byte value); public virtual IAsyncResult BeginRead(…); public virtual IAsyncResult BeginWrite(…); public virtual int EndRead(…); public virtual int EndWrite(…); public abstract long Length { get; } public abstract long Position { get; set; } public abstract long Seek(long offset, SeekOrigin origin); public abstract void Flush(); public virtual void Close(); ... } Bazowe właściwości strumienia Synchroniczny odczyt i zapis Asynchroniczny odczyt i zapis Długość i aktualna pozycja Pozycjonowanie Wysłanie danych i zamknięcie strumienia Platformy Technologiczne 2012

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 2012

System.String 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"; // Interprets tab esc sequence string vst3 = @"Value 1 \t 5, Val2 \t 10"; // 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 2012

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 2012

System.Text.StringBuilder Zastosowanie do tworzenia i przetwarzania ciągów znaków Ciągi są przechowywane w buforze – operacje są szybsze i zużywają mniej zasobów using System.Text; StringBuilder sb = new StringBuilder("Hi there."); Console.WriteLine("{0}", sb); // Print string sb.Replace("Hi", "Hello"); // Replace a substring Console.WriteLine("{0}", sb); // Print changed string Platformy Technologiczne 2012

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 2012

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 2012

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 2012

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 2012

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 Platformy Technologiczne 2012

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 zmieny ustawienia kompilatora Platformy Technologiczne 2012

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 2012

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 2012

Refleksja Umożliwia odnoszenie się do systemu typów podczas wykonania programu Tworzenie typów z przekazanych nazw (stringów) Dynamiczne pobieranie właściwości klas oraz wywoływanie metod Namespace System.Reflection Platformy Technologiczne 2012

Przetwarzanie XML System.XML Platformy Technologiczne 2012

Odczyt XML w C# XmlTextReader xtr = new XmlTextReader("Sample1.xml"); while (xtr.Read()) { Console.WriteLine(xtr.NodeType.ToString() + ":" + xtr.Name + ":" + xtr.Value); if (xtr.HasAttributes) for (int i = 0; i < xtr.AttributeCount; i++) xtr.MoveToAttribute(i); } xtr.MoveToElement(); Platformy Technologiczne 2012

Zapis XML w C# XmlTextWriter xtw = new XmlTextWriter("Sample2.xml", null); xtw.Formatting = Formatting.Indented; xtw.WriteStartDocument(); xtw.WriteComment("to plik utworzony poprzez obiekt XmlTextWriter"); xtw.WriteStartElement("Książki"); xtw.WriteStartElement("Ksiązka"); xtw.WriteAttributeString("wydawnictwoId", "3"); xtw.WriteStartElement("ISBN"); xtw.WriteString("777-7777-777"); xtw.WriteEndElement(); xtw.WriteEndDocument(); xtw.Close(); Platformy Technologiczne 2012

Struktura dokumentu DOM DocumentElement – wierzchołek drzewa dokumentu Node – każdy z węzłów (w tym elementy) Rodzaje węzłów: Węzły elementowe: zwykle zawierają węzły potomne: elementowe, tekstowe lub obu rodzajów Węzły atrybutowe: informacja podległa konkretnemu węzłowi elementowemu. Nie są określane jako potomkowie Węzeł dokumentu: rodzic dla wszystkich pozostałych węzłów CData: odpowiada sekcji znakowej, zawierającej zawartość nie przeznaczoną do przetwarzania Comment: (komentarz); ProcessingInstruction (instr. przetwarzania) DocumentFragment: stosowany jako węzeł roboczy przy budowaniu lub rekonstruowaniu dokumentu XML Entity, EntityReference, Notation Platformy Technologiczne 2012

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 XPathDocument doc = new XPathDocument("test.xml"); XPathNavigator nav = doc.CreateNavigator(); XPathNodeIterator iterator = nav.Select("/items/compact-disc[1]/artist | /items/compact-disc[1]/title"); iterator.MoveNext(); Console.WriteLine("Artysta={0}", iterator.Current); Console.WriteLine("Tytuł={0}", iterator.Current); Platformy Technologiczne 2012

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 2012

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 2012

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 2012

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 2012

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 2012

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 2012

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 2012

Destruktory Wołane, gdy obiekt „ulega zniszczeniu” Wykorzystywane do zwolnienia zasobów alokowanych przez obiekt Wykonywane strategią bottom-up Platformy Technologiczne 2012

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 2012