Introducere in .Net Framework.pdf

download Introducere in .Net Framework.pdf

of 112

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.