Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

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

Podobne prezentacje


Prezentacja na temat: "Język C# Copyright, 2004 © Adam Czajka."— Zapis prezentacji:

1 Język C# Copyright, 2004 © Adam Czajka

2 Plan Wstęp Platforma.NET Visual Studio.NET 2003 Wprowadzenie do języka C# (typy, komentarze)

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

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

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

6 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

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

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

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

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

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

12 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() { }

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

14 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();

15 Copyright, 2004 © Adam Czajka Wstęp ///

/// To jest główna klasa aplikacji /// class HelloApp {} C# - dokumentacja w XML

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

17 Copyright, 2004 © Adam Czajka Wstęp ///

/// To jest główna klasa aplikacji /// /// /// ///To jest opis parametru args /// static void Main(string[] args) {} C# - dokumentacja w XML

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

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

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

21 Copyright, 2004 © Adam Czajka Język C# Podstawowe typy danych C#.NET FrameworkOpis boolSystem.Boolean{true, false} (false) byteSystem.Byte (0) sbyteSystem.SByte (0) charSystem.Char16-bit Unicode (\0) decimalSystem.DecimalLiczba dziesiętna (0.0m) doubleSystem.DoubleLiczba podwójnej precyzji (0.0d)

22 Copyright, 2004 © Adam Czajka Język C# Podstawowe typy danych C#.NET FrameworkOpis floatSystem.Singleliczba pojedynczej precyzji (0.0f) intSystem.Int3232-bitowa liczba całkowita ze znakiem (0) uintSystem.UInt3232-bitowa liczba całkowita bez znaku (0) longSystem.Int6464-bitowa liczba całkowita ze znakiem (0)

23 Copyright, 2004 © Adam Czajka Język C# Podstawowe typy danych C#.NET FrameworkOpis ulongSystem.UInt6464-bitowa liczba całkowita bez znaku (0) objectSystem.Objectreferencja do obiektu (null) shortSystem.UInt1616-bitowa liczba całkowita ze znakiem (0) ushortSystem.UInt1616-bitowa liczba całkowita bez znaku (0)

24 Copyright, 2004 © Adam Czajka Język C# Podstawowe typy danych C#.NET FrameworkOpis StringSystem.Stringreferencja do obiektu łańcucha znaków (null)

25 Copyright, 2004 © Adam Czajka Język C# Zgodnośċ typów danych C# zgodnośċ z CLS boolTAK byteTAK sbyteNIE charTAK decimalTAK doubleTAK floatTAK C# zgodnośċ z CLS intTAK uintNIE longTAK ulongNIE objectTAK shortTAK ushortNIE stringTAK

26 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== !=

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

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

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

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

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

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

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

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

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

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

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

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

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

40 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

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

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

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

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

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

46 Copyright, 2004 © Adam Czajka Język C# Dziedziczenie Zwierzę SsakiRyby KotPies uszczegółowianie

47 Copyright, 2004 © Adam Czajka Język C# Dziedziczenie Okno Przycisk Pole edycji RadioCheckBox Pole read- only superclassing subclassing

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

73 Copyright, 2004 © Adam Czajka Język C# Składowe klasy Modyfikatory dostępu do 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

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

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

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

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

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

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

80 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); if (l.Pole() != 0) return new Prostokat(l.x, l.y); else (r.Pole() != 0) return new Prostokat(r.x, r.y); else (r.Pole() != 0) return new Prostokat(r.x, r.y); else return new Prostokat(); else return new Prostokat();} public override int GetHashCode() { return ToString().GetHashCode(); return ToString().GetHashCode();}

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

82 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); return Prostokat.true(a);}else{ return Prostokat.true(Prostokat.operator |(a,b)); return Prostokat.true(Prostokat.operator |(a,b));}

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

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

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

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

87 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 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) Przy tworzeniu obiektu klasy poprzez słowo kluczowe new pamięć jest zawsze alokowana na STERCIE (ang. heap)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

102 Copyright, 2004 © Adam Czajka Aplikacje dla konsoli Formatowanie wyjścia Currency C DecimalD ExpotentialE Fixed pointF General G NumberN Percent P HexadecimalX

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

104 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)

105 Copyright, 2004 © Adam Czajka Język C# Zarządzanie pamięcią Obiekty ostatnio alokowane będą najpewniej zwalniane jako pierwsze. 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, 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. Obiekty alokowane razem będą najprawdopodobniej razem zwalniane.

106 Copyright, 2004 © Adam Czajka Język C# Zarządzanie pamięcią Zarządzanie pamięcią (ang. Garbage Collection) jest wielopokoleniowe 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 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 Pamięć pokolenia 0 to prosta tablica bajtów

107 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 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 Obiekty pokolenia 1, które przetrwały zbieranie nieużytków są umieszczane w pamięci pokolenia 2

108 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)

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

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

111 Copyright, 2004 © Adam Czajka Język C#


Pobierz ppt "Język C# Copyright, 2004 © Adam Czajka."

Podobne prezentacje


Reklamy Google