Transcript Document

Język C#
[email protected]
Copyright, 2004 © Adam Czajka
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 © Adam Czajka
Java
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#
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 wyjątków
Zapewnienie bezpieczeństwa
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ń
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 Class1
{
static void Main(string[] args)
{
Console.WriteLine("Hello World");
}
}
}
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[] args)
{ }
static void Main()
{ }
static int Main()
{ }
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
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>
class HelloApp
{
}
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
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
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, 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
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
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
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
C#
zgodnośċ z CLS
bool
TAK
int
TAK
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
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
&&
Warunkowe OR
||
Operator trójargumentowy
? :
Przypisania
= *= /= %= += -= <<= >>=
&= ^= |=
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
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
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.ReadLine();
switch (str)
{
case ”Jeden”:
....
break;
case ”Dwa”:
.....
break;
default:
break;
}
Copyright, 2004 © Adam Czajka
Język C#
Instrukcje sterujące
switch
string str = Console.ReadLine();
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.ReadLine();
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
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
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
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
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 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
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 1
new
obiekt 2
Copyright, 2004 © Adam Czajka
new
obiekt 3
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 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.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, 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
CheckBox
subclassing
Copyright, 2004 © Adam Czajka
Pole „readonly”
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 : 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 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()
{
base.Sen();
ZamknijOczy();
}
}
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
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 : Zwierze
{
public override virtual void Sen()
{
base.Sen();
ZamknijOczy();
}
}
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
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
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 : 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
Copyright, 2004 © Adam Czajka
Język C#
Składowe klasy
Pola
statyczne
zwykłe
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;
}
....
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, 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 NowyRok()
{
wiek++;
}
}
....
Kot k = new Kot();
k.NowyRok();
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
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 = 999;
}
Static void Main()
{
int x = 10;
zmien(x);
Console.WriteLine(”X={0}”, x};
}
Copyright, 2004 © Adam Czajka
10
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};
}
Copyright, 2004 © Adam Czajka
999
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};
}
Copyright, 2004 © Adam Czajka
999
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};
}
Copyright, 2004 © Adam Czajka
Błąd !!!
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 użyciem klasy)
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
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 {
if (value <= 0 || value > 20)
throw new ArgumentOutOfRangeException(”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.WriteLine(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 Wiek
{
get
{ return wiek;
}
}
}
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
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 = 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
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
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
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
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
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
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
Język C#
Wartości a Referencje
int i;
i = 42;
int copyi;
copyi = i;
42
int 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 (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 = _bok;
}
protected a;
}
Copyright, 2004 © Adam Czajka
Język C#
Wartości a Referencje
STOS
void proc1(int param)
{
Kwadrat x;
x = new Kwadrat(param);
....
}
static void Main()
{
proc1(42);
}
STERTA
int param;
42
Kwadrat x;
@
Copyright, 2004 © Adam Czajka
42
Język C#
Wartości a Referencje
STOS
STERTA
int i;
opakowanie
int i = 42;
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;
@
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 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 = _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);
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
{
int i = (int)o;
}
catch (InvalidCastException 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 i = (int)o;
}
catch (InvalidCastException badCast)
{
...
}
catch (NullReferenceException badRef)
{
...
}
cacth
{
...
}
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
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
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
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.WriteLine(format, lista_par);
format = ”..... {0} ..... {1} ... \n ... {0} ....”
{0:C}
{0:X8}
Copyright, 2004 © Adam Czajka
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.ReadLine();
string str = Console.ReadLine();
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 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 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ą
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
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.SupressFinalize(this);
GC.Collect();
// pełna optymalizacja
GC.Collect(0);
// optymalizacja na poziomie 0
int genNum = GC.GetGeneration(this)
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
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
Język C#
Copyright, 2004 © Adam Czajka