Académique Documents
Professionnel Documents
Culture Documents
SUPORT CURS
Metodologia de evaluare:
Examen la calculator curs (50%)
Lucrare la calculator seminar 15-19 Martie 2010 (25%)
Evaluare proiect in 2 faze (10%)
3 grile curs (15%)
Data si XML
=>
IL Interpreted Language
Procedura de asamblare csc.exe,
=>
vbc.exe, cl.exe
PE Portable Executable
(EXE sau DLL)
Assembly
Interpretat de CLR
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 9
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{ csc /t:library math.cs
public class BasicOp{ C#
public static double Add(double op1, double op2){
return op1 + op2; math.dll
}
public static double Multiply(double op1, double op2){
return op1 * op2;
}
Imports Math
}
}
Imports System
VB
Module MathTest
Sub Main()
1. Tipuri valorice
class BoxUnbox
{
static void Main()
STIVA HEAP
{
int i = 123; 4 octeti : 123
object Obiect = i referinta 4 octeti: 123
referinta 16 octeti: @ @ @ @
vectPers = new Pers[4] {p1,p2,p3,p4};
Pers p1
Pers p1
Pers p1
Pers p1
2010 Catalin Boja 21
SINTAXA: tip_data [ , ] nume_masiv;
catch(Exception e){}
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;
tip_acces functie membra1;
};
Limbajul C# NU permite
supraincarcarea
operatorului =
ob1.nume_proprietate = valoare;
valoare = ob1.nume_proprietate;
Exemplu: copy.cs
Shallow copy
referinta
a1 = a2
referinta X octeti: valori
class Test{
}; interpretare Test.operator+(t1,t2)
void main() (supraincarcare prin
{ functie statica)
Test t1, t2, t3;
t1 = t2 + t3;
}
2010 Catalin Boja 73
restrictii supraincarcare operatori:
NU schimba precedenta operatorilor
NU schimba asociativitatea
conserva cardinalitatea (numarul parametrilor)
NU creaza operatori noi
formele supraincarcate nu se compun automat
NU se supraincarca = . ?: -> new is sizeof
typeof [ ] ( ) += -=
+= este evaluat prin operatorul +
class Baza{
int atribut1;
int atribut2;
}; mostenire
class Derivat : Baza{
int atribut_nou;
};
2010 Catalin Boja 85
fiecare constructor este responsabil strict de zona
clasei pe care o reprezinta
constructor Baza
class Baza{
int atribut1;
int atribut2;
}; mostenire
Derivat
class Derivat : Baza{
int atribut_nou;
};
constructor Baza
2010 Catalin Boja 86
constructie obiect derivat = CONSTRUCTOR BAZA +
CONSTRUCTOR DERIVAT
class Baza{
Baza(){}
apel implicit Baza()
Baza(lista parametri){}
};
apel explicit
class Derivat : Baza{ :base(lista parametri)
Derivat(){};
SAU
Derivat() : base (lista parametri) {}
}; 2010 Catalin Boja 87
UPCASTING este permisa transformarea
implicita a obiectelor (referinte in C#) derivat
in obiecte (referinte) de tip baza
class Baza{
Baza
};
X
class Derivat : Baza{
Derivat
};
2010 Catalin Boja 88
UPCASTING
void main(){
Derivat d1 = new Derivat(); referinta Derivat X octeti: valori
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
UPCASTING + redefinire metode (nevirtuale)
void main(){
Derivat d1 = new Derivat()
class Baza{
public virtual int Metoda1(int a){}
};
public virtual double PretProducator(){
public override double PretProducator(){
return _cost*(1+_profit/100);
double pret = base.PretProducator();
}
return pret*(1-_discount/100);
}
}
}
// evidentiere late-binding
Produs RP=ps;
Console.WriteLine(" Pretul de producator al produsului special este {0}", RP.PretProducator());
// evidentiere early-binding
Produs RP=ps;
Console.WriteLine(" Pretul de producator al produsului special este {0}", RP.PretProducator());
class Motor{
se implementeaza
}; cand intre clasa
principala si cea
class Automobil{ inclusa exista o
Motor motor; relatie has a;
};
2010 Catalin Boja 98
-operatorul is este utilizat pentru a testa daca un obiect reprezinta instanta
a unei anumite clase;
-operatorul as face conversie de la obiect de baza la obiect derivat; daca
conversia nu poate avea loc returneaza null;
-conversia obiect baza la obiect derivat se face si prin cast; daca conversia
nu poate avea loc se returneaza System.InvalidCastException
Dreptunghi Cerc
Patrat
char * DenumireModel 2010 Catalin Boja 108
Arrays, Collections
Clase speciale (ArrayList / Stack / Queue /
HashTable)
Exemplu CallBack (amintire C++ cu
pointeri la functii)
Delegat
Eveniment
Forms
initializare
pointer functie 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;
prelucrare
lansare (raise) event (handle)
event
event sender event receiver
STIVA HEAP
COD
STIVA HEAP
myFireHandler FireHandlerClass -
nu are atribute
public Formular2(){
Text = "Test Formular";
Size = new Size(400,400);
Controls.Add(bnclick);
}
private void bnclick_Click(object sender, EventArgs ev) abonare la event-ul Click al
{} clasei Button
}