Jzyk C Adam Czajkawsnhid pl Copyright 2004 Adam

  • Slides: 111
Download presentation
Język C# Adam. Czajka@wsnhid. pl Copyright, 2004 © Adam Czajka

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

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

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

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

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

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

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

Wstęp Faza pisania programu kod programu C# Faza uruchamiania programu kod wykonywalny kompilator C#

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

Wstęp Platforma. NET (CLR) Ładowanie modułów Zarządzanie pamięcią Badanie zgodności typów (type safety) Obsługa

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

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

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

Wstęp Visual Studio. NET Okno projektu, klas, zasobów Okno kodu Okno pomocy Okno zadań

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

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

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

Wstęp C# - pierwszy program using System; namespace hello { class Class 1 {

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

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

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

Wstęp C# - pierwszy program static void Main(string[] args) { } static int Main(string[]

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

Wstęp C# - przestrzenie nazw namespace Zwierze { class Mysz {. . } }

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

Wstęp C# - przestrzenie nazw namespace Zwierze { class Mysz {. . } }

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

Wstęp C# - dokumentacja w XML ///<summary> /// To jest <b>główna</b> klasa aplikacji ///</summary>

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

Wstęp C# - dokumentacja w XML <summary> - krótki opis klasy, metody, itp. <remarks>

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

Wstęp C# - dokumentacja w XML ///<summary> /// To jest główna klasa aplikacji ///</summary>

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

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

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

Wstęp C# - dokumentacja w XML 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

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

Język C# Podstawowe typy danych C# . NET Framework Opis bool System. Boolean {true,

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 (‘’) decimal System. Decimal Liczba dziesiętna (0. 0 m) double System. Double Liczba podwójnej precyzji (0. 0 d) Copyright, 2004 © Adam Czajka

Język C# Podstawowe typy danych C# . NET Framework Opis float System. Single liczba

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

Język C# Podstawowe typy danych C# . NET Framework Opis ulong System. UInt 64

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

Język C# Podstawowe typy danych C# String . NET Framework System. String Opis referencja

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

Język C# Zgodnośċ typów danych C# zgodnośċ z CLS bool TAK int byte TAK

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

Język C# Operatory Pierwsze . f(x) a[x] x++ x-- new typeof Unarne + -

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 Równościowe == % != Copyright, 2004 © Adam Czajka as

Język C# Operatory Logiczne AND & Logiczne XOR ^ Logiczne OR | Warunkowe AND

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

Język C# Operatory bool window. Reay = (Is. Window() & Is. Vsible()); Obie funkcje

Język C# Operatory bool window. Reay = (Is. Window() & Is. Vsible()); Obie funkcje będą wywołane bool window. Reay = (Is. Window() && Is. Vsible()); Wywołanie funkcji Is. Visible() zależy od wartości zwróconej przez funkcję Is. Window() Copyright, 2004 © Adam Czajka

Język C# Instrukcje sterujące if if (warunek_1). . else if (warunek_2). . . else

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

Język C# Instrukcje sterujące switch (wyrażenie) { case wariant_1: . . break; case wariant_N:

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

Język C# Instrukcje sterujące switch string str = Console. Read. Line(); switch (str) {

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

Język C# Instrukcje sterujące switch string str = Console. Read. Line(); switch (str) {

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

Język C# Instrukcje sterujące switch Każdy blok instrukcji switch() musi string str = Console.

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

Język C# Instrukcje sterujące for (inicjalizacja; warunek; iteracja) instrukcja; int [] int. Array =

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

Język C# Instrukcje sterujące foreach for (typ zmienna in kolekcja) instrukcja; int [] int.

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

Język C# Instrukcje sterujące foreach for (typ zmienna in kolekcja) instrukcja; int [] int.

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

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

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

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

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

Język C# Instrukcje sterujące Skoki (throw) bool Działanie(int a, int b) { if (b

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

Język C# Obiektowość - definicja Abstrakcja - proceduralna - danych Hermetyzacja (określenie poziomów dostępu

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

Język C# Obiektowość kod źródłowy Klasa C# (szablon) new etap wykonania (pamięć RAM) obiekt

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

Język C# Deklaracja klasy class Kot { public Kot(string _imie) { imie = imie;

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

Język C# Deklaracja klasy Każda składowa klasy musi mieć określony poziom prywatności Nie ma

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

Język C# Deklaracja klasy (cykl życia) Kot Mruczek = new Kot(„Mruczek”); . . Mruczek.

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

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

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

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

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

Język C# Dziedziczenie superclassing Okno Przycisk Radio Pole edycji Check. Box subclassing Copyright, 2004

