Documente Academic
Documente Profesional
Documente Cultură
.NET
2
Cea mai importanta
componenta a
arhitecturii .NET
Ofera o plaftorma de
dezvoltare de aplicatii
aproape independenta
de limbaj
3
Contin codul IL, care pentru Windows insemna EXE si DLL-uri.
Assembly-urile sunt unitatile de dezvoltare, versionare si
securitate .NET.
Pot fi formate din unul sau mai multe fisiere, dar unul trebuie sa
contina manifestul (metadata) assembly-ului.
Numele complet al assembly-ului contine:
un text
versiunea
cultura
public key-ul: un sir de caractere generat cand assembly-ul este creat,
este o valorea care identifica in mod unic numere si continului
assembly-ului, precum si o chere privata cunoscuta numai de creatorul
assembly-ului. 2 assembly-uri cu acelasi public key sunt identice.
4
Informatii despre assembly:
tipuri
variabile
metode
5
cunoscuta si sub numele FCL (Framework Class
Library)
librarie cu tipuri disponibile toturor limbajelor ce
folosesc .net framework.
contine clase ce incapsuleaza metode pentru:
lucrul cu fisiere
interactiune cu baze de date
etc.
6
Contin data direct in ele.
Sunt memorate pe stiva.
Valori
Tipuri
de date
7
Predefinite
System.Int32 (int)
System.Double (double)
System.Byte (byte)
System.Char (char)
System.Boolean (bool)
System.DateTime
System.IntPtr – un tip a carui marime depinde de
platforma (adica de cantitatea de memorie adresabila de
platforma)
8
Definite de utilizator
Structuri: composite din valori, metode, proprietati
ex: Point
Point A = new Point(1,2);
9
struct Punct
{
int x;
int y;
public int Y
{
get {return y;}
set {y=value;}
}
}
10
Enumerari: grupari de simboluri cu o legatura
intre ele si cu valori fixe
enum Luna : int {Ianuarie, Februarie};
11
Contin adresa datei, nu data propriuzisa deci prin
asignarea unei referinte la alta NU se copie data,
se copie referinta, deci ambele referinte vor
pointa la acceasi zona de memorie.
12
struct Punct class Punct
{ {
int x; int x;
int y; int y;
13
Punct punct1 = new Punct(1,2);
Punct punct2 = punct1;
Console.WriteLine(punct1.getX() + “ “ + punct1.Y);
punct2.Y = 3;
Console.WriteLine(punct2.getX() + “ “ + punct2Y);
Output:
12
13
Daca schimbam struct cu class
Output:
13
13
14
Cateva tipuri din Framework
System.Object
System.String
System.Text.StringBuilder
System.Array
System.IO.Stream
System.Exception
15
String
string nume = “Ionel”;
nume += “Popescu”;
16
System.Text.StringBuilder
StringBuilder sb = new StringBuilder(30);
sb.Append(“Ionel”);
sb.Append(“Popescu”);
17
Array
int[] ar = {3 ,1, 2};
string[] siruri = {“ana”, “are”, “mere”};
Point[] puncte = new Point[100];
18
Stream-uri
La capitolul urmator .
19
Exceptii: evenimente care intrerup functionarea
normala a programului.
!Nu trebuie sa opreasca functionarea normala a
programului => trebuie prinse si tratate
Prinderea si tratarea : try – catch – finally
20
StreamReader sr = new StreamReader(“text.txt”);
try
{
Console.WriteLine(sr.ReadToEnd());
}
catch (Exception ex)
{
Console.WriteLine(“Eroare:”+ex.Message);
}
finally
{
sr.close
}
21
Clase
OOP
Mostenire Polimorfism
22
Clasa este o “macheta” sau un prototip dupa care
sunt create obiecte. Ea defineste caracteristicile
abstracte ale unui obiect(cum arata, ce culoare
are) si functiile pe care le are aceasta (ce gust
are).
Obiectul este deci o instantiere a unei clase.
Clasa in c# contine variabile, metode si
proprietati.
23
Proprietatile ofera o modalitate usoara si flexibila de acces la date private clasei,
folosite pentru a le citii scrie sau modifica.
class MyClass
{
private int x;
public int X
{
get
{
return x;
}
set
{
x = value;
}
}
} 24
Derivare
DVD
USB
Memory
Stick
25
UnitateDeStocare
Capacitate
Viteza
Culoare
Modalitate de interfatare cu calculatorul (SATA, PATA)
Rezistenta la impact
26
DVD
Numar de layere (dual layer, single layer)
+R/-R
27
Interfete: definesc un set comun de membri pe care toate clasele care folosesc interfata trebuie sa le
implementeze. Mai clar: un grup de metode fara implementare (doar prototip)
Ex:
interface IMessage
{
bool Send();
string Mesaj{get; set;}
}
class SMS:IMessage
{
string mesaj;
public bool Send()
{
return true;
}
29
Clase abstracte: clase asemanatoare cu
interfetele, dar pot contine implementare la
metode.
La fel ca si interfetele nu pot fi instantizate.
30
Inseamna capacitatea de a intelege sau folosii in
mod diferit acelasi obiect in functie de contextul
in care ne aflam.
In practica inseamna ca putem avea metode cu
acelasi nume care fac lucruri diferite.
31
Metodele, proprietatile si clasele in C# pot avea mai
multi modificatori de acces.
Clasele
public
internal -> interne altor clase, accesibile numai in acelasi
assembly
Metode si proprietati
public
private
protected
internal -> accesibile numai in acelasi assembly
32
Clase partiale: clase definite in mai multe fisiere:
ex form.Designer. Puneti partial
Clase generice: definim tipul lasand unele detalii
nespecificate.
Ex: List<int> = new List<int>();
Motive pt folosit generice: Se reduc erorile si se
creste performanta. Vom vorbi la un capitol
urmator mai in detaliu despre generice.
33
Functii delegate: Clasa care contine o referinta la o metoda. Mai clar un pointer la functie in C++, dar este
type safe.
34
Evenimente: un mesaj trimis de un obiect pentru a
semnala o actiune. Ex: apasarea butonului dreapta la
mouse este un eveniment.
Obiectul care declanseaza evenimentul: event
sender
Obiectul care receptioneaza si trateaza evenimentul:
event receiver
In comunicarea prin evenimente sender-ul nu stie
care este metoda care va receptiona si trata
evenimentul (pot fi una, mai multe si se pot schimba
aleator). Aici intervin functiile delegate.
35
Raspunderea la un eveniment:
private void button1_Click(object sender, EventArgs e)
{
//cod
}
versiunea 2
versiunea 1
tip1 tip1 v2
tip2 tip2 v2
38
double i=1.2;
int j = i;
C# impiedica in mod normal conversiile prin care
se pierd date
j = (int)i; -> OK -> se pierd date == narrowing
conversion => este nevoie de cast
i = j; -> OK -> nu se pierd date == widening
conversion
39
type.ToString();
transforma din orice in string
type.Parse();
Ex: int nr = int.Parse(“12121”);
transforma din string in tip
type.TryParse() , type.TryParseExact()
verifica daca se poate face conversia
System.Convert
Conversii intre tipuri care implementeaza IConvertible
40
Valoare Valoare
Referinta Referinta
Boxing Unboxing
41
Pentru implementare de conversi custom
cast
supraincarcam ToString, Parse
implementam IConvertible
implementam o clasa de tip TypeConverter (nu trebuie
la examenul de certificare )
42
Ex:
class Complex : IConvertible
{
double x;
double y;
Folosire:
Complex numar = new Complex(1,2);
bool notIsZero = Convert.ToBoolean(numar);
43
2
FileInfo
FIleSystemInfo
DirectoryInfo
45
Attributes
Full Name
FileSystemInfo
Name
Exists
46
FileInfo
Open (OpenRead,
Directory IsReadOnly DirectoryName CopyTo OpenWrite, Create
OpenText)
47
ex:
FileInfo file = new FileInfo(@”text.txt”);
file.CopyTo(“ion.txt”);
48
DirectoryInfo
49
ex:
aplicatia dir simplificita:
51
Path: manipularea unui path (deci si a unui nume
de fisier)
Ex: schimbarea extensiei.
Metode: ChangeExtension, GetExtension,
GetFileName … (toate statice)
52
Clasa FileSystemWatcher: monitorizeaza
directoarele
Proprietati: EnableRasingEvents, Filter,
IncludeSubdirectories, NotifyFilter, Path
Metode: WaitForChanged
Evenimente: Changed, Created, Deleted,
Renamed
53
FileStream
Stream-uri BufferedStream
GZipStream
54
Majoritatea operatiilor folosesc clasa File.
Aceasta e folosita la deschidere, inchidere,
operatii simple (verificarea existentei).
File creaza FileStream
putem scrie usor in FileStream cu StreamReader
si StreamWriter.
StreamReader si StreamWriter pot manipula
orice stream (incl. MemoryStream,
BufferedStream).
55
clasa File
Metode:
Copy
Create -> returneaza FileStream
CreateText -> returneaza StreamWriter
Move
Open -> returneaza FileStream
OpenText -> returneaza StreamReader
ReadAllBytes -> creaza un array de bytes din fisier
ReadAllLines -> creaza array de linii citite din fisier
ReadAllText -> un string mare
Write ---||---
Toate Read, Write operatii atomice
56
Clasa Directory este similara cu DirectoryInfo
57
Deschiderea unui fisier text:
FileStream file = File.Open(“file.txt”, FileMode.Open, FileAcces.Read);
enumerarea FileMode
Open
Append
Create
CreateNew
OpenOrCreate
Truncate
enumerarea FileAcces:
Read
Write
ReadWrite
58
StreamReader
Proprietati: BaseStream, CurrentEncoding,
EndOfStream
Metode: Close, Peek, Read, ReadBlock, ReadLine,
ReadToEnd
StreamWriter
Proprietati: BaseStream, Encoding, NewLine,
AutoFlush
Metode: Close, Write, WriteLine
59
Citire fisier text
StreamReader sr = new StreamReader(file);
string text = sr.ReadToEnd();
sr.Close();
Scriere fisier text
StreamWriter sw = new StreamWriter ();
sw.WriteLine(“ana are mere mari si frumoase”);
sw.Close();
60
StreamReader deriva din TextReader si
StreamWriter din TextWriter
TextReader, TextWriter sunt clase abstracte ce
reprezinta baza tuturor operatiilor de citire,
scriere text pe streamuri
Exista si StringReader si StringWriter. Acestea
functioneaza ca StreamReader respectiv Writer,
dar pe obiecte de tip string aflate in memorie
(asemanator cu un StringBuilder)
61
MemoryStream: Stream in memorie
Poate fi folosit de StreamReader,Writer exact ca un
FileStream
NU trebuie specificata cantitatea de memorie dorita
BufferedStream
Imbunatateste operatiile de scriere si citire folosind buffere
sunt construite din FileStream
ex: BufferedStream buff = new BufferedStream(file);
Poate fi folosit de StreamReader,Writer exact ca un
FileStream
62
Exista 2 tipuri: GZipStream, DeflateStream
Amandoua folosesc acelasi algoritm dar
GZipStream are header-ul mai mare deci va
putea fi despachetat de aplicatii ca
WinZip,WinRar, WinAce, etc.
Nu pot fi comprimate fisiere mai mari de 4GB
Folosibile exact ca si FileStream respectiv
MemoryStream
63
ex: Comprimare data cu un GZipStream
66
Folosim 2 clase:
IsolatedStorageFile: similar cu File
IsolatedStorageFileStream: similar cu FileStream
File IsolatedStorageFile
GetStore
Open (Machine, User for
Application, Assembly,
AppDomain)
67
clasa IsolatedStorageFile ofera metode de
management a spatiului de memorie obtinut:
CreateDirectory
DeleteDirectory
DeleteFile
GetDirectoryNames
GetFileNames
Remove
68
Creare store:
pas1: alegem ce fel de spatiu de stocare dorim (machine level, user level) si cui este
adresat (Assembly, AppDomain, Click-Once Application)
ex: IsolatedStorageFile machineStore =
IsoalatedStorageFile.GetMachineStoreForAssembly();
ex: IsolatedStorageFile userStore = IsoalatedStorageFile.GetUserStoreForAssembly();
Citire, scriere date in store:
citire: IsolatedStorageFileStream userStream = new
IsolatedStorageFileStream(“UserSettings.set”,FileMode.Create, userStore);
urmeaza citire normala, ca la orice stream (StreamReader … )
scriere: IsolatedStorageFileStream userStream = new
IsolatedStorageFileStream(“UserSettings.set”,FileMode.Open, userStore);
scriere ca la orice stream (StreamWriter … )
!Cand deschideri un fisier in un store NU se verifica existenta fisierelui (cum se
face la File cu .Exists). Pentru a face verificarea om folosi metoda
GetFileNames:
string[] files = userStore.GetFileNames(“UserSettings.set”)
if (files.Length == 0) // nu exista fisierul
Despre securatatea in IsolatedStorage vom vorbi la capitolul de securitate. 69
Faceti un program care sa monitorizeze un director pe
disc.
In momentul in care se vor crea in directorul respectiv
fisiere cu o anumita extensie programul vostru le va
sterge si va loga operatia (numele fisierului, ora si data
stergeri) in format text, iar fisierul va fi arhivat.
Fiecare utilizator din sistem va avea logul lui.
OBS:
Utilizatorul va putea specifica directorul care este monitorizat si
tipul de fisiere monitorizat.
Aplicatia nu are drepturi de scriere in directorul propriu, program
files, windows, in radacina discului
70