Język C# Adam.Czajka@wsnhid.pl Copyright, 2004 © Adam Czajka.

Slides:



Advertisements
Podobne prezentacje
C++ wykład 2 ( ) Klasy i obiekty.
Advertisements

C++ wykład 4 ( ) Przeciążanie operatorów.
Programowanie obiektowe
Programowanie Wizualne WYKŁAD 5
Mgr inż.Marcin Borkowski Podstawy Java Krótkie wprowadzenie dla studentów Wyższej Szkoły Ekologii i Zarządzania
Klasa listy jednokierunkowej Przekazywanie parametrów do funkcji
Wzorce.
Dziedziczenie. Po co nam dziedziczenie? class osoba { char * imie, char * imie, * nazwisko; * nazwisko;public: void wypisz_imie(); void wypisz_imie();
Bezpieczeństwo wyjątków w C++: OpenGL
Programowanie w środowisku sieciowym
Programowanie w środowisku sieciowym
Języki programowania C++
Tworzenie i obsługa programów – przykład 3 uwagi cd. Wykorzystując różne klasy biblioteki języka Java należy pamiętać w jakim pakiecie się znajdują. Wszystkie.
Wydajne aplikacje na platformie .NET
Nowa wersja C# Autor: Piotr Sobczak
Szablony (wzorce) Przykład 1: Szablon klasy -
Licznik template<class Count_Type> class Count { public:
OOP - programowanie zorientowane obiektowo w VB.NET
Tablice.
C++ wykład 2 ( ) Klasy i obiekty.
Wykład 2 struktura programu elementy języka typy zmienne
C# Windows Forms Zastosowania Informatyki Wykład 3
C# Windows Forms Zastosowania Informatyki Wykład 2
Podstawy C# Grupa .NET PO.
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ć
Programowanie obiektowe III rok EiT
Programowanie Windows na przykładzie C# część 1
Programowanie obiektowe – zastosowanie języka Java SE
JAVA c.d.. Instrukcji wyboru SWITCH używamy, jeśli chcemy w zależności od wartości pewnego wyrażenia wykonać jeden z kilku fragmentów kodu. Jest to w.
Andrzej Repak Nr albumu
Java – coś na temat Klas Piotr Rosik
Inicjalizacja i sprzątanie
Seminarium problemowe
Wykonał: Michał Nikołajuk
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# Platforma .NET CZ.3 Kuba Ostrowski.
Warsztaty C# Część 6 Grzegorz Piotrowski Grupa .NET PO
Podstawy informatyki 2013/2014
Język C# .NET Maria DEMS.
  ELEMENTY JĘZYKA JAVA komentarze w Javie, słowa kluczowe i operatory, proste typy danych, tablice, podstawowy zestaw instrukcji.
Programowanie w języku C++
Treści multimedialne - kodowanie, przetwarzanie, prezentacja Odtwarzanie treści multimedialnych Andrzej Majkowski informatyka +
Programowanie strukturalne i obiektowe C++
Kurs języka C++ – wykład 4 ( )
K URS JĘZYKA C++ – WYKŁAD 2 ( ) Klasy i obiekty.
Technologie internetowe Wykład 5 Wprowadzenie do skrytpów serwerowych.
Programowanie Zaawansowane
Zestaw pytań nr. 3 Typy generyczne Wyjątki OPRACOWALI: JAKUB GRYCZEWSKIKINGA ROSA DANIEL KAPTEJNYWOJCIECH ŁĘCZYCKI
Dziedziczenie Wykład 7 Dziedziczenie sekwencyjne
PO13-1 / 19 Wykład 13 Wyjątki i ich zgłaszanie Wyłapywanie wyjątków Obsługa wyjątków Wykorzystanie polimorfizmu Filtrowanie wyjątków Błędy w konstruktorach.
Seminarium Dyplomowe: Metodyka i Techniki Programowania Autor: Bartłomiej Fornal.
Wstęp do programowania Wykład 2 Dane, instrukcje, program.
Podstawy informatyki Funkcje Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi.
Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi i Pawła Jerzego Matuszyka Podstawy.
Podstawy informatyki Struktury Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi.
K URS JĘZYKA C++ – WYKŁAD 3 ( ) Przenoszenie Składowe statyczne Funkcje wbudowane Argumenty domyślne.
C++ mgr inż. Tomasz Turba Politechnika Opolska 2016.
Programowanie Obiektowe – Wykład 6
Klasy, pola, obiekty, metody. Modyfikatory dostępu, hermetyzacja
Akademia C# - Lab2 Zmienne, instrukcje warunkowe, pętle, debugger,
Delegaty Delegat to obiekt „wiedzący”, jak wywołać metodę.
Programowanie Obiektowe – Wykład 2
Programowanie obiektowe – zastosowanie języka Java SE
Dane, zmienne, instrukcje
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:

Język C# Adam.Czajka@wsnhid.pl Copyright, 2004 © Adam Czajka

Copyright, 2004 © Adam Czajka Plan Wstęp Platforma .NET Visual Studio.NET 2003 Wprowadzenie do języka C# (typy, komentarze) Copyright, 2004 © Adam Czajka

Copyright, 2004 © Adam Czajka Wstęp Geneza języka C# Język C, C++ Java Visual Basic Język C# Copyright, 2004 © Adam Czajka

Copyright, 2004 © Adam Czajka Wstęp Platforma .NET .NET Framework kompilator C# klasy CLR Plik *.exe Copyright, 2004 © Adam Czajka

Copyright, 2004 © Adam Czajka Wstęp Faza uruchamiania programu Faza pisania programu kod programu C# kod wykonywalny Kod pośredni Kod IL Metadane kompilator C# JIT-ter Plik *.exe Copyright, 2004 © Adam Czajka

Copyright, 2004 © Adam Czajka Wstęp Platforma .NET (CLR) Ładowanie modułów Zarządzanie pamięcią Badanie zgodności typów (type safety) Obsługa wyjątków Zapewnienie bezpieczeństwa Copyright, 2004 © Adam Czajka

Copyright, 2004 © Adam Czajka Wstęp Visual Studio.NET Copyright, 2004 © Adam Czajka

Copyright, 2004 © Adam Czajka Wstęp Visual Studio.NET Okno projektu, klas, zasobów Okno kodu Okno pomocy Okno zadań Copyright, 2004 © Adam Czajka

Copyright, 2004 © Adam Czajka Wstęp Visual Studio.NET – tworzenie rozwiązania Copyright, 2004 © Adam Czajka

Copyright, 2004 © Adam Czajka Wstęp C# - pierwszy program using System; namespace hello { class Class1 static void Main(string[] args) Console.WriteLine("Hello World"); } Copyright, 2004 © Adam Czajka

Copyright, 2004 © Adam Czajka Wstęp C# - pierwszy program Okno projektu Okno klas Copyright, 2004 © Adam Czajka

Copyright, 2004 © Adam Czajka Wstęp C# - pierwszy program static void Main(string[] args) { } static int Main(string[] args) static void Main() static int Main() Copyright, 2004 © Adam Czajka

Copyright, 2004 © Adam Czajka Wstęp C# - przestrzenie nazw namespace Zwierze { class Mysz .... } namespace Komputer { class Mysz .... } Mysz.Idź(20); Mysz.Włącz(); ??? Copyright, 2004 © Adam Czajka

Copyright, 2004 © Adam Czajka Wstęp C# - przestrzenie nazw namespace Zwierze { class Mysz .... } namespace Komputer { class Mysz .... } Zwierze.Mysz.Idź(20); Komputer.Mysz.Włącz(); Copyright, 2004 © Adam Czajka

Copyright, 2004 © Adam Czajka Wstęp C# - dokumentacja w XML ///<summary> /// To jest <b>główna</b> klasa aplikacji ///</summary> class HelloApp { } Copyright, 2004 © Adam Czajka

Copyright, 2004 © Adam Czajka Wstęp C# - dokumentacja w XML <summary> - krótki opis klasy, metody, itp. <remarks> - dłuższy opis klasy, metody, itp. <value> - opis właściwości klasy (ang. property) <param> - parametry metod Copyright, 2004 © Adam Czajka

Copyright, 2004 © Adam Czajka Wstęp C# - dokumentacja w XML ///<summary> /// To jest główna klasa aplikacji ///</summary> ///<param name=”args”> ///To jest opis parametru „args” ///</param> static void Main(string[] args) { } Copyright, 2004 © Adam Czajka

Copyright, 2004 © Adam Czajka Wstęp C# - dokumentacja w XML Copyright, 2004 © Adam Czajka

Copyright, 2004 © Adam Czajka Wstęp C# - dokumentacja w XML Copyright, 2004 © Adam Czajka

Wstęp Zadanie 1 Napisz program „Hello World” z dokumetacja kodu Copyright, 2004 © Adam Czajka

Copyright, 2004 © Adam Czajka Język C# Podstawowe typy danych C# .NET Framework Opis bool System.Boolean {true, false} (false) byte System.Byte <0, 255> (0) sbyte System.SByte <-128, 127> (0) char System.Char 16-bit Unicode (‘\0’) decimal System.Decimal Liczba dziesiętna (0.0m) double System.Double Liczba podwójnej precyzji (0.0d) Copyright, 2004 © Adam Czajka

Copyright, 2004 © Adam Czajka Język C# Podstawowe typy danych C# .NET Framework Opis float System.Single liczba pojedynczej precyzji (0.0f) int System.Int32 32-bitowa liczba całkowita ze znakiem (0) uint System.UInt32 32-bitowa liczba całkowita bez znaku (0) long System.Int64 64-bitowa liczba całkowita ze znakiem (0) Copyright, 2004 © Adam Czajka

Copyright, 2004 © Adam Czajka Język C# Podstawowe typy danych C# .NET Framework Opis ulong System.UInt64 64-bitowa liczba całkowita bez znaku (0) object System.Object referencja do obiektu (null) short System.UInt16 16-bitowa liczba całkowita ze znakiem (0) ushort System.UInt16 16-bitowa liczba całkowita bez znaku (0) Copyright, 2004 © Adam Czajka

Copyright, 2004 © Adam Czajka Język C# Podstawowe typy danych C# .NET Framework Opis String System.String referencja do obiektu łańcucha znaków (null) Copyright, 2004 © Adam Czajka

Copyright, 2004 © Adam Czajka Język C# Zgodnośċ typów danych C# zgodnośċ z CLS C# zgodnośċ z CLS int TAK uint NIE long TAK ulong NIE object TAK short TAK ushort NIE string TAK bool TAK byte TAK sbyte NIE char TAK decimal TAK double TAK float TAK Copyright, 2004 © Adam Czajka

Copyright, 2004 © Adam Czajka Język C# Operatory Pierwsze .f(x) a[x] x++ x-- new typeof Unarne + - ! ~ ++x --x (T)x Multiplikatywne * / % Addytywne + - Przesunięcia << >> Relacyjne i testowanie typów < > <= >= is as Równościowe == != Copyright, 2004 © Adam Czajka

Copyright, 2004 © Adam Czajka Język C# Operatory Logiczne AND & Logiczne XOR ^ Logiczne OR | Warunkowe AND && Warunkowe OR || Operator trójargumentowy ? : Przypisania = *= /= %= += -= <<= >>= &= ^= |= Copyright, 2004 © Adam Czajka

Copyright, 2004 © Adam Czajka Język C# Operatory bool windowReay = (IsWindow() & IsVsible()); Obie funkcje będą wywołane bool windowReay = (IsWindow() && IsVsible()); Wywołanie funkcji IsVisible() zależy od wartości zwróconej przez funkcję IsWindow() Copyright, 2004 © Adam Czajka

Copyright, 2004 © Adam Czajka Język C# Instrukcje sterujące if if (warunek_1) .... else if (warunek_2) ..... else if (warunek_N) else ....... Copyright, 2004 © Adam Czajka

Copyright, 2004 © Adam Czajka Język C# Instrukcje sterujące switch switch (wyrażenie) { case wariant_1: .... break; case wariant_N: ..... default: } Copyright, 2004 © Adam Czajka

Copyright, 2004 © Adam Czajka Język C# Instrukcje sterujące switch string str = Console.ReadLine(); switch (str) { case ”Jeden”: .... break; case ”Dwa”: ..... default: } Copyright, 2004 © Adam Czajka

Copyright, 2004 © Adam Czajka Język C# Instrukcje sterujące switch string str = Console.ReadLine(); switch (str) { case ”Jeden”: case ”Dwa”: .... break; default: } Copyright, 2004 © Adam Czajka

Copyright, 2004 © Adam Czajka Język C# Instrukcje sterujące switch Każdy blok instrukcji switch() musi kończyć się instrukcją break ! string str = Console.ReadLine(); switch (str) { case ”Jeden”: .... case ”Dwa”: break; default: } Copyright, 2004 © Adam Czajka

Copyright, 2004 © Adam Czajka Język C# Instrukcje sterujące for for (inicjalizacja; warunek; iteracja) instrukcja; int [] intArray = {1, 2, 3}; for (int i=0; i < intArray.Length; i++) { Console.WriteLine(intArray[i]); } Copyright, 2004 © Adam Czajka

Copyright, 2004 © Adam Czajka Język C# Instrukcje sterujące foreach for (typ zmienna in kolekcja) instrukcja; int [] intArray = {1, 2, 3}; foreach (int x in intArray) { Console.WriteLine(x); } Copyright, 2004 © Adam Czajka

Copyright, 2004 © Adam Czajka Język C# Instrukcje sterujące foreach for (typ zmienna in kolekcja) instrukcja; int [] intArray = {1, 2, 3}; foreach (int x in intArray) { x = 10; } Zmienna x jest read-only (tylko do odczytu) !!!! Copyright, 2004 © Adam Czajka

Copyright, 2004 © Adam Czajka Język C# Instrukcje sterujące while, do while (warunek) instrukcja; do { instrukcje } while (warunek); Copyright, 2004 © Adam Czajka

Copyright, 2004 © Adam Czajka Język C# Instrukcje sterujące skoki break continue goto return throw Copyright, 2004 © Adam Czajka

Copyright, 2004 © Adam Czajka Język C# Instrukcje sterujące Skoki (throw) bool Działanie(int a, int b) { if (b == 0) throw new InvalidOperationException(”Dzielenie przez 0 !”); ..... } Copyright, 2004 © Adam Czajka

Copyright, 2004 © Adam Czajka Język C# Obiektowość - definicja Abstrakcja - proceduralna - danych Hermetyzacja (określenie poziomów dostępu do obiektu) Dziedziczenie Porozumiewanie się poprzez komunikaty Copyright, 2004 © Adam Czajka

Copyright, 2004 © Adam Czajka Język C# Obiektowość kod źródłowy Klasa C# (szablon) obiekt 1 new new obiekt 2 new obiekt 3 etap wykonania (pamięć RAM) Copyright, 2004 © Adam Czajka

Copyright, 2004 © Adam Czajka Język C# Deklaracja klasy class Kot { public Kot(string _imie) imie = imie; } public void Sen() spi = true; protected bool spi; protected string imie; nie ma pliku „nagłówkowego” – klasa jest w pełni zadeklarowana w pliku *.cs Copyright, 2004 © Adam Czajka

Copyright, 2004 © Adam Czajka Język C# Deklaracja klasy Każda składowa klasy musi mieć określony poziom prywatności Nie ma dyrektyw #include Nie ma ‘;’ po deklaracji klasy Tworzenie klasy poprzez new Nie ma operatora delete Dostęp do składowych klasy poprzez ‘.’ Copyright, 2004 © Adam Czajka

Copyright, 2004 © Adam Czajka Język C# Deklaracja klasy (cykl życia) Kot Mruczek = new Kot(„Mruczek”); .... Mruczek.Sen(); Mruczek = null; nie ma operatora delete !!! Copyright, 2004 © Adam Czajka

Copyright, 2004 © Adam Czajka Język C# Dziedziczenie Uszczegółowanie klas Rozszerzanie klas (ang. superclassing) Zawężanie klas (ang. subclassing) Copyright, 2004 © Adam Czajka

Copyright, 2004 © Adam Czajka Język C# Dziedziczenie uszczegółowianie Zwierzę Ssaki Ryby Kot Pies Copyright, 2004 © Adam Czajka

Copyright, 2004 © Adam Czajka Język C# Dziedziczenie superclassing Okno Przycisk Pole edycji Radio CheckBox Pole „read-only” subclassing Copyright, 2004 © Adam Czajka

Copyright, 2004 © Adam Czajka Język C# Dziedziczenie abstract class Zwierze { abstract public void Je(); } class Ssaki : Zwierze { ... } sealed class Kot : Ssaki { ... } sealed class Pies : Ssaki Copyright, 2004 © Adam Czajka

Copyright, 2004 © Adam Czajka Język C# Dziedziczenie abstract class Zwierze { abstract public void Je(); } class Ssaki : Zwierze { ... } sealed class Kot : Ssaki { ... } sealed class Pies : Ssaki Nie można utworzyć obiektu tej klasy Copyright, 2004 © Adam Czajka

Copyright, 2004 © Adam Czajka Język C# Dziedziczenie abstract class Zwierze { abstract public void Je(); } class Ssaki : Zwierze { ... } sealed class Kot : Ssaki { ... } sealed class Pies : Ssaki Klasa nie może być klasą bazową Copyright, 2004 © Adam Czajka

Copyright, 2004 © Adam Czajka Język C# Dziedziczenie Komunikacja z klasą bazową class Kot { public void Zasnij() base.Sen(); ZamknijOczy(); } Copyright, 2004 © Adam Czajka

Copyright, 2004 © Adam Czajka Język C# Dziedziczenie Gdy nadpisujemy metodę klasy bazowej, to musimy to wykonać explicite class Kot : Zwierze { override public void Sen() base.Sen(); ZamknijOczy(); } Copyright, 2004 © Adam Czajka

Copyright, 2004 © Adam Czajka Język C# Dziedziczenie Metody wirtualne są definiowane poprzez słowo kluczowe virtual class Zwierze { public virtual void Sen() spi = true; } Copyright, 2004 © Adam Czajka

Copyright, 2004 © Adam Czajka Język C# Dziedziczenie Metody wirtualne są definiowane poprzez słowo kluczowe virtual class Kot : Zwierze { public override virtual void Sen() base.Sen(); ZamknijOczy(); } Copyright, 2004 © Adam Czajka

Copyright, 2004 © Adam Czajka Język C# Dziedziczenie – metody wirtualne class Zwierze { private bool spi=false; public void Sen() { spi = true; } class Kot : Zwierze { override public void Sen() base.Sen(); ZamknijOczy(); } Zwierze z = new Zwierze(); Kot k = new Kot(); ..... z = k; z.Sen(); Copyright, 2004 © Adam Czajka

Copyright, 2004 © Adam Czajka Język C# Dziedziczenie – metody wirtualne class Zwierze { private bool spi=false; public virtual void Sen() { spi = true; } class Kot : Zwierze { override virtual public void Sen() base.Sen(); ZamknijOczy(); } Zwierze z = new Zwierze(); Kot k = new Kot(); ..... z = k; z.Sen(); Copyright, 2004 © Adam Czajka

Copyright, 2004 © Adam Czajka Język C# Dziedziczenie – metody wirtualne class Zoo { Zwierze [] tab; public void Sen() foreach (Zwierze z in tab) z.Sen(); } dzięki metodom wirtualnym, klasa Zoo potrafi poprawnie operować na obiektach klasy Zwierze i klasach potomnych (np. Kot) ! Copyright, 2004 © Adam Czajka

Copyright, 2004 © Adam Czajka Język C# Dziedziczenie Wszystkie klasy dziedziczą z klasy System.Object (object) class Zwierze : object { public void Sen() spi = true; } Copyright, 2004 © Adam Czajka

Copyright, 2004 © Adam Czajka Język C# Składowe klasy Pola Stałe Metody Konstruktory Destruktory Właściwości Operatory Zdarzenia Obiekty indeksujące Copyright, 2004 © Adam Czajka

Copyright, 2004 © Adam Czajka Język C# Składowe klasy Pola statyczne zwykłe class Kot { public int wiek; } .... Kot k = new Kot(); k.wiek = 2; class Kot { static public int wiek; } .... Kot.wiek = 2; Copyright, 2004 © Adam Czajka

Copyright, 2004 © Adam Czajka Język C# Składowe klasy Stałe class Kot { public const int maks_wiek = 10; } .... Kot k = new Kot(); k.wiek = Kot.maks_wiek; Copyright, 2004 © Adam Czajka

Copyright, 2004 © Adam Czajka Język C# Składowe klasy Typy wyliczeniowe class Kot { public enum Barwa { Szary, Czarny, Rudy } public Barwa kolor; } .... Kot k = new Kot(); k.kolor = Kot.Barwa.Czarny; Copyright, 2004 © Adam Czajka

Copyright, 2004 © Adam Czajka Język C# Składowe klasy Metody class Kot { public void NowyRok() wiek++; } .... Kot k = new Kot(); k.NowyRok(); Copyright, 2004 © Adam Czajka

Copyright, 2004 © Adam Czajka Język C# Składowe klasy Metody - parametry class Kot { public void nowyWiek(int _nowyWiek) wiek = _nowyWiek; } .... Kot k = new Kot(); k.nowyWiek(1); Copyright, 2004 © Adam Czajka

Copyright, 2004 © Adam Czajka Język C# Składowe klasy Metody – modyfikatory parametrów ref – przekazywanie przez referencje (dane wejściowo-wyjściowa) out – dana wyjściowa domyślnie przekazywanie przez wartość Copyright, 2004 © Adam Czajka

Copyright, 2004 © Adam Czajka Język C# Składowe klasy Metody – modyfikatory parametrów public void zmien(int a) { a = 999; } Static void Main() int x = 10; zmien(x); Console.WriteLine(”X={0}”, x}; 10 Copyright, 2004 © Adam Czajka

Copyright, 2004 © Adam Czajka Język C# Składowe klasy Metody – modyfikatory parametrów public void zmien(ref int a) { a = 999; } Static void Main() int x = 10; zmien(ref x); Console.WriteLine(”X={0}”, x}; 999 Copyright, 2004 © Adam Czajka

Copyright, 2004 © Adam Czajka Język C# Składowe klasy Metody – modyfikatory parametrów public void zmien(out int a) { a = 999; } Static void Main() int x; zmien(out x); Console.WriteLine(”X={0}”, x}; 999 Copyright, 2004 © Adam Czajka

Copyright, 2004 © Adam Czajka Język C# Składowe klasy Metody – modyfikatory parametrów public void zmien(ref int a) { a = 999; } Static void Main() int x; zmien(ref x); Console.WriteLine(”X={0}”, x}; Błąd !!! Copyright, 2004 © Adam Czajka

Copyright, 2004 © Adam Czajka Język C# Składowe klasy Metody – przeciążanie public void zmien(ref int a) { a = 100; } public void zmien(ref double a) a = 100.0; Copyright, 2004 © Adam Czajka

Copyright, 2004 © Adam Czajka Język C# Składowe klasy Konstruktory Konstruktory obiektów Konstruktory statyczne (wywoływane przed pierwszym użyciem klasy) Copyright, 2004 © Adam Czajka

Copyright, 2004 © Adam Czajka Język C# Składowe klasy Konstruktory – inicjalizacja składowych klasy class Kot : Zwierze { protected bool spi = false; public Kot(string imie) : base(imie) wiek = 1; } Copyright, 2004 © Adam Czajka

Copyright, 2004 © Adam Czajka Język C# Składowe klasy Modyfikatory dostępu do klasy public – pełny dostęp protected – dostęp dla danej klasy i klas pochodnych internal – dostęp gwarantowany dla danej klasy i klas w pliku z kodem pośrednim protected internal – dostęp dla danej klasy, klas w pliku z kodem pośrednim i klas pochodnych private – dostęp ograniczony tylko do danej klasy Copyright, 2004 © Adam Czajka

Copyright, 2004 © Adam Czajka Język C# Właściwości class Kot { int wiek; public int Wiek { set { if (value <= 0 || value > 20) throw new ArgumentOutOfRangeException(”Wiek”); else wiek = value; } get { return wiek; } Copyright, 2004 © Adam Czajka

Copyright, 2004 © Adam Czajka Język C# Właściwości Kot kitty = new Kot(); kitty.Wiek = 2; Console.WriteLine(kitty.Wiek); Kitty.Wiek++; Copyright, 2004 © Adam Czajka

Copyright, 2004 © Adam Czajka Język C# Właściwości typu „read-only” class Kot { int wiek = 1; public int Wiek { get { return wiek; } } Copyright, 2004 © Adam Czajka

Copyright, 2004 © Adam Czajka Język C# Tworzenie nowego typu public class Prostokat { public Prostokat(int _x, int _y) x = _x; y = _y; } public int Pole() { return x*y; } protected int x = 0; protected int y = 0; Copyright, 2004 © Adam Czajka

Copyright, 2004 © Adam Czajka Język C# Tworzenie nowego typu public static bool operator ==(Prostokat l, Prostokat r) { if ((object)l == null) reutrn false; else return l.Equals(r); } public static bool operator !=(Prostokat l, Prostokat r) return !(l == r); Copyright, 2004 © Adam Czajka

Copyright, 2004 © Adam Czajka Język C# Tworzenie nowego typu public override bool Equals(object other) { bool result = false; if (other != null) { if ((object)this == other) result = true; else if (other is Prostokat) Prostokat p1 = (Prostokat)other; result = Pole() == p1.Pole(); } return result; Copyright, 2004 © Adam Czajka

Copyright, 2004 © Adam Czajka Język C# Tworzenie nowego typu public static Prostokat operator |(Prostokat l, Prostokat r) { if (l.Pole() != 0) return new Prostokat(l.x, l.y); else (r.Pole() != 0) return new Prostokat(r.x, r.y); else return new Prostokat(); } public override int GetHashCode() return ToString().GetHashCode(); Copyright, 2004 © Adam Czajka

Copyright, 2004 © Adam Czajka Język C# Tworzenie nowego typu public static bool operator false(Prostokat p) { return p.Pole == 0; } public static bool operator true(Prostokat p) return p.Pole != 0; public override string ToString() return String.Format(”X = {0} Y = {1}”, x, y); Copyright, 2004 © Adam Czajka

Copyright, 2004 © Adam Czajka Język C# Tworzenie nowego typu Prostokat a, b; .... bool isTrue = a || b; if (Prostokat.true(a) == true) { return Prostokat.true(a); } else return Prostokat.true(Prostokat.operator |(a,b)); Copyright, 2004 © Adam Czajka

Copyright, 2004 © Adam Czajka Język C# Formatowanie tekstu public class Prostokat { int x, y; ... public override string ToString() string s; s = x.ToString() + ” , ” + y.ToString(); return s; } Copyright, 2004 © Adam Czajka

Copyright, 2004 © Adam Czajka Język C# Formatowanie tekstu public override string ToString() { return String.Format(”X = {0} , Y = {1}”, x, y); } format = ”..... {0} ..... {1} ... ” {0:C} {0:X8} Copyright, 2004 © Adam Czajka

Copyright, 2004 © Adam Czajka Język C# Formatowanie tekstu using System.Text; ... public override string ToString() { StringBuilder b = new StringBuilder(); b.AppendFormat(” X = {0}”, x); b.Append(” , ”); b.AppendFormat(” Y = {0}”, y); return b.ToString(); } Copyright, 2004 © Adam Czajka

Copyright, 2004 © Adam Czajka Język C# Wartości a Referencje int i; i = 42; int copyi; copyi = i; 42 int i; 42 int copyi; @ Kot a; Kot a; a = new Kot(”A”); Kot b; b = a; ”A” a=new Kot(„A”) b = a; @ Kot b; Copyright, 2004 © Adam Czajka

Copyright, 2004 © Adam Czajka Język C# Wartości a Referencje Przy wywołaniu metody pamięć dla parametrów i zmiennych lokalnych (typy podstawowe i struktury) alokowane jest na STOSIE (ang. stack) Przy tworzeniu obiektu klasy poprzez słowo kluczowe new pamięć jest zawsze alokowana na STERCIE (ang. heap) Copyright, 2004 © Adam Czajka

Copyright, 2004 © Adam Czajka Język C# Wartości a Referencje class Kwadrat { public Kwadrat(int _bok) a = _bok; } protected a; Copyright, 2004 © Adam Czajka

Copyright, 2004 © Adam Czajka Język C# Wartości a Referencje STOS STERTA void proc1(int param) { Kwadrat x; x = new Kwadrat(param); .... } static void Main() proc1(42); 42 int param; @ Kwadrat x; 42 Copyright, 2004 © Adam Czajka

Copyright, 2004 © Adam Czajka Język C# Wartości a Referencje STOS STERTA int i; opakowanie 42 int i = 42; object o = i; @ object o; 42 Copyright, 2004 © Adam Czajka

Copyright, 2004 © Adam Czajka Język C# Wartości a Referencje STOS STERTA object o; @ 42 object o = 42; int i = (int)o; 42 rozpakowanie int i; konwersja typów Copyright, 2004 © Adam Czajka

Copyright, 2004 © Adam Czajka Język C# Wartości a Referencje STOS STERTA Kwadrat x; @ 42 Kwadrat x = new Kwadrat(42); object o = x; int i = (int)o; WYJĄTEK !!!!! @ object o; int i; Copyright, 2004 © Adam Czajka

Copyright, 2004 © Adam Czajka Język C# Wartości a Referencje class Kwadrat { public Kwadrat(int _bok) a = _bok; } public static explicit operator int(Kwadrat k) return k.a; } protected a; Copyright, 2004 © Adam Czajka

Copyright, 2004 © Adam Czajka Język C# Wartości a Referencje STOS STERTA Kwadrat x; @ 42 Kwadrat x = new Kwadrat(42); object o = x; int i = (int)o; @ object o; 42 rozpakowanie int i; konwersja typów Copyright, 2004 © Adam Czajka

Copyright, 2004 © Adam Czajka Język C# Obsługa wyjątków Wyjątki są obsługiwane poprzez bloki try i catch try { int i = (int)o; } catch (InvalidCastException ex) ... Copyright, 2004 © Adam Czajka

Copyright, 2004 © Adam Czajka Język C# Obsługa wyjątków Można zdefiniować wiele funkcji przechwytujących wyjątki Uogólnianie try { int i = (int)o; } catch (InvalidCastException badCast) { ... } catch (NullReferenceException badRef) cacth Copyright, 2004 © Adam Czajka

Copyright, 2004 © Adam Czajka Język C# Obsługa wyjątków Wyjątki są propagowane try { int i = (int)o; } catch (InvalidCastException badCast) { ... throw; cacth { ... } Copyright, 2004 © Adam Czajka

Copyright, 2004 © Adam Czajka Język C# Obsługa wyjątków Wyjątki posiadają dodatkowe informacje StackTrace – zwraca łańcuch string z informacją o zawartości stosu Message – zwraca łańcuch string opisujący wyjątek HelpLink – zwraca URL lub URN do miejsca zawierającego więcej informacji o wyjątku ToString() – zwraca informację o wyjątku Copyright, 2004 © Adam Czajka

Copyright, 2004 © Adam Czajka Język C# Obsługa wyjątków Wyjątki posiadają dodatkowe informacje try { int i = (int)o; } catch (InvalidCastException badCast) Console.WriteLine(badCast.ToString()); Console.WriteLine(badCast.Message()); Copyright, 2004 © Adam Czajka

Copyright, 2004 © Adam Czajka Aplikacje dla konsoli Nie posiadają własnego okna Wejście i wyjście tekstowe jest realizowane za pomocą obiektu System.Console Copyright, 2004 © Adam Czajka

Copyright, 2004 © Adam Czajka Aplikacje dla konsoli Formatowanie wyjścia Console.Write( format, lista_par); Console.WriteLine(format, lista_par); format = ”..... {0} ..... {1} ... \n ... {0} ....” {0:C} {0:X8} Copyright, 2004 © Adam Czajka

Copyright, 2004 © Adam Czajka Aplikacje dla konsoli Formatowanie wyjścia Currency C Decimal D Expotential E Fixed point F General G Number N Percent P Hexadecimal X Copyright, 2004 © Adam Czajka

Copyright, 2004 © Adam Czajka Aplikacje dla konsoli Procedury wejścia char Console.Read(); string Console.ReadLine(); string str = Console.ReadLine(); int val = int.Parse(str); Copyright, 2004 © Adam Czajka

Copyright, 2004 © Adam Czajka Aplikacje dla konsoli Zadanie 2 Napisz program kalkulator działający na zdefiniowanym typie Wektor i typach skalarnych (zaimplementuj obsługę wyjątków) Copyright, 2004 © Adam Czajka

Copyright, 2004 © Adam Czajka Język C# Zarządzanie pamięcią Obiekty ostatnio alokowane będą najpewniej zwalniane jako pierwsze. Obiekty, które jak dotąd długo „żyły” nie będą prawdopodobnie także i w najbliższym czasie zwalniane. Obiekty alokowane razem będą najprawdopodobniej razem zwalniane. Copyright, 2004 © Adam Czajka

Copyright, 2004 © Adam Czajka Język C# Zarządzanie pamięcią Zarządzanie pamięcią (ang. Garbage Collection) jest wielopokoleniowe Pokolenie 0 – mała ale szybko dostępna pamięć, mieści się w pamięci podręcznej L2 Pamięć pokolenia 0 to prosta tablica bajtów Copyright, 2004 © Adam Czajka

Copyright, 2004 © Adam Czajka Język C# Zarządzanie pamięcią Obiekty pokolenia 0 , które przetrwały zbieranie nieużytków są umieszczane w pamięci pokolenia 1 Obiekty pokolenia 1 , które przetrwały zbieranie nieużytków są umieszczane w pamięci pokolenia 2 Copyright, 2004 © Adam Czajka

Copyright, 2004 © Adam Czajka Język C# Zarządzanie pamięcią – klasa GC GC.SupressFinalize(this); GC.Collect(); // pełna optymalizacja GC.Collect(0); // optymalizacja na poziomie 0 int genNum = GC.GetGeneration(this) Copyright, 2004 © Adam Czajka

Copyright, 2004 © Adam Czajka Język C# Zarządzanie pamięcią – metoda Dispose class ResEx : IDisposable { ~ResEx() Dispose(false); } public void Dispose() Dispose(true); Copyright, 2004 © Adam Czajka

Copyright, 2004 © Adam Czajka Język C# Zarządzanie pamięcią – metoda Dispose protected void Dispose(bool disposing) { if (disposing) { GC.SupressFinalize(this); // Zwolnij obiekty zarządzalne } // Zwolnij zewnętrzne zasoby ..... .... Copyright, 2004 © Adam Czajka

Copyright, 2004 © Adam Czajka Język C# Wreszcie ! Copyright, 2004 © Adam Czajka