Język C# Dziedziczenie superclassing Okno Przycisk Radio Pole edycji Check. Box subclassing Copyright, 2004 © Adam Czajka Pole „readonly”

Język C# Dziedziczenie abstract class Zwierze { abstract public void Je(); } class Ssaki

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

Język C# Dziedziczenie abstract class Zwierze { abstract public void Je(); } class Ssaki

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

Język C# Dziedziczenie abstract class Zwierze { abstract public void Je(); } może class

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

Język C# Dziedziczenie Komunikacja z klasą bazową class Kot { public void Zasnij() {

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

Język C# Dziedziczenie Gdy nadpisujemy metodę klasy bazowej, to musimy to wykonać explicite class

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

Język C# Dziedziczenie Metody wirtualne są definiowane poprzez słowo kluczowe virtual class Zwierze {

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

Język C# Dziedziczenie Metody wirtualne są definiowane poprzez słowo kluczowe virtual class Kot :

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

Język C# Dziedziczenie – metody wirtualne class Zwierze { private bool spi=false; public void

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(); Zamknij. Oczy(); } } Zwierze z = new Zwierze(); Kot k = new Kot(); . . . z = k; z. Sen(); Copyright, 2004 © Adam Czajka

Język C# Dziedziczenie – metody wirtualne class Zwierze { private bool spi=false; public virtual

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(); Zamknij. Oczy(); } } Zwierze z = new Zwierze(); Kot k = new Kot(); . . . z = k; z. Sen(); Copyright, 2004 © Adam Czajka

Język C# Dziedziczenie – metody wirtualne dzięki metodom wirtualnym, klasa Zoo potrafi poprawnie operować

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

Język C# Dziedziczenie Wszystkie klasy dziedziczą z klasy System. Object (object) class Zwierze :

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

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

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

Język C# Składowe klasy Pola zwykłe statyczne class Kot { public int wiek; }

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

Język C# Składowe klasy Stałe class Kot { public const int maks_wiek = 10;

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

Język C# Składowe klasy Typy wyliczeniowe class Kot { public enum Barwa { Szary,

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

Język C# Składowe klasy Metody class Kot { public void Nowy. Rok() { wiek++;

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

Język C# Składowe klasy Metody - parametry class Kot { public void nowy. Wiek(int

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

Język C# Składowe klasy Metody – modyfikatory parametrów ref – przekazywanie przez referencje (dane

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

Język C# Składowe klasy Metody – modyfikatory parametrów public void zmien(int a) { a

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. Write. Line(”X={0}”, x}; } Copyright, 2004 © Adam Czajka 10

Język C# Składowe klasy Metody – modyfikatory parametrów public void zmien(ref int a) {

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. Write. Line(”X={0}”, x}; } Copyright, 2004 © Adam Czajka 999

Język C# Składowe klasy Metody – modyfikatory parametrów public void zmien(out int a) {

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. Write. Line(”X={0}”, x}; } Copyright, 2004 © Adam Czajka 999

Język C# Składowe klasy Metody – modyfikatory parametrów public void zmien(ref int a) {

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. Write. Line(”X={0}”, x}; } Copyright, 2004 © Adam Czajka Błąd !!!

Język C# Składowe klasy Metody – przeciążanie public void zmien(ref int a) { a

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

Język C# Składowe klasy Konstruktory - Konstruktory obiektów - Konstruktory statyczne (wywoływane przed pierwszym

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

Język C# Składowe klasy Konstruktory – inicjalizacja składowych klasy class Kot : Zwierze {

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

Język C# Składowe klasy Modyfikatory dostępu do klasy public – pełny dostęp protected –

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

Język C# Właściwości class Kot { int wiek; public int Wiek { set {

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

Język C# Właściwości Kot kitty = new Kot(); kitty. Wiek = 2; Console. Write.

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

Język C# Właściwości typu „read-only” class Kot { int wiek = 1; public int

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

Język C# Tworzenie nowego typu public class Prostokat { public Prostokat(int _x, int _y)

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

Język C# Tworzenie nowego typu public static bool operator ==(Prostokat l, Prostokat r) {

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

Język C# Tworzenie nowego typu public override bool Equals(object other) { bool result =

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 p 1 = (Prostokat)other; result = Pole() == p 1. Pole(); } } return result; } Copyright, 2004 © Adam Czajka

Język C# Tworzenie nowego typu public static Prostokat operator |(Prostokat l, Prostokat r) {

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 Get. Hash. Code() { return To. String(). Get. Hash. Code(); } Copyright, 2004 © Adam Czajka

