1 / 73

Platformy technologiczne Elementy języka c#

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

denton-vega
Télécharger la présentation

Platformy technologiczne Elementy języka c#

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Platformy technologiczneElementy języka c# mgr inż. Tomasz Gawron

  2. 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

  3. Struktura programu // 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 • classInteractiveWelcome • { // 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 • OutputClassoutCl = new OutputClass("This is printed by the output class."); • // Call Output class' method • outCl.printString() •     } • } Platformy Technologiczne 2012

  4. Typy zmiennych Platformy Technologiczne 2012

  5. Typy wartościowe • Typy całkowite • (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

  6. 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

  7. 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

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

  9. 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

  10. 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

  11. 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(){ //konstruktorbezargumentowy ... } public NazwaKlasy(int arg1,double arg2){ //konstruktor z argumentami ... }} Platformy Technologiczne 2012

  12. 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.cspartial class Klasa1 { //częściowadefinicjaklasy} //Plik2.cspartialclass Klasa1 { //częściowadefinicjaklasy } Platformy Technologiczne 2012

  13. 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

  14. 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

  15. 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 EventHandlerzdarzenie; //inti; - błąd } class Klasa : INazwa { String s; public virtual void f(){...} public virtual String Wlasciwosc { get {return s;} set {s = value;} } public virtual event EventHandlerzdarzenie; } //Słowo virtual jest opcjonalne Platformy Technologiczne 2012

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

  17. 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

  18. 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

  19. 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

  20. Kolekcje • System.Collections oraz System.Collections.Generic Platformy Technologiczne 2012

  21. Porównywanie obiektów • IComparable (interfejs dla typów posiadających porządek) • IComparer (interfejs realizujący porównanie obiektów) public interfaceIComparable { intCompareTo(objectobj); // <0 if this < obj, 0 if this == obj, >0 if this > obj } public interfaceIComparable<T> { intCompareTo(T obj); // <0 if this < obj, 0 if this == obj, >0 if this > obj } public interfaceIComparer { intCompare(object x, object y); // <0 if x < y, 0 if x == y, >0 if x > y } public interfaceIComparer<T> { intCompare(T x, T y); // <0 if x < y, 0 if x == y, >0 if x > y } Platformy Technologiczne 2012

  22. Pętle • For • Foreach • 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

  23. 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 DateTimeOrderDate; } Platformy Technologiczne 2012

  24. 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

  25. 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

  26. Definiowanie i używanie delegatów Deklaracja delegatu delegate void Notifier (string sender); // ordinary method signature // with the keyword delegate Deklaracja zmiennej delegatu Notifiergreetings; 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

  27. System.MulticastDelegate • Delegat zawierający referencję do kilku metod Notifiergreetings; greetings = SayHello; greetings+=SayGoodBye; greetings("John"); // "Hello from John" // "Good bye from John" greetings-=SayHello; greetings("John"); // "Good bye from John" Platformy Technologiczne 2012

  28. Metody anonimowe • Metoda jest tworzona dynamicznie • Ma wszystkie funkcjonalności metod „jawnych” • Przykład: • „f” jest delegatem inta = 12; f += delegate(intb) {return a * b; } Platformy Technologiczne 2012

  29. 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

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

  31. 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

  32. 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

  33. 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) [modyfikatordostępu] typNazwa{ get{...} set{...}} Platformy Technologiczne 2012

  34. 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 intMyAge { get; set; } Platformy Technologiczne 2012

  35. 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; } } } SkyScrapersearsTower = new SkyScraper(); searsTower[155] = new Story(“Observation Deck”); searsTower[0] = new Story(“Entrance”); Platformy Technologiczne 2012

  36. 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

  37. 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

  38. 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

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

  40. 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 inti) { return ++i; } } //wywołanie int i = 0; int j = i.Increment(); Platformy Technologiczne 2012

  41. 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

  42. 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

  43. Typy wyjątków Platformy Technologiczne 2012

  44. Obsługa wyjątków 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

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

  46. System.IO.Stream public abstract classStream : MarshalByRefObject, IDisposable { public abstract boolCanRead { get; } public abstract boolCanSeek { get; } public abstract boolCanWrite { get; } public abstract intRead(outbyte[] buff, int offset, int count); public abstract voidWrite(byte[] buff, int offset, int count); public virtual intReadByte(); public virtual voidWriteByte(byte value); public virtualIAsyncResultBeginRead(…); public virtualIAsyncResultBeginWrite(…); public virtual intEndRead(…); public virtual intEndWrite(…); public abstract longLength { get; } public abstract longPosition { get; set; } public abstract longSeek(long offset, SeekOrigin origin); public abstract voidFlush(); public virtual voidClose(); ... } • 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

  47. 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

  48. 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

  49. System.String • Służy do obsługi ciągów znaków • Porównywane wg wartości • Zmodyfikowane zapisywane są pod innym adresem Platformy Technologiczne 2012

  50. 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

More Related