SUPORT CURS
Lect. dr. Ctlin BOJA
catalin.boja@ie.ase.ro
cladire CSIE, sala 2315
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
1.
2.
3.
4.
5.
6.
7.
Platforma .NET
Primul program C#
Mixed Programming
Comparatie C++ vs C#
Tipuri de date in C#
Conceptul de boxing / unboxing
Masive de date
Tipuri de date struct/enum si class
Argumentele metodei main
Mecanisme try-catch
Pointeri/Referinte
Definire clase
Proprietati
2010 Catalin Boja
VB.NET
Managed C++
C#
Alte limbaje C#
Windows Forms
Data si XML
Base Class Library
CLR - Common Language Runtime
(debug, exception, type checking, JIT compiler,
garbage collector)
Sursa
C# / J# / Managed C++, VB .NET
=>
IL Interpreted Language
=>
PE Portable Executable
(EXE sau DLL)
Assembly
Interpretat de CLR
cshello.cs
using System;
Metoda Main nu trebuie apelata de un obiect
class Hello {
public static void Main(){
Console.WriteLine("Hello World.NET");
}
}
Start -> Visual Studio 2005 -> Tools -> Command Prompt
Compilare cu csc.exe cshello.cs 2010 Catalin Boja
vbhello.vb
Imports System
Module Hello
Sub Main()
Console.WriteLine("Hello World.NET")
End Sub
End Module
Start -> Visual Studio 2005 -> Tools -> Command Prompt
Compilare cu vbc.exe vbhello.vb 2010 Catalin Boja
10
mcpphello.cpp
#using <mscorlib.dll>
using namespace System;
void main()
{
Console::WriteLine(S"Hello World.NET");
}
Start -> Visual Studio 2005 -> Tools -> Command Prompt
Compilare cu cl.exe mcpphello.cpp
2010 Catalin Boja
11
jshello.js
import System;
Console.WriteLine("Hello World.NET");
Start -> Visual Studio 2005 -> Tools -> Command Prompt
Compilare cu jsc.exe jshello.js 2010 Catalin Boja
12
ilhello.il
.assembly Hello{ }
.method public static void run() il managed{
.entrypoint
ldstr "Hello World.NET"
call void
[mscorlib]System.Console::WriteLine(class
System.String)
ret
}
Start -> Visual Studio 2005 -> Tools -> Command Prompt
Compilare cu ilasm.exe ilhello.il 2010 Catalin Boja
13
namespace Math{
public class BasicOp{
public static double Add(double op1, double op2){
return op1 + op2;
}
public static double Multiply(double op1, double op2){
return op1 * op2;
}
Imports Math
}
Imports System
}
C#
math.dll
VB
Module MathTest
Sub Main()
mathtest.exe
class Abonat{ };
void main(){
C++
using System;
public class Abonat{
C#
15
16
a. Tipuri de baza
1. Tipuri valorice
17
18
STIVA
HEAP
int i = 123;
object Obiect = i
4 octeti : 123
referinta
4 octeti: 123
Int32 I32 = i
referinta
? octeti: 123
4 octeti : 123
}
}
19
BinarySearch()
Clear()
CopyTo()
Sort( )
Clone( )
20
HEAP
STIVA
int [ ] vect;
vect = new int[4];
int [ ] vect2 = {1,2,3,4};
int [ ] vect3 = new int[4] {1,2,3,4};
referinta null
referinta
referinta
referinta
Pers p1;
Pers [ ] vectPers;
vectPers = new Pers[4];
referinta null
16 octeti: 0,0,0,0
16 octeti: 1,2,3,4
16 octeti: 1,2,3,4
referinta null
referinta
referinta
16 octeti:
Pers p1
Pers p1
Pers p1
Pers p1
2010 Catalin Boja
21
//matrice tablou
//matrice zig-zag
22
SINTAXA:
[acces] struct nume_struct [:interfete]
{ atribute + metode }
reprezinta colectii de atribute + metode;
este derivata din object
este un tip valoric (value type) definit de
utilizator
poate fi derivata din interfete
poate fi impachetata intr-un obiect (boxing)
stud1.cs, stud2.cs
2010 Catalin Boja
23
SINTAXA:
enum nume_enum { lista constante }
reprezinta o colectie de constante;
implicit primul simbol are valoare 0
pot fi date valori explicite prin nume_simbol
= valoare
nu poate fi initializata cu valori numerice
stud1.cs, stud2.cs
2010 Catalin Boja
24
SINTAXA:
public static void Main(string[ ] Args)
reprezinta un masiv de stringuri;
prima valoare NU este numele executabilului
trebuie validat numarul de parametrii
hello1.exe Popescu Gigel <-> Args =
{Popescu, Gigel }
1. Argumente main, try-catch,
for, while
25
Mecanisme try-catch-finally
Pointeri/Referinte parametrii pentru
funcii
Definire clase
Proprietati
Shallow copy vs Deep copy
26
27
try
{//secventa prelucrari}
catch(exceptie_tip_1)
{ //secventa prelucrari specifice}
catch(exceptie_tip_2)
{//secventa prelucrari specifice}
catch(Exeption)
{ //secventa prelucrari generale}
finally
{//secventa prelucrari obligatorii}
2010 Catalin Boja
28
blocul try{}
contine secventa de prelucrari care genereaza
exceptii;
are asociat minim un bloc catch
intre blocul try si blocurile catch asociate nu
exista alte instructiuni
blocul catch( tip_exceptie exceptie)
gestioneaza o exceptie de tipul anuntat
tip_exceptie reprezinta instanta unei clase
derivate din Exception (ArithmeticException,
DivideByZeroException)
2010 Catalin Boja
29
blocul catch(Exception e)
gestioneaza toate tipurile de exceptii
blocul finally{}
contine secventa de prelucrari care se executa
indiferent daca blocul try a generat sau nu
exceptii si daca acestea au fost sau nu tratate in
blocurile catch;
30
try { }
catch(exceptie_tip_1){}
catch(exceptie_tip_2){}
catch(Exception e){}
31
Blocurile
try-catch-finally pot fi
incluse in alte blocuri try;
Programatorul poate defini
propriile exceptii prin clase
derivate din Exception (ecuatie2.cs)
functia throw genereaza orice tip
de exceptie (ecuatie2.cs)
2010 Catalin Boja
32
33
34
35
36
37
38
39
40
In C# toate
obiectele sunt
gestionate prin
referinte.
2010 Catalin Boja
41
Sintaxa definire:
[atribute] [tip_acces] class Nume_Clasa
[:clasa_baza]
{
tip_acces atribut1;
tip_acces atribut2;
42
tip_acces:
public accesibile
private neaccesibile
protected accesibile claselor derivate
internal accesibile claselor din acelasi
assembly
protected internal
43
class Test
{
public const int atribut_1 = 10;
public readonly int atribut_2;
}
44
45
46
47
class Test
{
public static int atribut_1 = 10;
public static readonly int atribut_2;
}
2010 Catalin Boja
48
Pointerul THIS:
reprezinta adresa obiectului care apeleaza
metoda membra a clasei;
toate functiile nestatice membre clasei
primesc implicit acest pointer;
se plaseaza pe prima pozitie in lista de
parametrii a metodei;
49
functii membre:
50
51
functii constructor:
52
functii constructor:
53
functii constructor:
sintaxa:
class Nume_clasa {
public Nume_clasa( ){}
};
54
55
functii destructor:
56
functii destructor:
NU au atribut de acces;
forma implicita este generata de compilator
daca nu este definita de programator;
sunt apelate implicit de catre garbage collector;
NU pot fi apelate explicit;
pot fi onlocuite cu metoda Dispose() (avantaj:
se poate apela)
57
functii destructor:
sintaxa:
class Nume_clasa {
~Nume_clasa( ){}
};
apel implicit:
58
constructor de copiere:
59
constructor de copiere:
sintaxa:
class Nume_clasa {
public Nume_clasa(Nume_clasa ob_existent){}
};
apel explicit:
60
operator =
Limbajul C# NU permite
supraincarcarea
operatorului =
61
operator =
rol principal: copiaza bit cu bit valoarea zonei
de memorie sursa in zona de memorie a
destinatiei (cele doua zone sunt identice ca
structura si tip);
in cazul obiectelor C#, copiaza valoarea
referintei obiectului sursa in referinta obiectul
destinatie
62
operator =
apel explicit :
class Nume_clasa {
};
public static void Main () {
Nume_clasa obiect_1 = new Nume_clasa();
Nume_clasa obiect_2() = new Nume_clasa();
obiect_2 = obiect_1;
}
63
64
65
66
//proprietate privata
//proprietate privata
//proprietate statica
Compilatorul
genereaza automat
public void set_Profit( float value){
if(value>0) _profit=value;
}
67
Shallow copy
Deep copy
Exemplu: copy.cs
2010 Catalin Boja
68
69
STIVA
HEAP
referinta null
referinta
X octeti: valori
a1 = a2
referinta
referinta
X octeti: valori
a1 = new Auto(a2)
referinta
referinta
X octeti: valori
X octeti: valori
a1 = (Auto)a2.Clone()
referinta
referinta
X octeti: valori
X octeti: valori
Auto a1;
Auto a2 = new Auto();
Shallow copy
Deep copy
2010 Catalin Boja
70
71
72
supraincarcare operatori:
interpretare
};
void main()
{
Test t1, t2, t3;
t1 = t2 + t3;
}
Test.operator+(t1,t2)
(supraincarcare prin
functie statica)
73
74
Exemplu: numerar.cs
75
76
77
referinta
X octeti: valori
referinta
referinta
78
Exemplu: numerar.cs
79
Exemplu: numerar.cs
80
81
Exemplu: randomlist.cs
82
83
}
-apelul constructorului din clasa de baza se face prin base:
public ProdusSpecial(double cost,float profit, float discount):base(cost,profit)
{
if(discount>0) _discount=discount;
}
84
class Baza{
int atribut1;
int atribut2;
};
class Derivat : Baza{
int atribut_nou;
};
mostenire
85
class Baza{
int atribut1;
int atribut2;
};
class Derivat : Baza{
int atribut_nou;
};
mostenire
constructor Baza
Derivat
86
apel explicit
:base(lista parametri)
87
class Baza{
};
Baza
};
Derivat
2010 Catalin Boja
88
UPCASTING
void main(){
Derivat d1 = new Derivat();
Baza b1;
Baza b2 = d1;
}
referinta Derivat
referinta Baza
X octeti: valori
null
referinta Baza
89
class Baza{
int Metoda1(int a){}
};
apel explicit metoda baza
class Derivat : Baza{
int atribut_nou;
int Metoda1(int a){}
int Metoda2(int a){ base.Metoda1(a);}
};
2010 Catalin Boja
90
91
functii VIRTUALE:
class Baza{
public virtual int Metoda1(int a){}
};
class Derivat : Baza{
int atribut_nou;
public [override | new ] int Metoda1(int a){}
};
2010 Catalin Boja
92
functii VIRTUALE:
versiunea functiei se stabileste la momentul
executiei (late binding) in functie de
modalitatea de redefinire (override vs new)
fiecare clasa contine o tabela de pointeri la
functii virtuale;
fiecare obiect primeste un pointer la tabela de
pointeri la functii virtuale
daca se realizeaza UPCASTING se apeleaza
metoda din clasa derivata pentru override si
metoda din clasa de baza pentru new
2010 Catalin Boja
93
-supradefinirea este permisa doar daca in clasa de baza metoda este anuntata
virtual, iar in clasa derivata este anuntata override;
public class Produs{
ProdusSpecial:Produs{
94
ProdusSpecial:Produs{
95
96
Mostenire vs Includere
class Vehicol{
};
se implementeaza
cand intre clasa
derivata si clasa
de baza exista
relatia is a;
};
2010 Catalin Boja
97
Mostenire vs Includere
class Motor{
};
class Automobil{
Motor motor;
};
se implementeaza
cand intre clasa
principala si cea
inclusa exista o
relatie has a;
2010 Catalin Boja
98
99
100
101
CLASE abstracte:
clase ce contin minim o functie virtuala pura
(abstracta);
rol de interfata pentru clase care trebuie sa
defineasca o serie de metode comune
un contract intre proprietarii mai multor clase
prin care se impune definirea unor serii de
metode comune;
contractul se incheie prin derivarea din clasa
abstracta;
2010 Catalin Boja
102
CLASE abstracte:
NU este permisa instantierea claselor
abstracte;
utilizate ca suport pentru derivare
abstract class Baza_abstracta{
int atribut1;
public abstract int Metoda1(int a);
};
void main(){
Baza_abstracta ba1;
Baza_abstracta ba1 = new Baza_abstracta;
}
2010 Catalin Boja
103
};
class Derivat : Baza { }
104
INTERFETE:
clase ce contin numai functii abstracte;
rol de interfata pentru clase care trebuie sa
defineasca o serie de metode comune
un contract intre proprietarii mai multor clase
prin care se impune definirea unor serii de
metode comune;
contractul se incheie prin derivarea din
interfata;
se definesc prin interface (inlocuieste class)
2010 Catalin Boja
105
INTERFETE:
interface class IOperatii {
void Operatie1( );
void Operatie2( );
};
supradefinire metode interfata
class Baza : IOperatii {
public void Operatie1() {}
public void Operatie2() {}
}
2010 Catalin Boja
106
Clase abstracte
contin metode
abstracte + atribute
+ metode neabstracte
o clasa poate deriva
doar o clasa de baza
(abstracta sau nu)
poate fi utilizata ca
VS
Interfete
reference type
107
int NrPuncte;
Punct * Puncte;
virtual double GetNrPuncte()=0;
Punct
Model2D
int X;
int Y;
Dreptunghi
Patrat
char * DenumireModel
Cerc
108
Arrays, Collections
Clase speciale (ArrayList / Stack / Queue /
HashTable)
Exemplu CallBack (amintire C++ cu
pointeri la functii)
Delegat
Eveniment
Forms
109
Collection Interfaces
IEnumerable
ICollection
IComparer IComparable
110
IEnumerable
ofera suport pentru operatorul foreach
foreach(tip_element element in colectie) {}
for(int i = 0;i< colectie.Count ;i++)
{
tip_element element = colectie[i]; }
111
IEnumerable
defineste metoda:
public IEnumerator GetEnumerator( )
IEnumerator
defineste metodele:
public object Current()
public bool MoveNext()
public void Reset()
Exemplu:
randomlist.cs si randomlist2.cs
2010 Catalin Boja
112
Collections:
Array
ArrayList
Queue
Stack
HashTable
ArrayProdus.cs
113
entitate 1
entitate 2
pointer functie
functie 1
date
pointer functie
functie 2
initializare
pointer functie
functie 1
date
functie 2
CALL functie
CALLBACK
functie 1
functie 2
REZULTAT
2010 Catalin Boja
114
DELEGATE
un nou tip de referinta in C#
delegate tip_return nume_referinta (lista
parametrii);
echivalent pointerului la functie din C++
tip_return (* nume_pointer) (lista parametrii);
faciliteaza definirea pointerilor la functii
nume_referinta pFunctie;
115
EVENT
reprezinta un vector/lista de delegati
(pointeri de functii)
event tip_delegate nume_event;
faciliteaza executia tututor functiilor printrun singur apel
nume_event([parametrii]);
116
EVENT
suporta operatorii aritmetici += si -= pentru
adaugare/stergere de delegati din eveniment
eveniment += new TipDelegate(metoda)
117
event receiver
118
119
STIVA
myFireAlarm
HEAP
FireAlarm
FireEvent
null
COD
120
myFireAlarm
myFireHandler
HEAP
FireAlarm
FireHandlerClass
FireEvent
nu are atribute
COD
FireHandlerClass. ExtinguishFire(object
sender, FireEventArgs fe)
Exemplu: DelegatEvenimentFire.cs
2010 Catalin Boja
121
using System;
using System.Windows.Forms;
using System.Drawing;
122
using System.Windows.Forms;
Controls.Add(bnclick);
}
private void bnclick_Click(object sender, EventArgs ev)
{}
}
123