Język C# Tworzenie nowego typu public static bool operator false(Prostokat p) { return p.

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 To. String() { return String. Format(”X = {0} Y = {1}”, x, y); } Copyright, 2004 © Adam Czajka

Język C# Tworzenie nowego typu Prostokat a, b; . . bool is. True =

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

Język C# Formatowanie tekstu public class Prostokat { int x, y; . . .

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

Język C# Formatowanie tekstu public override string To. String() { return String. Format(”X =

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

Język C# Formatowanie tekstu using System. Text; . . . public override string To.

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

Język C# Wartości a Referencje int i; i = 42; int copyi; copyi =

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

Język C# Wartości a Referencje Przy wywołaniu metody pamięć dla parametrów i zmiennych lokalnych

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

Język C# Wartości a Referencje class Kwadrat { public Kwadrat(int _bok) { a =

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

Język C# Wartości a Referencje STOS void proc 1(int param) { Kwadrat x; x

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

Język C# Wartości a Referencje STOS int i; int i = 42; STERTA opakowanie

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

Język C# Wartości a Referencje STOS STERTA object o; @ object o = 42;

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

Język C# Wartości a Referencje STOS STERTA Kwadrat x; @ Kwadrat x = new

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

Język C# Wartości a Referencje class Kwadrat { public Kwadrat(int _bok) { a =

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

Język C# Wartości a Referencje STOS STERTA Kwadrat x; Kwadrat x = new Kwadrat(42);

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

Język C# Obsługa wyjątków Wyjątki są obsługiwane poprzez bloki try i catch try {

Język C# Obsługa wyjątków Wyjątki są obsługiwane poprzez bloki try i catch try { int i = (int)o; } catch (Invalid. Cast. Exception ex) {. . . } 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

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 (Invalid. Cast. Exception bad. Cast) {. . . } catch (Null. Reference. Exception bad. Ref) {. . . } cacth {. . . } Copyright, 2004 © Adam Czajka

Język C# Obsługa wyjątków Wyjątki są propagowane try { int i = (int)o; }

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

Język C# Obsługa wyjątków Wyjątki posiadają dodatkowe informacje Stack. Trace – zwraca łańcuch string

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

Język C# Obsługa wyjątków Wyjątki posiadają dodatkowe informacje try { int i = (int)o;

Język C# Obsługa wyjątków Wyjątki posiadają dodatkowe informacje try { int i = (int)o; } catch (Invalid. Cast. Exception bad. Cast) { Console. Write. Line(bad. Cast. To. String()); Console. Write. Line(bad. Cast. Message()); } Copyright, 2004 © Adam Czajka

Aplikacje dla konsoli Nie posiadają własnego okna Wejście i wyjście tekstowe jest realizowane za

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

Aplikacje dla konsoli Formatowanie wyjścia Console. Write( format, lista_par); Console. Write. Line(format, lista_par); format

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

Aplikacje dla konsoli Formatowanie wyjścia Currency C Percent P Decimal D Hexadecimal X Expotential

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

Aplikacje dla konsoli Procedury wejścia char Console. Read(); string Console. Read. Line(); string str

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

Aplikacje dla konsoli Zadanie 2 Napisz program kalkulator działający na zdefiniowanym typie Wektor i

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

Język C# Zarządzanie pamięcią Obiekty ostatnio alokowane będą najpewniej zwalniane jako pierwsze. Obiekty, które

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

Język C# Zarządzanie pamięcią (ang. Garbage Collection) jest wielopokoleniowe Pokolenie 0 – mała ale

Język C# 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 L 2 Pamięć pokolenia 0 to prosta tablica bajtów Copyright, 2004 © Adam Czajka

Język C# Zarządzanie pamięcią Obiekty pokolenia 0 , które przetrwały zbieranie nieużytków są umieszczane

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

Język C# Zarządzanie pamięcią – klasa GC GC. Supress. Finalize(this); GC. Collect(); // pełna

Język C# Zarządzanie pamięcią – klasa GC GC. Supress. Finalize(this); GC. Collect(); // pełna optymalizacja GC. Collect(0); // optymalizacja na poziomie 0 int gen. Num = GC. Get. Generation(this) Copyright, 2004 © Adam Czajka

Język C# Zarządzanie pamięcią – metoda Dispose class Res. Ex : IDisposable { ~Res.

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

Język C# Zarządzanie pamięcią – metoda Dispose protected void Dispose(bool disposing) { if (disposing)

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

Język C# Copyright, 2004 © Adam Czajka

Język C# Copyright, 2004 © Adam Czajka