Introducere in .Net Framework.pdf
Transcript of Introducere in .Net Framework.pdf
-
7/22/2019 Introducere in .Net Framework.pdf
1/112
Suport de curs pentru elevi
.Net Framework
Introducere n
Autori, n ordine alfabetic:
Adrian Ni
profesor, Colegiul Naional Emanuil Gojdu, Oradea
Maria Ni
profesor, Colegiul Naional Emanuil Gojdu, Oradea
Nicolae Olroiu
profesor, Colegiul Naional B.P. Hadeu, BuzuRodica Pintea
profesor, Liceul Grigore Moisil, Bucureti (capitolul 1)
Cristina Sichim
profesor, Colegiul Naional Ferdinand I, Bacu
Daniela Taras
Inspector Informatic, ISJ Bacu
Coordonatori:
Mihai Ttran
cadru didactic asociat, Universitatea Politehnic Timioara
Nua Dumitriu-Lupan
inspector General MECT
Petru Jucovschi
Developer Community Lead, Microsoft Romnia
Ediia 2008
-
7/22/2019 Introducere in .Net Framework.pdf
2/112
Cerine de sistem
Arhitectura suportat: x86
x64 (WOW)
Sistem de operare suportat:
Microsoft Windows XP
Microsoft Windows Server 2003
Windows Vista
Cerine Hardware:
Minimum: CPU 1.6 GHz, RAM 192 MB, Rezoluie Monitor 1024x768, Disc 5400 RPM
Recomandat: CPU 2.2 GHz sau mai puternic, RAM 384 MB sau mai mult, rezoluie monitor 1280x1024,
Disc 7200 RPM sau mai mult.
Windows Vista: CPU 2.4 GHz, RAM 768 MB, Spaiu liber disc 1.3 GB pentru instalare complet
Resurse i Instrumente:
www.microsoft.ro/ark - Academic Resource Kit, colecie de instrumente software i resurse
educaionale.
-
7/22/2019 Introducere in .Net Framework.pdf
3/112
Cuvnt nainte
Dragi elevi,
Introducere n .NET Framework este un curs dezvoltat n cadrul programului
Microsoft Parteneri pentru Educaie, n colaborare cu un grup de profesori de infor-matic din Romnia. Pn la sfritul anului colar 2007-2008 va fi disponibil n pesitul Microsoft Romnia, n pagina Seciuni pentru educaie.
Cursul v propune s explorai tehnologia .NET, cea mai rspndit platform deaplicaii software. Avei posibilitatea s studiai soluii software i s dezvoltaiaplicaii ce pot fi trimise la concursuri sau pot fi integrate n proiecte educaionale.
Suportul de curs este publicat n dou versiuni. Cea pentru elevi cuprinde doar com-ponenta de specialitate. Versiunea pentru profesori cuprinde pe lng componentade specialitate i pe cea metodic de predare.
Suportul de curs poate fi descrcat gratuit i folosit exclusiv n procesul educaional.
Scopul acestei iniiative a programului Parteneri pentru Educaieeste de a ncurajadezvoltarea profesional a profesorilor i de a da un suflu nou experieneieducaionale la materia Informatic.
mpreun cu partenerii, echipa Microsoft Romnia v mulumete pentru interesulpentru studiul tehnologiei .Net.
Sperm dragi elevi, s v dezvoltai potenialul tehnic i creativ pentru a deveni
competitivi dup absolvirea liceului.
Sanda Foamete
SNR Manager de Proiecte EducaionaleMicrosoft Romnia
-
7/22/2019 Introducere in .Net Framework.pdf
4/112
Autori, n ordine alfabetic:
Adrian Ni, profesor, Colegiul Naional Emanuil Gojdu, Oradea
Maria Ni, profesor, Colegiul Naional Emanuil Gojdu, Oradea
Nicolae Olroiu, profesor Colegiul Naional B.P. Hadeu, Buzu
Rodica Pintea, profesor, Liceul Grigore Moisil, Bucureti (capitolul 1)
Cristina Sichim, profesor, Colegiul Naional Ferdinand I, Bacu
Daniela Taras, Inspector Informatic, ISJ Bacu
Coordonatori:
Mihai Ttran, cadru didactic asociat, Universitatea Politehnica din Timioara
Nua Dumitriu-Lupan, Inspector General MECT
Petru Jucovschi, Developer Community Lead, Microsoft Romnia
Formatul electronic al textului digital: PDF
Editat de BYBLOS SRL sub coordonarea Agora Media SA, pentru Microsoft Romnia. Ediia 2008.
ISBN: 973-86699-5-2
Not:Acest suport de curs este destinat elevilor de la clasele matematic-informatic i matematic-informaticintensiv, care au optat n programa colar, pentru variantele: Programare orientat obiect, Progamarevizual cu C# i Programare web cu Asp.Net. Suportul de curs poate fi utilizat gratuit exclusiv n procesulde predare-nvare. Este interzis utilizarea suportului de curs Introducere n .Net Framework pentruscopuri comerciale sau n alte scopuri n afara celui descris mai sus.Drepturile de autor asupra suportului de curs Introducere n .Net Frameworkaparin Microsoft.
-
7/22/2019 Introducere in .Net Framework.pdf
5/112
CUPRINS
1 Programarea Orientat Obiect (POO) cu C# . . . . . . . . . . . . . . . . . . . . . . . . . . . .7
1.1. Evoluia tehnicilor de programare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7
1.2. Tipuri de date obiectuale. ncapsulare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .8
1.3. Suprancrcare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9
1.4. Motenire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10
1.5. Polimorfism. Metode virtuale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10
1.6. Programare orientat obiect n C# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .11
1.7. Declararea unei clase . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .11
1.8. Constructori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .12
1.9. Destructor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .14
1.10. Metode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .14
1.11. Proprieti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .16
1.12. Evenimente i delegri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .17
1.13. Interfee . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .19
2. Platforma .NET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .21
2.1. Prezentare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .21
2.2. Compilarea programelor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .22
2.3. De ce am alege .NET? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .23
3. Limbajul C# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .25
3.1. Caracterizare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .25
3.2. Compilarea la linia de comand . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .25
3.3. Crearea aplicaiilor consol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .26
3.4. Structura unui program C# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .27
3.5. Sintaxa limbajului . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .28
3.6. Tipuri de date . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .30
3.7. Conversii . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .34
3.7.1. Conversii numerice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .34
3.7.2. Conversii ntre numere i iruri de caractere . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .36
3.7.3. Conversii boxing i unboxing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .38
3.8. Constante . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .39
3.9. Variabile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .39
3.10. Expresii i operatori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .393.11. Instruciuni condiionale, de iteraie i de control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .40
3.11.1. Instruciunea if . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .40
Introducere n .Net Framework (Suport de curs) 3
-
7/22/2019 Introducere in .Net Framework.pdf
6/112
4 Introducere n .Net Framework (Suport de curs)
3.11.2. Instruciunea while . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .40
3.11.3. Instruciunea do while . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .41
3.11.4. Instruciunea for . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .42
3.11.5. Instruciunea switch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .42
3.11.6. Instruciunea foreach . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .43
3.11.7. Instruciunea break . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .43
3.11.8. Instruciunea continue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .43
3.11.9. Instruciunea goto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .44
3.12. Instruciunile try-catch-finally i throw . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .45
4. Programarea web cu ASP.NET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .47
4.1. Introducere . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .47
4.2. Structura unei pagini ASP.NET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .48
4.3. Controale Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .50
4.4. Pastrarea informatiilor in aplicatiile web . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .51
4.4.1. Pastrarea starii controalelor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .51
4.4.2. Pastrarea altor informatii . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .52
4.4.2.1. Profile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .52
4.4.2.2. Session . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .53
4.4.2.3. Application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .53
4.4.2.3. Membrii statici . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .54
4.4.3. Concluzii . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .54
4.5. Validarea datelor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .544.5.1. Proprietati comune . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .54
4.5.2. Validatoare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .55
4.6. Securitatea n ASP.NET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .55
4.6.1. Windows Authentication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .56
4.6.2. Forms-Based Authentication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .56
4.6.3. Securizarea unei aplicaii web . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .56
4.7. Accesul la o baza de date intr-o pagina web . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .57
4.8. Resurse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .57
5. Programare vizual . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .59
5.1. Concepte de baz ale programrii vizuale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .59
5.2. Mediul de dezvoltare Visual C# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .61
5.3. Ferestre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .62
5.4. Controale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .64
5.4.1. Controale form . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .65
5.4.2. Proprieti comune ale controalelor i formularelor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .65
5.4.3. Cteva dintre metodele i evenimentele Form . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .66
5.5. System.Drawing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .865.6. Validarea informaiilor de la utilizator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .87
-
7/22/2019 Introducere in .Net Framework.pdf
7/112
6. ADO.NET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .89
6.1. Arhitectura ADO.NET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .90
6.2. Furnizori de date (Data Providers) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .90
6.3. Connection. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .90
6.3.1. Exemple de conectare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .91
6.3.2. Proprieti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .91
6.3.3. Metode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .92
6.3.4. Evenimente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .92
6.4. Command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .92
6.4.1. Proprieti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .93
6.4.2. Metode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .93
6.4.3. Interogarea datelor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .95
6.4.4. Inserarea datelor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .95
6.4.5. Actualizarea datelor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .956.4.6. tergerea datelor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .96
6.5. DataReader . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .99
6.5.1. Proprieti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .99
6.5.2. Metode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .99
6.6. DataAdapter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .101
6.6.1. Proprieti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .102
6.6.2. Metode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .102
6.7. DataSet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .102
6.8. SqlParameter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1046.9. Proceduri Stocate (Stored Procedures) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .105
6.10. Proiectarea vizual a seturilor de date . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .106
Introducere n .Net Framework (Suport de curs) 5
-
7/22/2019 Introducere in .Net Framework.pdf
8/112
-
7/22/2019 Introducere in .Net Framework.pdf
9/112
CAPITOLUL1Programarea Orientat Obiect (POO) cu C#
1.1 Evolutia tehnicilor de programare Programarea nestructurat (un program simplu, ce utilizeaz numai variabile
globale); complicaiile apar cnd prelucrarea devine mai ampl, iar datele se multi-plic i se diversific.
Programarea procedural (program principal deservit de subprograme cu para-metri formali, variabile locale i apeluri cu parametri efectivi); se obin avantajeprivind depanarea i reutilizarea codului i se aplic noi tehnici privind transferulparametrilor i vizibilitatea variabilelor; complicaiile apar atunci cnd la programsunt asignai doi sau mai muli programatori care nu pot lucra simultan pe un acelai
fiier ce conine codul surs. Programarea modular (gruparea subprogramelor cu funcionaliti similare n
module, implementate i depanate separat); se obin avantaje privind independena incapsularea (prin separarea zonei de implementare, pstrnd vizibilitatea numai asuprazonei de interfa a modulului) i se aplic tehnici de asociere a procedurilor cu datelepe care le manevreaz, stabilind i diferite reguli de acces la date i la subprograme.
Se observ c modulele sunt centrate pe proceduri, acestea gestionnd i setulde date pe care le prelucreaz (date+date1 din figur). Daca, de exemplu, dorim savem mai multe seturi diferite de date, toate nzestrate comportamental cu proce-durile din modulul module1, aceast arhitectur de aplicaie nu este avantajoas.
Programarea orientat obiect (programe cu noi tipurice integreaz att datele,ct i metodele asociate crerii, prelucrrii i distrugerii acestor date); se obin avan-taje prin abstractizarea programrii (programul nu mai este o succesiune deprelucrri, ci un ansamblu de obiecte care prind via, au diverse proprieti, sunt
7
-
7/22/2019 Introducere in .Net Framework.pdf
10/112
capabile de aciuni specifice i care interacioneaz n cadrul programului); intervintehnici noi privind instanierea, derivarea i polimorfismul tipurilor obiectuale.
1. 2 Tipuri de date obiectuale. ncapsulare
Un tip de date abstract (ADT) este o entitate caracterizat printr-o structur de datei un ansamblu de operaiiaplicabile acestor date. Considernd, n rezolvarea uneiprobleme de gestiune a accesului utilizatorilor la un anumit site, tipul abstract USER,vom obseva c sunt multe date ce caracterizeaz un utilizator Internet. Totui se vaine cont doar de datele semnificative pentru problema dat. Astfel, culoareaochilor este irelevant n acest caz, n timp ce data naterii poate fi important. naceeai idee, operaii specifice ca se nregistreaz, comand on-line pot fi rele-vante, n timp ce operaia mannc nu este, n cazul nostru. Evident, nici nu se punn discuie date sau operaii nespecifice (numrul de laturi sau aciunea zboar).
Operaiile care sunt accesibile din afara entitii formeaz interfaa acesteia. Astfel,operaii interne cum ar fi conversia datei de natere la un numr standard calculat dela 01.01.1900 nu fac parte din interfaa tipului de date abstract, n timp ce operaiaplaseaz o comand on-line face parte, deoarece permite interaciunea cu alteobiecte (SITE, STOC etc.)
O instana unui tip de date abstract este o concretizare a tipului respectiv, for-mat din valori efective ale datelor.
Un tip de date obiectual este un tip de date care implementeaz un tip de dateabstract. Vom numi operaiile implementate n cadrul tipului de date abstract metode.
Spunem c datele i metodele sunt membriiunui tip de date obiectual. Folosirea unuiastfel de tip presupune: existena definiiei acestuia, apelul metodelor i accesul la date.
Un exemplu de-acum clasic de tip de date abstract este STIVA. Ea poate avea ca date:numerele naturale din stiv, capacitatea stivei, vrful etc. Iar operaiile specifice pot fi:introducerea n stiv (push) i extragerea din stiv (pop). La implementarea tipului STIVA,vom defini o structura de date care s rein valorile memorate n stiv i cmpuri de datesimple pentru: capacitate, numr de elemente etc. Vom mai defini metode (subpro-grame) capabile s creeze o stiv vid, care s introduc o valoare n stiv, s extrag va-loarea din vrful stivei, s testeze dac stiva este vid sau dac stiva este plin etc.
Crearea unei instane noi a unui tip obiectual, presupune operaii specifice deconstruire a noului obiect, metoda corespunztoare purtnd numele deconstructor. Analog, la desfiinarea unei instane i eliberarea spaiului de memorie
8 Introducere n .Net Framework (Suport de curs)
-
7/22/2019 Introducere in .Net Framework.pdf
11/112
aferent datelor sale, se aplic o metod specific numit destructor1.O aplicaie ce utilizeaz tipul obiectual STIVA, va putea construi dou sau mai
multe stive (de cri de joc, de exemplu), le va umple cu valori distincte, va muta va-lori dintr-o stiv n alta dup o anumit regul desfiinnd orice stiv golit, pn ce
rmne o singur stiv. De observat c toate aceste prelucrri recurg la datele, con-structorul, destructorul i la metodele din interfaa tipului STIVA descris mai sus.
Principalul tip obiectual ntlnit n majoritatea mediilor de dezvoltare (ViisualBasic, Delphi, C++, Java, C#) poart numele de clas (class). Exist i alte tipuri obiec-tuale (struct, object). O instan a unui tip obiectual poart numele de obiect.
La implementare, datele i metodele asociate trebuie s fie complet i corect de-finite, astfel nct utilizatorul s nu fie nevoit s in cont de detalii ale acestei imple-mentri. El va accesa datele, prin intermediul proprietilor i va efectua operaiile,prin intermediul metodelor puse la dispoziie de tipul obiectual definit. Spunem c
tipurile de date obiectuale respect principiul ncapsulrii. Astfel, programatorul ceutilizeaz un tip obiectual CONT (n banc) nu trebuie s poarte grija modului cumsunt reprezentate n memorie datele referitoare la un cont sau a algoritmului princare se realizeaz actualizarea soldului conform operaiilor de depunere, extragere iaplicare a dobnzilor. EL va utiliza unul sau mai multe conturi (instane ale tipuluiCONT), accesnd proprietile i metodele din interfa, realizatorul tipului obiectualasumndu-i acele griji n momentul definirii tipului CONT.
Permind extensia tipurilor de date abstracte, clasele pot avea la implementare: date i metode caracterisitice fiecrui obiect din clas (membri de tip instan),
date i metode specifice clasei (membri de tip clas).Astfel, clasa STIVA poate beneficia, n plus, i de date ale clasei cum ar fi: numrul
de stive generate, numrul maxim sau numrul minim de componente ale stivelorexistente etc. Modificatorul static plasat la definirea unui membru al clasei face caacela s fie un membru de clas, nu unul de tip instan. Dac n cazul membrilornestatici, exist cte un exemplar al membrului respectiv pentru fiecare instan a cla-sei, membrii statici sunt unici, fiind accesai n comun de toate instanele clasei. Maimult, membrii statici pot fi referii chiar i fr a crea vreo instan a clasei respective.
1.3. SuprancrcareDei nu este o tehnic specific programrii orientat obiect, ea creeaz un anu-
mit context pentru metodele ce formeaz o clas i modul n care acestea pot fi (caorice subprogram) apelate.
Prin suprancarcare se nelege posibilitatea de a defini n acelai domeniu devizibilitate2 mai multe funcii cu acelai nume, dar cu parametri diferiti ca tip i/sau canumr. Astfel ansamblul format din numele funciei i lista sa de parametri reprezin-t o modalitate unic de identificare numit semntur sau amprent. Supra-
CAPITOLUL 1. Programarea orientat obiect (POO) cu C# 9
1 Datorit tehnicii de suprancrcare C++, Java i C# permit existena mai multor constructori2 Noiunile generale legate de vizibilitate se consider cunoscute din programarea procedural. Aspectele specificei modificatorii de acces/vizibilitate pot fi studiai din documentaiile de referin C#.
-
7/22/2019 Introducere in .Net Framework.pdf
12/112
ncrcarea permite obinerea unor efecte diferite ale apelului n contexte diferite3.Apelul unei funcii care beneficiaz, prin suprancrcare, de dou sau mai multe
semnturi se realizeaz prin selecia funciei a crei semntur se potrivete cel maibine cu lista de parametri efectivi (de la apel).
Astfel, poate fi definit metoda comand on-line cu trei semnturi diferite:comanda_online(cod_prod) cu un parametru ntreg (desemnnd comanda unui singur
produs identificat prin cod_prod.comanda_online(cod_prod,cantitate)cu primul parametru ntreg i celalalt realcomanda_online(cod_prod,calitate)cu primul parametru ntreg i al-II-lea caracter.
1.4. Motenire
Pentru tipurile de date obiectuale classeste posibil o operaie de extindere sau
specializare a comportamentului unei clase existente prin definirea unei clase noi cemotenete datele i metodele clasei de baz, cu aceast ocazie putnd fi redefiniiunii membri existeni sau adugai unii membri noi. Operaia mai poart numele dederivare.
Clasa din care se motenetea se mai numete clas de bazsau superclas. Clasacare motenete se numete subclas, clas derivat sau clas descendent.
Ca i n Java, n C# o subclas poate moteni de la o singur superclas, adic avemde-a face cu motenire simpl; aceeai superclas ns poate fi derivat n mai multesubclase distincte. O subclas, la randul ei, poate fi superclas pentru o alt clasderivat. O clas de baz impreun cu toate clasele descendente (direct sau indirect)formeaza o ierarhie de clase. n C#, toate clasele motenesc de la clasa de baz Object.
n contextul mecanismelor de motenire trebuie amintii modificatorii abstract isealed aplicai unei clase, modificatori ce oblig la i respectiv se opun procesului dederivare. Astfel, o clas abstract trebuie obligatoriu derivat, deoarece direct din eanu se pot obine obiecte prin operaia de instaniere, n timp ce o clas sigilat(sealed) nu mai poate fi derivat (e un fel de terminal n ierarhia claselor). O metodabstract este o metod pentru care nu este definit o implementare, aceasta urmnda fi realizat n clasele derivate din clasa curent4. O metod sigilat nu mai poate firedefinit n clasele derivate din clasa curent.
1.5. Polimorfism. Metode virtuale
Folosind o extensie a sensului etimologic, un obiect polimorfic este cel capabil sia diferite forme, s se afle n diferite stri, s aib comportamente diferite.Polimorfismul obiectual5 se manifest n lucrul cu obiecte din clase aparinnd uneiierarhii de clase, unde, prin redefinirea unor date sau metode, se obin membri dife-
10 Introducere n .Net Framework (Suport de curs)
3 Capacitatea unor limbaje (este i cazul limbajului C#) de a folosi ca "nume" al unui subprogram un operator, repre-zint suprancrcarea operatorilor. Aceasta este o facilitate care "reduce" diferenele dintre operarea la nivel abstract
(cu DTA) i apelul metodei ce realizeaz acest operaie la nivel de implementare obiectual. Dei ajut la sporireaexpresivitii codului, prin suprancrcarea operatorilor i metodelor se pot crea i confuzii.4 care trebuie s fie i ea abstract (virtual pur, conform terminologiei din C++)5 deoarece tot aspecte polimorfice mbrac i unele tehnici din programarea clasic sau tehnica suprancrcrcriifunciilor i operatorilor.
-
7/22/2019 Introducere in .Net Framework.pdf
13/112
rii avnd ns acelai nume. Astfel, n cazul unei referiri obiectuale, se pune problemastabilirii datei sau metodei referite. Comportamentul polimorfic este un element deflexibilitate care permite stabilirea contextual, n mod dinamic6, a membrului referit.
De exemplu, dac este definit clasa numit PIESA (de ah), cu metoda nestaticmuta(pozitie_initiala,pozitie_finala), atunci subclasele TURN i PION trebuie saib metoda muta definit n mod diferit (pentru a implementa maniera specific apionului de a captura o pies en passant7). Atunci, pentru un obiect T, aparinndclaselor derivate din PIESA, referirea la metoda muta pare nedefinit. Totui mecanis-mele POO permit stabilirea, n momentul apelului, a clasei proxime creia i aparineobiectul T i apelarea metodei corespunztore (mutare de pion sau tur sau altpies).
Pentru a permite acest mecanism, metodele care necesit o decizie contextual (nmomentul apelului), se declar ca metode virtuale (cu modificatorul virtual). n mod
curent, n C# modificatorului virtual al funciei din clasa de baz, i corespunde unspecificator override al funciei din clasa derivat ce redefinete funcia din clasa debaz.
O metod ne-virtual nu este polimorfic i, indiferent de clasa creia i aparineobiectul, va fi invocat metoda din clasa de baz.
1.6. Programare orientat obiect n C#
C# permite utilizarea OOP respectnd toate principiile enunate anterior.Toate componentele limbajului sunt ntr-un fel sau altul, asociate noiunii de clas.
Programul nsui este o clas avnd metoda static Main() ca punct de intrare, clasce nu se instaniaz. Chiar i tipurile predefinite byte, int sau bool sunt clase sigilatederivate din clasa ValueType din spaiul System. Pentru a evita unele tehnici de progra-mare periculoase, limbajul ofer tipuri speciale cum ar fi: interfee i delegri.Versiunii 2.0 a limbajului i s-a adugat un nou tip: clasele generice8,
1.7. Declararea unei clase
Sintaxa9: [atrib]o[modificatori]oclass [nume_clas][:clasa_de_baz]o [corp_clas]o
Atributele reprezint informaii declarative cu privire la entitatea definit.Modificatorii reprezint o secven de cuvinte cheie dintre: public protected internalprivate (modificatori de acces) new abstract sealed (modificatori de motenire)
Clasa de baz este clasa de la care motenete clasa curent i poate exista o sin-gur astfel de clas de baz. Corpul clasei este un bloc de declarri ale membrilorclasei: constante(valori asociate clasei), cmpuri(variabile), tipuride date definite de
CAPITOLUL 1. Programarea orientat obiect (POO) cu C# 11
6 Este posibil doar n cazul limbajelor ce permit "legarea ntrziat". La limbajele cu "legare timpurie", adresa la carese face un apel al unui subprogram se stabilete la compilare. La limbajele cu legare ntrziat, aceast adresa se sta-
bileste doar in momentul rulrii, putndu-se calcula distinct, n funcie de contextul n care apare apelul.7ntr-o alt concepie, metoda muta poate fi implementat la nivelul clasei PIESA i redefinit la nivelul subclaseiPION, pentru a particulariza acest tip de deplasare care captureaz piesa peste care trece pionul n diagonal.8 echivalentrul claselor template din C++9 [] din definiia schematic semnific un neterminal, iar o semnific o component opional
-
7/22/2019 Introducere in .Net Framework.pdf
14/112
utilizator, metode(subprograme), constructori, un destructor, proprieti(caracteris-tici ce pot fi consultate sau setate), evenimente(instrumente de semnalizare), inde-xatori(ce permit indexarea instanelor din cadrul clasei respective) i operatori.
constructorii i destructorul au ca nume numele clasei proxime din care fac
parte10
metodele au nume care nu coincid cu numele clasei sau al altor membri (cuexcepia metodelor, conform mecanismului de suprancrcare)
metodele sau constructorii care au acelai nume trebuie s difere prin semn-tur11
se pot defini date i metode statice (caracteristice clasei) i un constructor staticcare se execut la iniializarea clasei propriu-zise; ele formeaz un fel de con-text al clasei
se pot defini date i metode nestatice (de instan) care se multiplic pentru
fiecare instan n parte n cadrul operaiei de instaniere; ele formeaz contex-tele tuturor instanelor clasei respective
Exemplul urmtor definete o ierarhie de clase (conform figurii alturate)public abstract class Copil { }
public class Fetita: Copil { }
public sealed class Baiat: Copil { }
Modificatorul abstract este folosit pentru a desemna faptul c nu se pot obineobiecte din clasa Copil, ci numai din derivatele acesteia (Fetita, Baiat), iar modifica-torul sealed a fost folosit pentru a desemna faptul c nu se mai pot obtine clasederivate din clasa Baiat (de exemplu, subclasele Baiat_cuminte i Baiat_rau)
1.8. Constructori
Sintaxa:
[atrib]o[modificatori]o[nume_clas]([list_param_formali]o)[:iniializator]o [corp_constr]oModificatori: public protected internal private externIniializator: base([list_param]o), this([list_param]o) ce permite invocarea unui
constructor anume12 nainte de executarea instruciunilor ce formeaz corpul con-structorului curent. Dac nu este precizat niciun iniializator, se asociaz implicitiniializatorul base().
Corpul constructorului este format din instruciuni care se execut la crearea unui
12 Introducere n .Net Framework (Suport de curs)
10 avnd n vedere c ele pot s fac parte dintr-o clas interioar altei clase11 din semntur nefcnd parte specificatorii ref i out asociai parametrilor12 Din clasa de baz (base) sau din clasa insi (this)
-
7/22/2019 Introducere in .Net Framework.pdf
15/112
nou obiect al clasei respective (sau la crearea clasei, n cazul constructorilor cu mo-dificatorul static).
pot exista mai muli constructori care se pot diferenia prin lista lor de parametri constructorii nu pot fi motenii dac o clas nu are definit niciun constructor, se va asigna automat constructorul
fr parametri al clasei de baz (clasa object, dac nu este precizat clasa de baz)Instanierea presupune declararea unei variabile de tipul clasei respective i
iniializarea acesteia prin apelul constructorului clasei (unul dintre ei, dac suntdefinii mai muli) precedat de operatorul new. Acestea se pot realiza i simultan ntr-oinstruciune de felul:
[Nume_clas] [nume_obiect]=new[Nume_clas] ([list_param]o)
Utilizarea unui constructor fr parametri i a constructorului implicit n clas
derivat
public abstract class Copil
{ protected string nume;
public Copil() {nume = Console.ReadLine();} //la iniializarea obiectului secitete
//de la tastatur un ir de caractere ce va reprezenta numele copilului}
class Fetita:Copil {}
...
Fetita f=new Fetita();Copil c= new Copil(); //Pentru clasa Copil abstract, s-ar fi obinut eroare aici
Suprancrcarea constructorilor i definirea explicit a constructorilor n clasederivate
public class Copil
{ protected string nume; //dat accesibil numai n interiorul clasei iclaselor derivate
public Copil() {nume = Console.ReadLine();}
public Copil(string s) {nume=s;}
}class Fetita:Copil
{ public Fetita(string s):base(s) {nume=Fetita +nume}13
public Fetita(){} //preia constructorul fr parametri din clasa de baz14
//public Fetita(string s):base() {nume=s}
}
...
Copil c1= new Copil(); //se citeste numele de la tastaturCopil c2= new Copil(Codrina);
Fetita f1=new Fetita();Fetita f2=new Fetita(Ioana);
CAPITOLUL 1. Programarea orientat obiect (POO) cu C# 13
13 Preia i specializeaz constructorul al doilea din clasa de baz14 Este echivalent cu public Fetita():base(){}
-
7/22/2019 Introducere in .Net Framework.pdf
16/112
Exist dou motive pentru care definiia constructorului al treilea din clasa Fetitaeste greit i de aceea este comentat. Care sunt aceste motive?
1.9. Destructor
Sintaxa: [atrib]o [extern]o~[nume_clas] () [corp_destructor]oCorpul destructorului este format din instruciuni care se execut la distrugerea
unui obiect al clasei respective. Pentru orice clas poate fi definit un singur construc-tor. Destructorii nu pot fi motenii. n mod normal, destructorul nu este apelat nmod explicit, deoarece procesul de distrugere a unui obiect este invocat i gestionatautomat de Garbagge Collector.
1.10. MetodeSintaxa:[atrib]o[modificatori]o[tip_returnat][nume]([list_param_formali]o) [corp_metoda]oModificatori: new public protected internal private static virtual abstract sealed
override extern15
Tipul rezultat poate fi un tip definit sau void. Numele poate fi un simplu identifica-tor sau, n cazul n care definete n mod explicit un membru al unei interfee, numeleeste de forma [nume_interfata].[nume_metoda]
Lista de parametri formali este o succesiune de declarri desprite prin virgule,declararea unui parametru avnd sintaxa: [atrib]
o[modificator]
o[tip] [nume]
Modificatorul unui parametru poate fi ref (parametru de intrare i ieire) sau out(parametru care este numai de ieire). Parametrii care nu au niciun modificator suntparametri de intrare.
Un parametru formal special este parametrul tablou cu sintaxa:[atrib]o params [tip][] [nume].Pentru metodele abstracte i externe, corpul metodei se poate reduce la un semn ;Semntura fiecrei metode este format din numele metodei, modificatorii aces-
teia, numrul i tipul parametrilor16
Numele metodei trebuie s difere de numele oricrui alt membru care nu este
metod.La apelul metodei, orice parametru trebuie s aib acelai modificator ca la definireInvocarea unei metode se realizeaz prin sintagma [nume_obiect].[nume_metoda]
(pentru metodele nestatice) i respectiv [nume_clas].[nume_metoda] (pentrumetodele statice).
Definirea datelor i metodelor statice corespunztoare unei clase
14 Introducere n .Net Framework (Suport de curs)
15 Poate fi folosit cel mult unul dintre modificatorii static, virtual I override ; nu pot aprea mpreun new i over-ride, abstract nu poate s apar cu niciunul dintre static, virtual, sealed, extern; private nu poate s apar cu niciunuldintre virtual, override i abstract; seald oblig i la override16 Din semntur (amprent) nu fac parte tipul returnat, numele parametrilor formali i nici specificatorii ref i out.
-
7/22/2019 Introducere in .Net Framework.pdf
17/112
public class Copil
{ public const int nr_max = 5; //constant
public static int nr_copii=0; //cmp simplu (variabil)
static Copil[] copii=new Copil[nr_max]; //cmp de tip tablou (variabil)
public static void adaug_copil(Copil c) //metod{ copii[nr_copii++] = c;
if (nr_copii==nr_max) throw new Exception(Prea multi copii);
}
public static void afisare() //metod
{
Console.WriteLine(Sunt {0} copii:, nr_copii);
for (int i = 0; i
-
7/22/2019 Introducere in .Net Framework.pdf
18/112
Fetita c = new Fetita();c.se_joaca(pisica);c.se_joaca(); //polimorfismBaiat c = new Baiat();c.se_joaca(calculatorul);c.se_joaca(); //polimorfismCopil c = new Copil();c.se_joaca(); //polimorfism
Pentru a evidenia mai bine comportamentul polimorfic, propunem secvenaurmtoare n care nu se tie exact ce este obiectul copii[i] (de tip Copil, Fetita sauBaiat):
for (int i=0; i
-
7/22/2019 Introducere in .Net Framework.pdf
19/112
public Copil() {Nume = Console.ReadLine();} //metoda set}
class Fetita:Copil
{ public override void se_joaca()
{Console.WriteLine({0} leagana papusa.,this.Nume);} //metoda get}20
1.12. Evenimente i delegri
Evenimentele sunt membri ai unei clase ce permit clasei sau obiectelor clasei sfac notificri, adic s anune celelalte obiecte asupra unor schimbri petrecute lanivelul strii lor. Clasa furnizoare a unui eveniment public(pune la dispoziia altorclase) acest lucru printr-o declarare event care asociaz evenimentului un delegat,
adic o referin ctre o funcie necunoscut creia i se precizeaz doar antetul,funcia urmnd a fi implementat la nivelul claselor interesate de evenimentulrespectiv. Este modul prin care se realizeaz comunicarea ntre obiecte. Tehnica princare clasele implementeaz metode (handler-e) ce rspund la evenimente generatede alte clase poart numele de tratare a evenimentelor.
Sintaxa: [atrib]o [modificatori]oevent [tip_delegat] [nume]
Modificatorii permii sunt aceiai ca i la metode.
Tipul delegat este un tip de date ca oricare altul, derivat din clasa sigilat Delegate,din spaiul System. Definirea unui tip delegat se realizeaz prin declararea:
[atrib]o [modificatori]odelegate [tip_rezultat] [nume_delegat] ([list_param_for-mali]o)
Un delegat se poate defini i n afara clasei generatoare de evenimente i poateservi i altor scopuri n afara tratrii evenimentelor. Prezentm n continuare unexemplu.
De exemplu, dac dorim s definim o metod asociat unui vector de numerentregi, metod ce verific dac vectorul este o succesiune bine aranjat (oricedou valori succesive respect o anumit regul), o implementare generic sepoate realiza folosind delegri:
public delegate bool pereche_ok(object t1, object t2);
public class Vector
{ public const int nmax = 4;
public int[] v=new int[nmax];
public Vector()
{ Random rand = new Random();
for (int i = 0; i < nmax; i++) v[i] = rand.Next(0,5);
}
public void scrie()
CAPITOLUL 1. Programarea orientat obiect (POO) cu C# 17
20 De observat c n exemplul anterior (subcapitolul 1.10), cmpul nume era declarat public, pentru a permite acce-sul "general" la cmpul respectiv de date. Iar metodele i constructorii foloseau identificatorul nume i nu propri-etatea Nume.
-
7/22/2019 Introducere in .Net Framework.pdf
20/112
{ for (int i = 0; i < nmax; i++) Console.Write({0}, , v[i]);
Console.WriteLine();
}
public bool aranj(pereche_ok ok)//oke o delegare ctre o funcie necunoscut
{ for (int i = 0; i < nmax-1; i++)if (!ok(v[i], v[i + 1])) return false;
return true;
}
}
Dac n clasa-program21 se adug funciile (exprimnd dou reguli de aranjareposibile)
public static bool f1(object t1, object t2)
{if ((int)t1 >= (int)t2) return true;else return false;}public static bool f2(object t1, object t2)
{if ((int)t1
-
7/22/2019 Introducere in .Net Framework.pdf
21/112
1.13. Interfee
Interfeele sunt foarte importante n programarea orientat pe obiecte, deoarecepermit utilizarea polimorfismului ntr-un sens mai extins.O interfa este o compo-
nent a aplicaiei, asemntoare unei clase, ce declar prin membrii si (metode, pro-prieti, evenimente i indexatori) un comportament unitar aplicabil mai multorclase, comportament care nu se poate defini prin ierarhia de clase a aplicaiei.
De exemplu, dac vom considera arborele din figura urmtoare, n care AVEREeste o clas abstract, iar derivarea claselor a fost conceput urmrind proprietilecomune ale componentelor unei averi, atunci o clas VENIT nu este posibil,deoarece ea ar moteni de la toate clasele evideniate, iar motenirea multipl nueste admis n C#.
Pentru metodele din cadrul unei interfee nu se d nici o implementare, ci sunt puri simplu specificate, implementarea lor fiind furnizat de unele dintre clasele apli-caiei25. Nu exist instaniere n cazul interfeelor, dar se admit derivri, inclusivmoteniri multiple.
n exemplul nostru, se poate defini o interfa VENIT care s conin antetul unei
metode calc (s zicem) pentru calculul venitului obinut, fiecare dintre clasele careimplementeaz interfaa VENIT fiind obligat s furnizeze o implementare (dup oformul de calcul specific) pentru metoda calc din interfa. Orice clas care doretes adere la interfa trebuie s implementeze toate metodele din interfa. Toateclasele care motenesc dintr-o clas care implementeaz o interfa motenesc, evi-dent, metodele respective, dar le pot i redefini (de exemplu, clasa Credit_acordatredefinete metoda calc din clasa Investiie, deoarece formula de calcul implemen-tat acolo nu i se potrivete i ei26).
De exemplu, dac presupunem c toate clasele subliniate implementeaz interfaa
VENIT, atunci pentru o avere cu aciuni la dou firme, un imobil nchiriat i o
CAPITOLUL 1. Programarea orientat obiect (POO) cu C# 19
25 Acele clase care "ader" la o interfa spunem c "implementeaz" interfaa respectiv26 Dac n sens polimorfic spunem c Investiie este i de tip Bani i de tip Avere, tot aa putem spune c o clas careimplementeaz interfaa VENIT i clasele derivate din ea sunt i de tip VENIT
-
7/22/2019 Introducere in .Net Framework.pdf
22/112
depunere la banc, putem determina venitul total:
Actiune act1 = new Actiune();Actiune act2 = new Actiune();
I_inchiriat casa = new I_inchiriat();Depunere dep=new Depunere();
Venit[] venituri = new Venit()[4];venituri[0] = act1; venituri[1] = act2;
venituri[2] = casa; venituri[3] = dep;
...
int t=0;
for(i=0;i
-
7/22/2019 Introducere in .Net Framework.pdf
23/112
CAPITOLUL2Platforma .NET
2.1 Prezentare
.NET este un cadru (Framework) de dezvoltare software unitar care permite
realizarea, distribuirea i rularea aplicaiilor-desktop Windows i aplicaiilor WEB.Tehnologia .NET pune laolalt mai multe tehnologii (ASP, XML, OOP, SOAP,
WDSL, UDDI) i limbaje de programare (VB, C++, C#, J#) asigurnd totodat attportabilitatea codului compilat ntre diferite calculatoare cu sistem Windows, ct ireutilizarea codului n programe, indiferent de limbajul de programare utilizat.
.NET Framework este o component livrat mpreun cu sistemul de operareWindows. De fapt, .NET 2.0 vine cu Windows Server 2003, se poate instala pe versi-unile anterioare, pn la Windows 98 inclusiv; .NET 3.0 vine instalat pe WindowsVista i poate fi instalat pe versiunile Windows XP cu SP2 i Windows Server 2003 cu
minimum SP1.Pentru a dezvolta aplicaii pe platforma .NET este bine sa avem 3 componente
eseniale: un set de limbaje (C#, Visual Basic .NET, J#, Managed C++, Smalltalk, Perl,
Fortran, Cobol, Lisp, Pascal etc), un set de medii de dezvoltare (Visual Studio .NET, Visio), i o bibliotec de clase pentru crearea serviciilor Web, aplicaiilor Web i apli-
caiilor desktop Windows.Cnd dezvoltm aplicaii .NET, putem utiliza:
Servere specializate - un set de servere Enterprise .NET (din familia SQL Server2000, Exchange 2000 etc), care pun la dispoziie funcii de stocare a bazelor dedate, email, aplicaii B2B (Bussiness to Bussiness comer electronic ntrepartenerii unei afaceri).
Servicii Web (n special comerciale), utile n aplicaii care necesit identificareautilizatorilor (de exemplu, .NET Passport - un mod de autentificare folosind unsingur nume i o parol pentru toate ste-urile vizitate)
Servicii incluse pentru dispozitive non-PC (Pocket PC Phone Edition,Smartphone, Tablet PC, Smart Display, XBox, set-top boxes, etc.)
.NET FrameworkComponenta .NET Framework st la baza tehnologiei .NET, este ultima interfa
21
-
7/22/2019 Introducere in .Net Framework.pdf
24/112
ntre aplicaiile .NET i sistemul de operare i actualmente conine:Limbajele C#, VB.NET, C++ i J#. Pentru a fi integrate n platforma .NET toate aces-
te limbaje respect nite specificaii OOP numite Common Type System (CTS). Ele auca elemente de baz: clase, interfee, delegri, tipuri valoare i referin, iar ca
mecanisme: motenire, polimorfism i tratarea excepiilor.Platforma comun de executare a programelor numit Common Language
Runtime(CLR), utilizat de toate cele 4 limbaje. CTS face parte din CLR.Ansamblul de biblioteci necesare n realizarea aplicaiilor desktop sau Web numit
Framework Class Library(FCL).
Arhitectura .NET Framework
Componenta .NET Framework este format din compilatoare, biblioteci i alte exe-cutabile utile n rularea aplicaiilor .NET. Fiierele corespunztoare se afl, n general,n directorul C:\WINDOWS\Microsoft. NET\Framework\V2.0. (corespunztor versiu-nii instalate)
2.2. Compilarea programelor
Un program scris ntr-unul dintre limbajele .NET conform Common LanguageSpecification (CLS) este compilat n Microsoft Intermediate Language(MSIL sau IL).
Codul astfel obinut are extensia exe, dar nu este direct executabil, ci respect for-matul unic MSIL.
CLR include o main virtual asemntoare cu o main Java, ce executinstruciunile IL rezultate n urma compilrii. Maina folosete un compilator specialJIT (Just In Time). Compilatorul JIT analizeaz codul IL corespunztor apelului uneimetode i produce codul main adecvat i eficient. El recunoate secvenele de codpentru care s-a obinut deja codul main adecvat permind reutilizarea acestuiafr recompilare, ceea ce face ca, pe parcursul rulrii, aplicaiile .NET s fie din ce nce mai rapide.
Faptul c programul IL produs de diferitele limbaje este foarte asemntor are carezultat interoperabilitatea ntre aceste limbaje. Astfel, clasele i obiectele createntr-un limbaj specific .NET pot fi utilizate cu succes n altul.
22 Introducere n .Net Framework (Suport de curs)
-
7/22/2019 Introducere in .Net Framework.pdf
25/112
n plus, CLR se ocup de gestionarea automat a memoriei (un mecanism imple-mentat n platforma .NET fiind acela de eliberare automat a zonelor de memorieasociate unor date devenite inutile Garbage Collection).
Ca un element de portabilitate, trebuie spus c .NET Framework este imple-
mentarea unui standard numit Common Language Infrastructure (http://www.ecma-international.org/publications/standards/Ecma-335.htm), ceea ce permite rulareaaplicaiilor .NET, n afar de Windows, i pe unele tipuri de Unix, Linux, Solaris, MacOS X i alte sisteme de operare (http://www.mono-project.com/Main_Page ).
2.3. De ce am alege .NET?
n primul rnd pentru c ne ofer instrumente pe care le putem folosi i n alte pro-grame, ofer acces uor la baze de date, permite realizarea desenelor sau a altor ele-
mente grafice. Spaiul de nume System.Windows.Forms conine instrumente (con-troale) ce permit implementarea elementelor interfeei grafice cu utilizatorul.Folosind aceste controale, putei proiecta i dezvolta rapid i interactiv, elementeleinterfeei grafice. Tot .NET v ofer clase care efectueaz majoritatea sarcinilor uzualecu care se confrunt programele i care plictisesc i fur timpul programatorilor,reducnd astfel timpul necesar dezvoltrii aplicaiilor.
CAPITOLUL 2. Platforma .NET 23
-
7/22/2019 Introducere in .Net Framework.pdf
26/112
-
7/22/2019 Introducere in .Net Framework.pdf
27/112
CAPITOLUL 3Limbajul C#
3.1. CaracterizareLimbajul C# fost dezvoltat de o echip restrns de ingineri de la Microsoft, echip
din care s-a evideniat Anders Hejlsberg (autorul limbajului Turbo Pascal i membrual echipei care a proiectat Borland Delphi).
C# este un limbaj simplu, cu circa 80 de cuvinte cheie, i 12 tipuri de date prede-finite. El permite programarea structurat, modular i orientat obiectual, conformperceptelor moderne ale programrii profesioniste.
Principiile de baz ale programrii pe obiecte (NCAPSULARE, MOTENIRE,POLIMORFISM) sunt elemente fundamentale ale programrii C#. n mare, limbajul
motenete sintaxa i principiile de programare din C++. Sunt o serie de tipuri noi dedate sau funciuni diferite ale datelor din C++, iar n spiritul realizrii unor secvenede cod sigure (safe), unele funciuni au fost adugate (de exemplu, interfee idelegri), diversificate (tipul struct), modificate (tipul string) sau chiar eliminate(motenirea multipl i pointerii ctre funcii). Unele funciuni (cum ar fi accesuldirect la memorie folosind pointeri) au fost pstrate, dar secvenele de cod corespun-ztoare se consider nesigure.
3.2. Compilarea la linia de comand
Se pot dezvolta aplicaii .NET i fr a dispune de mediul de dezvoltare Visual Studio,ci numai de .NET SDK (pentru 2.0 i pentru 3.0). n acest caz, codul se scrie n orice edi-tor de text, fiierele se salveaz cu extensia cs, apoi se compileaz la linie de comand.
Astfel, se scrie n Notepad programul:
using System;
class primul
{
static void Main()
{ Console.WriteLine(Primul program);Console.ReadKey(true);
}
}
25
-
7/22/2019 Introducere in .Net Framework.pdf
28/112
Dac se salveaz fiierul primul.cs, n directorul WINDOWS\Microsoft.NET\Framework\V2.0, atunci scriind la linia de comand: csc primul.cs se va obine fiierulprimul.exe direct executabil pe o platform .NET.
3.3. Crearea aplicaiilor consol
Pentru a realiza aplicaii n mediul de dezvoltare Visual Studio, trebuie s instalmo versiune a acestuia, eventual versiunea free Microsoft Visual C# 2005/2008 ExpressEdition de la adresa http://msdn.microsoft.com/vstudio/express/downloads/default.aspx. Pentru nceput, putem realiza aplicaii consol (ca i cele din Borland Pascal sauBorland C).
Dup lansare, alegem opiunea New Projectdin meniul File. n fereastra de dialog(vezi figura), selectm pictograma Console Application, dup care, la Name, intro-
ducem numele aplicaiei noastre.
Fereastra n care scriem programul se numete implicit Programs.cs i se poatemodifica prin salvare explicit (Save As). Extensia cs provine de la C Sharp.
n scrierea programului suntem asistai de IntelliSense, ajutorul contextual.
Compilarea programului se realizeaz cu ajutorul opiunii Build Solution (F6) din
meniul Build. Posibilele erori de compilare sunt listate n fereastra Error List.Efectund dublu clic pe fiecare eroare n parte, cursorul din program se poziioneazpe linia coninnd eroarea.
26 Introducere n .Net Framework (Suport de curs)
-
7/22/2019 Introducere in .Net Framework.pdf
29/112
Rularea programului se poate realiza n mai multe moduri: rapid fr asisten dedepanare (Start Without DebuggingShift+F5) , rapid cu asisten de depanare (StartDebuggingF5 sau cu butonul din bara de instrumente), rulare pas cu pas (StepIntoF11 i Step OverF12) sau rulare rapid pn la linia marcat ca punct de ntre-
rupere (Toggle Breakpoint F9 pe linia respectiv i apoi Start Debugging F5). n-cetarea urmririi pas cu pas (Stop DebuggingShift+F5) permite ieirea din moduldepanare i revenirea la modul normal de lucru. Toate opiunile de rulare i depanarese gsesc n meniul Debugal mediului.
Fereastra de cod i ferestrele auxiliare ce ne ajut n etapa de editare pot fi vizua-lizate alegnd opiunea corespunztoare din meniul View. Ferestrele auxiliare utile netapa de depanare se pot vizualiza alegnd opiunea corespunztoare din meniul
Debug/Windows.
3.4. Structura unui program C#
S ncepem cu exemplul clasic Hello World adaptat la limbajul C#:1 using System;23 namespace HelloWorld4 {5 class Program
6 {7 static void Main()8 {9 Console.WriteLine(Hello World!);
10 }11 }12 }
O aplicatie C# este format din una sau mai multe clase, grupate n spaii de nume(namespaces). Un spaiu de nume cuprinde mai multe clase cu nume diferite avnd
funcionaliti nrudite. Dou clase pot avea acelai nume cu condiia ca ele s fie de-finite n spaii de nume diferite. n cadrul aceluiai spaiu de nume poate apreadefiniia unui alt spaiu de nume, caz n care avem de-a face cu spaii de nume imbri-
CAPITOLUL 3. Limbajul C# 27
-
7/22/2019 Introducere in .Net Framework.pdf
30/112
cate. O clas poate fi identificat prin numele complet (nume precedat de numelespaiului sau spaiilor de nume din care face parte clasa respectiv, cu separatorulpunct). n exemplul nostru, HelloWorld.Program este numele cu specificaie com-plet al clasei Program.
O clas este format din date i metode (funcii). Apelarea unei metode n cadrulclasei n care a fost definit aceasta presupune specificarea numelui metodei. Apelulunei metode definite n interiorul unei clase poate fi invocat i din interiorul alteiclase, caz n care este necesar specificarea clasei i apoi a metodei separate prinpunct. Dac n plus, clasa aparine unui spaiu de nume neinclus n fiierul curent,atunci este necesar precizarea tuturor componentelor numelui: spaiu.clas.metodsau spaiu.spaiu.clas.metodetc.
n fiierul nostru se afl dou spaii de nume: unul definit (HelloWorld) i unulextern inclus prin directiva using (System). Console.WriteLine reprezint apelul
metodei WriteLine definit n clasa Console. Cum n spaiul de nume curent estedefinit doar clasa Program, deducem c definiia clasei Console trebuie s segseasc n spaiul System.
Pentru a facilita cooperarea mai multor programatori la realizarea unei aplicaiicomplexe, exist posibilitatea de a segmenta aplicaia n mai multe fiiere numiteassemblies. ntr-un assemblyse pot implementa mai multe spaii de nume, iar priale unui aceeai spaiu de nume se pot regsi n mai multe assembly-uri. Pentru oaplicaie consol, ca i pentru o aplicaie Windows de altfel, este obligatoriu ca una(i numai una) dintre clasele aplicaiei s conin un punct de intrare (entry point),
i anume metoda (funcia) Main.S comentm programul de mai sus:linia 1: este o directiv care specific faptul c se vor folosi clase incluse n spaiul
de nume System. n cazul nostru se va folosi clasa Console.linia 3: spaiul nostru de numelinia 5: orice program C# este alctuit din una sau mai multe claselinia 7: metoda Main, punctul de intrare n programlinia 9: clasa Console, amintit mai sus, este folosit pentru operaiile de
intrare/ieire. Aici se apeleaz metoda WriteLine din acest clas, pentru afiarea
mesajului dorit pe ecran.
3.5. Sintaxa limbajului
Ca i limbajul C++ cu care se nrudete, limbajul C# are un alfabet format din literemari i mici ale alfabetului englez, cifre i alte semne. Vocabularul limbajului este for-mat din acele simboluri27 cu semnificaii lexicale n scrierea programelor: cuvinte(nume), expresii, separatori, delimitatori i comentarii.
Comentarii
comentariu pe un rnd prin folosirea // Tot ce urmeaz dup caracterele // sunt
considerate, din acel loc, pn la sfritul rndului drept comentariu
28 Introducere n .Net Framework (Suport de curs)
27 Este un termen folosit un pic echivoc i provenit din traduceriea cuvntului "token"
-
7/22/2019 Introducere in .Net Framework.pdf
31/112
// Acesta este un comentariu pe un singur rand
comentariu pe mai multe rnduri prin folosirea /* i */ Orice text cuprins ntresimbolurile menionate mai sus se consider a fi comentariu. Simbolurile /* repre-zint nceputul comentariului, iar */ sfritul respectivului comentariu.
/* Acesta este un
comentariu care se
intinde pe mai multe randuri */
Nume
Prin nume dat unei variabile, clase, metode etc. nelegem o succesiune de carac-tere care ndeplinete urmtoarele reguli:
numele trebuie s nceap cu o liter sau cu unul dintre caracterele _ i @; primul caracter poate fi urmat numai de litere, cifre sau un caracter de subliniere; numele care reprezint cuvinte cheie nu pot fi folosite n alt scop dect acela
pentru care au fost definite cuvintele cheie pot fi folosite n alt scop numai dac sunt precedate de @ dou nume sunt distincte dac difer prin cel puin un caracter (fie el i liter
mic ce difer de aceeai liter majuscul)Convenii pentru nume: n cazul numelor claselor, metodelor, a proprietilor, enumerrilor, interfeelor,
spaiilor de nume, fiecare cuvnt care compune numele ncepe cu majuscul n cazul numelor variabilelor dac numele este compus din mai multe cuvinte,
primul ncepe cu minuscul, celelalte cu majuscul
Cuvinte cheie n C#
Simbolurile lexicale reprezentnd constante, regulile de formare a expresiilor, se-paratorii de liste, delimitatorii de instruciuni, de blocuri de instruciuni, de iruri decaractere etc. sunt n mare aceiai ca i n cazul limbajului C++.
abstract as base bool breakbyte case catch char checkedclass const continue decimal defaultdelegate do double else enumevent explicit extern false finallyfixed float for foreach goto
if implicit in int interfaceinternal is lock long namespacenew null object operator outoverride params private protected publicreadonly ref return sbyte sealedshort sizeof stackalloc static stringstruct switch this throw true
try typeof uint ulong uncheckedunsafe ushort using virtual voidvolatile while
CAPITOLUL 3. Limbajul C# 29
-
7/22/2019 Introducere in .Net Framework.pdf
32/112
3.6. Tipuri de date
n C# exist dou categorii de tipuri de date: tipuri valoare
tipul simple: byte, char, int, float etc. tipul enumerare - enum tipul structur - struct
tipuri referin
tipul clas - class tipul interfa - interface tipul delegat - delegate tipul tablou - array
Toate tipurile de date sunt derivate din tipul System.Object
Toate tipurile valoare sunt derivate din clasa System.ValueType, derivat la rn-dul ei din clasa Object (alias pentru System.Object).
Limbajul C# conine un set de tipuri predefinite (int, bool etc.) i permite definireaunor tipuri proprii (enum, struct, class etc.).
Tipuri simple predefinite
Tip Descriere Domeniul de valori
object rdcina oricrui tip
string secven de caractere Unicode
sbyte tip ntreg cu semn, pe 8 bii -128; 127
short tip ntreg cu semn, pe 16 bii -32768; 32767
int tip ntreg cu semn pe, 32 bii -2147483648; 21447483647
long tip ntreg cu semn, pe 64 de bii-9223372036854775808;9223372036854775807
byte tip ntreg fr semn, pe 8 bii 0; 255
ushort tip ntreg fr semn, pe 16 bii 0; 65535
uint tip ntreg fr semn, pe 32 bii 0; 4294967295
ulong tip ntreg fr semn, pe 64 bii 0; 18446744073709551615
floattip cu virgul mobil, simpl precizie, pe 32 bii(8 pentru exponent, 24 pentru mantis)
-3.402823E+38; 3.402823E+38
doubletip cu virgul mobil, dubl precizie, pe 64 bii(11 pentru exponent, 53 -mantisa)
-1.79769313486232E+308;1.79769313486232E+308
bool tip boolean-79228162514264337593543950335;79228162514264337593543950335
char tip caracter din setul Unicode, pe 16 bii
decimal tip zecimal, pe 128 bii (96 pentru mantis), 28de cifre semnificative
30 Introducere n .Net Framework (Suport de curs)
-
7/22/2019 Introducere in .Net Framework.pdf
33/112
O valoare se asigneaz dup urmtoarele reguli:
Exemple:
Tipul enumerare
Tipul enumerare este un tip definit de utilizator. Acest tip permite utilizareanumelor care, sunt asociate unor valori numerice. Toate componentele enumerate auun acelai tip de baz ntreg. n cazul n care, la declarare, nu se specific tipul de bazal enumerrii, atunci acesta este considerat implicit int.
Declararea unui tip enumerare este de forma:
enum [Nume_tip] [: Tip]o{
[identificator1][=valoare]o,
...
[identificatorn][=valoare]o}
Observaii:
n mod implicit valoarea primului membru al enumerrii este 0, iar fiecare varia-
bil care urmeaz are valoarea (implicit) mai mare cu o unitate dect precedenta. Valorile folosite pentru iniializri trebuie s fac parte din domeniul de valori
declarat al tipului Nu se admit referine circulare:
enum ValoriCirculare
{
a = b,
b
}
string s = "Salut!" float g = 1.234F;
long a = 10; double h = 1.234;
long b = 13L; double i = 1.234D;
ulong c = 12; bool cond1 = true;
ulong d = 15U; bool cond2 = false;
ulong e = 16L; decimal j = 1.234M;
ulong f = 17UL;
Sufix Tip
nu are int, uint, long, ulong
u, U uint, ulong
L, L long, ulong
ul, lu, Ul, lU, UL, LU, Lu ulong
CAPITOLUL 3. Limbajul C# 31
-
7/22/2019 Introducere in .Net Framework.pdf
34/112
Exemplu:
using System;
namespace tipulEnum
{class Program
{
enum lunaAnului
{
Ianuarie = 1,
Februarie, Martie, Aprilie, Mai, Iunie, Iulie,
August, Septembrie, Octombrie, Noiembrie, Decembrie
}
static void Main(string[] args)
{
Console.WriteLine(Luna Mai este a {0},
(int)lunaAnului.Mai + -a luna din an.);
Console.ReadLine();
}
}
}
n urma rulrii programului se afieaz mesajul:Luna Mai este a 5-a luna din an.
Tablouri
Declararea unui tablou unidimensional:Tip[] nume;
Prin aceasta, nu se aloc spaiu pentru memorare. Pentru a putea reine date nstructura de tip tablou, este necesar o operaie de instaniere:
nume = new Tip[NumarElemente];
Declararea, instanierea i chiar iniializarea tabloului se pot face n aceeaiinstruciune:
Exemplu:
int[] v = new int[] {1,2,3}; sauint[] v = {1,2,3}; //new este implicit
n cazul tablourilor cu mai multe dimensiuni facem distincie ntre tablouri regu-late i tablouri neregulate (tablouri de tablouri)
Declarare n cazul tablourilor regulate bidimensionale:
Tip[,] nume;
Intaniere:
nume = new Tip[Linii,Coloane];
Acces:
nume[indice1,indice2]
32 Introducere n .Net Framework (Suport de curs)
-
7/22/2019 Introducere in .Net Framework.pdf
35/112
Exemple:int[,] mat = new int[,] {{1,2,3},{4,5,6},{7,8,9}}; sauint[,] mat = {{1,2,3},{4,5,6},{7,8,9}};
Declarare n cazul tablourilor neregulate bidimensionale:
Tip[][] nume;
Intaniere:nume = new Tip[Linii],[];
nume[0]=new Tip[Coloane1]
...
nume[Linii-1]=new Tip[ColoaneLinii-1]
Acces:
nume[indice1][indice2]
Exemple:int[][] mat = new int[][] {
new int[3] {1,2,3},
new int[2] {4,5},
new int[4] {7,8,9,1}
}; sauint[][] mat={new int[3] {1,2,3},new int[2] {4,5},new int[4] {7,8,9,1}};
iruri de caractere
Se definesc dou tipuri de iruri: regulate de tip verbatimTipul regulat conine ntre ghilimele zero sau mai multe caractere, inclusiv
secvene escape.Secvenele escape permit reprezentarea caracterelor care nu au reprezentare grafic
precum i reprezentarea unor caractere speciale: backslash, caracterul apostrof, etc.
Secven escape Efect
\' apostrof
\" ghilimele\\ backslash
\0 null
\a alarm
\b backspace
\f form feed - pagin nou
\n new line - linie nou
\r carriage return - nceput de rnd
\t horizontal tab - tab orizontal
\u caracter unicode
\v vertical tab - tab vertical
\x caracter hexazecimal
CAPITOLUL 3. Limbajul C# 33
-
7/22/2019 Introducere in .Net Framework.pdf
36/112
n cazul n care folosim multe secvene escape, putem utiliza irurile verbatim.Aceste iruri pot s conin orice fel de caractere, inclusiv caracterul EOLN. Ele sefolosesc n special n cazul n care dorim s facem referiri la fiiere i la regitri. Unastfel de ir ncepe ntotdeauna cu simbolul@naintea ghilimelelor de nceput.
Exemplu:
using System;
namespace SiruriDeCaractere
{
class Program
{
static void Main(string[] args)
{
string a = un sir de caractere;
string b = linia unu \nlinia doi;string c = @linia unu
linia doi;
string d=c:\\exemple\\unu.cs;
string e = @c:\exemple\unu.cs;
Console.WriteLine(a); Console.WriteLine(b);
Console.WriteLine(c); Console.WriteLine(d);
Console.WriteLine(e); Console.ReadLine();
}
}
}
Programul va avea ieirea
un sir de caractere
linia unu
linia doi
linia unu
linia doi
c:\exemple\unu.cs
c:\exemple\unu.cs
3.7. Conversii
3.7.1. Conversii numerice
n C# exist dou tipuri de conversii numerice: implicite explicite.
Conversia implicit se efectueaz (automat) doar dac nu este afectat valoarea
convertit.
34 Introducere n .Net Framework (Suport de curs)
-
7/22/2019 Introducere in .Net Framework.pdf
37/112
Exemplu:
using System;
using System.Collections.Generic;
using System.Text;
namespace Conversii
{
class Program
{
static void Main(string[] args)
{
byte a = 13; // byte intreg fara semn
// pe 8 biti
byte b = 20;
long c; //intreg cu semn pe 64 bitic = a + b;
Console.WriteLine(c);
Console.ReadLine();
}
}
}
Regulile de conversie implicit sunt descrise de tabelul urmtor:
Conversia explicit se realizeaz prin intermediul unei expresii cast, atunci cnd nuexist posibilitatea unei conversii implicite.
Exemplu: n urma rulrii programului
using System;
using System.Collections.Generic;
using System.Text;
namespace Conversii1
{
din n
sbyte short, int, long, float, double, decimal
byte short, ushort, int, uint, long, ulong, float, double, decimal
short int, long, float, double, decimal
ushort int, uint, long, ulong, float, double, decimal
int long, float, double, decimal
uint long, ulong, float, double, decimal
long float, double, decimal
char ushort, int, uint, long, ulong, float, double, decimal
float double
ulong float, double, decimal
CAPITOLUL 3. Limbajul C# 35
-
7/22/2019 Introducere in .Net Framework.pdf
38/112
class Program
{
static void Main(string[] args)
{
int a = 5;int b = 2;
float c;
c = (float)a / b; //operatorul cast
Console.WriteLine({0}/{1}={2}, a, b, c);
Console.ReadLine();
}
}
}
se obine:5/2 = 2,5
n cazul n care nu s-ar fi folosit operatorul cast rezultatul, evident eronat, ar fi fost:5/2=2
Regulile de conversie explicit sunt descrise de tabelul urmtor:
3.7.2. Conversii ntre numere i iruri de caractere
Limbajul C# ofer posibilitatea efecturii de conversii ntre numere i iruri de car-actere.
Sintaxa pentru conversia unui numr n ir de caractere:
numr ir + numr
sau se folosete metoda ToString a clasei Object.
din n
sbyte byte, ushort, uint, ulong, char
byte sbyte, char
short sbyte, byte, ushort, uint, ulong, char
ushort sbyte, byte, short, char
int sbyte, byte, short, ushort, uint, ulong, char
uint sbyte,byte, short, ushort, int, char
long sbyte, byte, short, ushort, int, uint, ulong, char
ulong sbyte, byte, short, ushort, int, uint, long, char
char sbyte, byte, short
float sbyte, byte, short, ushort, int, uint, long, ulong, char, decimal
double sbyte, byte, short, ushort, int, uint, long, ulong, char, float, decimaldecimal sbyte, byte, short, ushort, int, uint, long, ulong, char, float, double
36 Introducere n .Net Framework (Suport de curs)
-
7/22/2019 Introducere in .Net Framework.pdf
39/112
Pentru conversia invers, adic din ir de caractere n numr, sintaxa este:
ir int int.Parse(ir) sau Int32.Parse(ir)
ir long long.Parse(ir sau Int64.Parse(ir)ir double double.Parse(ir) sau Double.Parse(ir)ir float float.Parse(ir) sau Float.Parse(ir)
Observaie: n cazul n care irul de caractere nu reprezint un numr valid, con-versia acesui ir la numr va eua.
Exemplu:
using System;
namespace Conversii
{
class Program
{
static void Main(string[] args)
{
string s;
const int a = 13;
const long b = 100000;
const float c = 2.15F;
double d = 3.1415;
Console.WriteLine(CONVERSII\n);
Console.WriteLine(TIP\tVAL. \tSTRING);
Console.WriteLine();
s = + a;
Console.WriteLine(int\t{0} \t{1},a,s);
s = + b;
Console.WriteLine(long\t{0} \t{1},b,s);
s = + c;
Console.WriteLine(float\t{0} \t{1},c,s);s = + d;
Console.WriteLine(double\t{0} \t{1},d,s);
Console.WriteLine(\nSTRING\tVAL \tTIP);
Console.WriteLine();
int a1;
a1 = int.Parse(13);
Console.WriteLine({0}\t{1}\tint,13,a1);
long b2;
b2 = long.Parse(1000);
Console.WriteLine({0}\t{1}\tlong,1000,b2);
float c2;c2 = float.Parse(2,15);
Console.WriteLine({0}\t{1}\tfloat,2,15,c2);
CAPITOLUL 3. Limbajul C# 37
-
7/22/2019 Introducere in .Net Framework.pdf
40/112
double d2;
d2 = double.Parse(3.1415,
System.Globalization.CultureInfo.InvariantCulture);
Console.WriteLine({0}\t{1}\tdouble,3.1415,d2);
Console.ReadLine();}
}
}
n urma rulrii se obine:
CONVERSIITIP VAL. STRING
int 13 13long 100000 100000float 2,15 2,15double 3,1415 3,1415STRING VAL. TIP13 13 int1000 1000 long2,15 2,15 float3.1415 3,1415 double
3.7.3. Conversii boxing i unboxing
Datorit faptului c n C# toate tipurile sunt derivate din clasa Object(System.Object), prin conversiile boxing (mpachetare) i unboxing (despachetare)este permis tratarea tipurilor valoare drept obiecte i reciproc. Prin conversia box-ing a unui tip valoare, care se pstreaz pe stiv, se produce ambalarea n interiorulunei instane de tip referin, care se pstraz n memoria heap, la clasa Object.Unboxing permite convertirea unui obiect ntr-un tipul valoare corespunztor.
Exemplu:
Prin boxing variabila i este asignata unui obiect ob:int i = 13;
object ob = (object)i; //boxing explicit
sauint i = 13;
object ob = i; //boxing implicit
Prin conversia de tip unboxing, obiectul ob poate fi asignat variabilei ntregi i:int i=13;
object ob = i; //boxing impliciti = (int)ob; //unboxing explicit
38 Introducere n .Net Framework (Suport de curs)
-
7/22/2019 Introducere in .Net Framework.pdf
41/112
3.8. Constante
n C# exist dou modaliti de declarare a constantelor: folosind const saufolosind modificatorul readonly. Constantele declarate cu const trebuie s fie iniia-
lizate la declararea lor.Exemple:
const int x; //gresit, constanta nu a fost initializata
const int x = 13; //corect
3.9. Variabile
O variabil n C# poate s conin fie o valoare a unui tip elementar, fie o referinla un obiect.
Exemple:
int Salut;int Azi_si _maine;char caracter;
3.10. Expresii i operatori
Prin expresie se nelege o secven format din operatori i operanzi. Un opera-tor este un simbol ce indic aciunea care se efectueaz, iar operandul este valoarea
asupra creia se execut operaia. n C# sunt definii mai muli operatori. n cazul ncare ntr-o expresie nu intervin paranteze, operaiile se execut conform prioritiioperatorilor. n cazul n care sunt mai muli operatori cu aceeai prioritate, evaluareaexpresiei se realizeaz de la stnga la dreapta.
Prioritate Tip Operatori Asociativitate
0 Primar( ) [ ] f() . x++ x-- new typeof sizeofchecked unchecked ->
1 Unar + - ! ~ ++x --x (tip) true false & sizeof
2 Multiplicativ * / %
3 Aditiv + -
4 De deplasare >
5 Relaional < > = is as
6 De egalitate == !=
7 AND (SI) logic &
8 XOR (SAU exclusiv) logic ^
9 OR (SAU) logic |
10 AND (SI) condiional &&
11 OR (SAU) condiional ||
12 Condiional ?:
13 De atribuire = *= /= %= += -= ^= &= = |=
CAPITOLUL 3. Limbajul C# 39
-
7/22/2019 Introducere in .Net Framework.pdf
42/112
3.11. Instruciuni condiionale, de iteraie i de control
Ne referim aici la instruciunile construite folosind cuvintele cheie: if, else, do,while, switch, case, default, for, foreach, in, break, continue, goto.
3.11.1 Instruciunea if
Instruciunea if are sintaxa:
if (conditie)
Instructiuni_A;
else
Instructiuni_B;
Exemplu:
using System;
namespace Test
{
class Program
{
static void Main(string[] args)
{
int n;
Console.WriteLine(Introduceti un nr intreg );n = Convert.ToInt32(Console.ReadLine());
if (n >= 0)
Console.WriteLine(Nr. introdus este > 0);
else
Console.WriteLine(Nr. introdus este < 0);
Console.ReadLine();
}
}
}
3.11.2. Instruciunea while
Instruciunea while are sintaxa:
while (conditie) Instructiuni;
Ct timp conditie este indeplinit se execut Instructiuni.
Exemplu: S se afieze numerele ntregi pozitive
-
7/22/2019 Introducere in .Net Framework.pdf
43/112
namespace Test
{
class Program
{
static void Main(string[] args){
int n = 0;
while (n
-
7/22/2019 Introducere in .Net Framework.pdf
44/112
3.11.4. Instruciunea for
Instruciunea for are sintaxa:
for (initializareCiclu; coditieFinal; pas)Instructiuni
Exemplu: Ne propunem, la fel ca n exemplele anterioare, s afim numerele po-zitive
-
7/22/2019 Introducere in .Net Framework.pdf
45/112
Exemplu:
switch(strAnimal){
case Pisica :break;
case Catel :break;
default:break;
}
3.11.6. Instruciunea foreachInstruciunea foreach enumer elementele dintr-o colecie, executnd o instruci-
une pentru fiecare element. Elementul care se extrage este de tip read-only,neputnd fi transmis ca parametru i nici aplicat un operator care s-I schimbe va-loarea. Pentru a vedea cum acioneaz o vom compara cu instruciunea cunoscutfor. Considerm un vector nume format din iruri de caractere:
string[] nume={Ana, Ionel, Maria};
S afim acest ir folosind instruciunea for:
for(int i=0; i
-
7/22/2019 Introducere in .Net Framework.pdf
46/112
Exemplu:
using System;
namespace Salt{
class Program
{
static void Main(string[] args)
{
int i = 0;
while(true)
{
Console.Write({0} ,i);
i++;
if(i
-
7/22/2019 Introducere in .Net Framework.pdf
47/112
y=0;
break;
}
3.12. Instruciunile try-catch-finally i throw
Prin excepie se nelege un obiect care ncapsuleaz informaii despre situaiianormale n funcionarea unui program. Ea se folosete pentru a semnala contextuln care apare o situaie special. De exemplu: erori la deschiderea unor fiiere,mprire la 0 etc. Aceste erori se pot manipula astfel nct programul s nu se ter-mine abrupt.
Sunt situaii n care prefigurm apariia unei erori ntr-o secven de prelucrare iatunci integrm secvena respectiv n blocul unei instruciuni try, preciznd una saumai multe secvene de program pentru tratarea excepiilor aprute (blocuri catch) i
eventual o secven comun care se execut dup terminarea normal sau duprecuperarea programului din starea de excepie (blocul finally).
Exemplu:
using System;
using System.IO;
namespace Exceptii
{
class tryCatch{
static void Main(string[] args)
{
Console.Write(Numele fisierului:);
string s=Console.ReadLine(s);
try
{
File.OpenRead(s);
}
catch (FileNotFoundException a)
{Console.WriteLine(a.ToString());
}
catch (PathTooLongException b)
{
Console.WriteLine(b.ToString());
}
finally
{
Console.WriteLine(Programul s-a sfarsit);
Console.ReadLine();
}
}
}
}
CAPITOLUL 3. Limbajul C# 45
-
7/22/2019 Introducere in .Net Framework.pdf
48/112
Alteori putem simula prin program o stare de eroare aruncnd o excepie(instruciunea throw) sau putem profita de mecanismul de tratare a erorilor pentru aimplementa un sistem de validare a datelor prin generarea unei excepii proprii pecare, de asemenea, o aruncm n momentul nendeplinirii unor condiii puse
asupra datelor.Clasa System.Exception i derivate ale acesteia servesc la tratarea adecvat i
diversificat a excepiilor.
Exemplu: Considerm clasele Copil, Fetita, Baiat definite fragmentat n capitolul 1.O posibilitate de validare la adugara unui copil este aceea care genereaz o excepieproprie la depirea dimensiunii vectorului static copii:
public static void adaug_copil(Copil c)
{
if (nr_copii < nr_max)
copii[nr_copii++] = c;
else throw new Exception(Prea muli copii);
}
46 Introducere n .Net Framework (Suport de curs)
-
7/22/2019 Introducere in .Net Framework.pdf
49/112
CAPITOLUL 4Programarea web cu ASP.NET
4.1. Introducere
ASP.NET este tehnologia Microsoft care permite dezvoltarea de aplicaii webmoderne, utiliznd platforma Microsoft .NET cu toate beneficiile sale.
Pentru a nelege procesul de realizare a unui site web cu ASP.NET este importants cunoatem modul n care funcioneaz comunicarea ntre browser i serverul web.Acest proces este format din urmtoarele etape principale:
1 Browserul Web iniiaza o cerere (request) a unei resurse ctre serverul Webunde este instalat aplicaia dorit.
2 Cererea este trimis serverului Web folosind protocolul HTTP.
3 Serverul Web proceseaz cererea.4 Serverul web trimite un rspuns browserului folosind protocolul HTTP.5 Browserul proceseaz rspunsul n format HTML, afind pagina web.6 Utilizatorul poate introduce date (s spunem ntr-un formular), apas butonul
Submit i trimite date napoi ctre server.7 Serverul Web proceseaz datele.8 Se reia de la pasul 4.
Serverul web primete cererea (request), iar apoi trimite un rspuns (response)
napoi ctre browser, dup care conexiunea este nchis, i sunt eliberate resurselefolosite pentru procesarea cererii. Acesta este modul de lucru folosit pentru afiareapaginilor statice (datele dintr-o pagin nu depind de alte date din alte pagini sau dealte aciuni precedente ale utilizatorului) i nici o informaie nu este stocat pe server.n cazul paginilor web dinamice, serverul poate s proceseze cereri de pagini ceconin cod care se execut pe server, sau datele pot fi salvate pe server ntre doucereri din partea browserului.
Trimiterea datelor de la browser ctre server se poate realiza prin metoda GET sauPOST.
Prin GET, URL-ul este completat cu un ir de caractere (QueryString) format dinperechi de tipul cheie = valoare separate prin &.
47
-
7/22/2019 Introducere in .Net Framework.pdf
50/112
Exemplu:GET /getPerson.aspx?Id=1&city=Cluj HTTP/1.1
Folosind POST, datele sunt plasate n corpul mesajului trimis serverului:
Exemplu:POST /getCustomer.aspx HTTP/1.1
Id=123&color=blue
Prin Get nu se pot trimite date de dimensiuni mari, iar datorit faptului c datelesunt scrise n URL-ul browser-ului, pot aprea probleme de securitate. De aceea, depreferat este s se foloseasc metoda POST pentru trimiterea de date.
Trimiterea datelor napoi ctre server este numit deseori PostBack. Aciunea dePostBack poate fi folosit att cu metoda GET ct i cu metoda POST. Pentru a ti
dac se trimit date (POST) sau pagina este doar cerut de browser (GET), cu altecuvinte pentru a ti dac pagina curent se ncarc pentru prim dat sau nu, nASP.NET se folosete o proprietate a clasei Page numit IsPostBack.
4.2. Structura unei pagini ASP.NET
La crearea unui proiect nou, n fereastra Solution Explorer apare o nou paginweb numit Default.aspx.
Orice pagin web .aspx este format din 3 seciuni: seciunea de directive, seciu-nea de cod, i seciunea de layout.
Seciunea de directive se folosete pentru a seta mediul de lucru, preciznd moduln care este procesat pagina.
Seciunea de cod, conine codul C# asociat paginii sau obiectelor din pagin.Codul poate fi plasat direct n pagina sau ntr-un fiier cu extensia .cs, cu acelainume ca al paginii (de ex. Default.aspx.cs). n cazul n care se gsete direct n pa-
gin, codul este cuprins ntre tag-urile :
protected voidButton1_Click(objectsender, EventArgse)
{
Page.Title = First Web Application;
}
De obicei blocurile conin cod care se execut pe partea de client, nsdac se folosete atributul runat = server, codul se va executa pe serverul web.
n cazul exemplului de mai sus, la apsarea butonului se schimb titlul paginiiWeb n browser.
48 Introducere n .Net Framework (Suport de curs)
-
7/22/2019 Introducere in .Net Framework.pdf
51/112
n cazul n care n fereastra pentru adugarea unei pagini noi n proiect, se bifeazopiunea Place code in separate file, codul este plasat ntr-un fiier separat, iar nseciunea de directive este precizat numele acestui fiier.
Exemplu: CodeFile=Default.aspx.cs.
Seciunea de layout conine codul HTML din seciunea Body:
Atributul runat=server pentru un anumit control, specific faptul c pentru obiec-tul respectiv, ASP.NET Runtime Engine care ruleaz pe serverul web (IIS) va facetransformarea ntr-un obiect HTML standard. Aceast conversie se realizeaz nfuncie de tipul browserului, de varianta de javascript instalat pe browser i de codulC# asociat obiectului respectiv (numit code behind).
De exemplu pagina aspx de mai sus este transformat n urmtorul fiier html:
Exemple complete de aplicaii web putei gsi pe DVD-ul Academic Resource Kit (ARK),instalnd Resurse\Visual Studio 2005\101 Samples CS101SamplesAll.msi sau descrcndcele 101 exemple de utilizare a Visual Studio 2005 de la adresa http://msdn2.microsoft.com/en-us/vstudio/aa718334.aspx. Dup instalare, din aplicaia MicrosoftVisual Web Developer 2005 alegei din meniul File opiunea Open Web Site i selectai, dindirectorul ..\CS101SamplesAll\CS101SamplesWebDevelopment\, aplicaia dorit. n fe-reastra Solution Explorer selectai Start.aspx i apoi butonul View in Browser".
CAPITOLUL 4. Programarea web cu ASP.NET 49
-
7/22/2019 Introducere in .Net Framework.pdf
52/112
4.3. Controale Server
Un control server poate fi programat, prin intermediul unui cod server-side, srspund la anumite evenimente din pagin. i menine n mod automat starea ntre
2 cereri ctre server, trebuie s aib atributul idi atributul runat.