Documente Academic
Documente Profesional
Documente Cultură
NET
Cursul de Medii și Tehnologii de Programare își propune să prezinte aspecte ale programării
.NET utilizând limbajul C#, însă este conceput astfel încât să nu prezinte exclusiv acest limbaj
de programare, ci face, pe alocuri, comparații cu limbajul Visual Basic, punctând diferențele
dintre cele două limbaje, avantajele și dezavantajele specifice lor. Astfel, veți putea să vă
faceți o idee mai bună asupra celor două limbaje de programare și să îl alegeți, în aplicațiile
pe care le veți dezvolta ulterior, pe acela care se va potrivi cel mai bine stilului dumnea-
voastră de programare.
vechi, scrise Visual Basic, pot fi importate în .NET folosind un „wizard” dedicat acestui scop,
excepție făcând, printre altele, secvențele de cod care accesează baze de date prin alte
tehnologii decât Microsoft ADO (ActiveX Data Objects).
Limbajul C# (C Sharp) este un limbaj relativ nou, prima versiune a acestuia fiind introdusă
de abia în anul 2002 odată cu apariția Visual Studio .NET 2002. În anul 2012, odată cu Visual
Studio 2012 limbajul C# a ajuns la versiunea 5.0 și la 10 ani de existență. Numele limbajului
provine de la limbajul de programare C. „Sharp” este un semn care, în notația muzicală,
indică faptul că nota la care este atașat se interpretează cu un semiton mai sus (diez). Pe de
altă parte, în muzică „C”, este echivalentul notei Do.
C# este un limbaj având o sintaxă orientată pe obiecte, bazată pe C++, care include de
asemenea aspecte specifice câtorva limbaje de programare, în special Delphi și Java
(proiectul C# a fost condus de către Anders Hejlsberg, cel care anterior a condus proiectul
Delphi), fiind puse accente speciale pe simplificare, flexibilitate și robustețe. Prin acestea s-a
urmărit ca programatorii familiarizați deja cu limbajele C și C++ să poată face ușor trecerea
la C#.
Pentru a înțelege un limbaj, este utilă compararea acestuia cu celelalte alternative existente,
apoi se poate opta pentru varianta potrivită în cunoștință de cauză. Cel mai apropiat
competitor pentru C# este Visual Basic, un alt limbaj nativ .NET care oferă aproximativ
aceleași beneficii ca C#. În acest caz diferența dintre cele două ține mai mult de sintaxă. C#
face parte din familia de limbaje C, iar dacă sunteți familiarizați cu cel puțin un limbaj dintre
acestea (C, C++, Java, JavaScript) vă veți simți ca acasă cu sintaxa C#. Dacă, însă, nu
cunoașteți niciunul dintre aceste limbaje sau dacă sunteți familiarizat cu versiunile mai vechi
de Visual Basic sau cu variantele sale de scripting (VBA) atunci versiunea .NET a Visual Basic
va fi cu siguranță mai ușor de învățat.
O mare parte a puterii limbajelor .NET (ne referim aici în principal la C# și Visual Basic)
provine din gama largă de tehnici de programare pe care le suportă. De exemplu, oferă
caracteristici de programare orientată pe obiecte, generice (generics) și programare funcțio-
nală. Oferă caracteristici de lucru cu liste și mulțimi prin LINQ, iar cele mai recente versiuni a
limbajelor adaugă suport intrinsec pentru programare asincronă. Unele dintre cele mai im-
portante beneficii ale utilizării limbajelor .NET sunt date de motorul de execuție a progra-
melor care oferă servicii precum verificarea tipurilor la rulare, tratarea excepțiilor, gestiunea
firelor de execuție și managementul automat al memoriei. La rularea aplicațiilor intră în
funcție un colector de „gunoaie” (garbage collector) care eliberează dezvoltatorii de o mare
parte a muncii asociate cu recuperarea resurselor de memorie pe care programul nu le mai
folosește.
Desigur, limbajele nu există într-un vacuum – sunt esențiale bibliotecile care să ofere o gamă
largă de caracteristici (trebuie să ofere acces deplin și convenabil la serviciile care stau la
baza funcționării platformei). În acest sens limbajele .NET sunt foarte puternice, iar aceasta
datorită .NET Framework. Toate limbajele de programare .NET au acces la aceleași biblioteci
și ierarhii de clase, astfel că, practic, nu există diferențe între aplicații similare scrise în
limbaje .NET diferite.
2
Introducere în Visual Studio .NET
În ciuda complexității și limitărilor COM, au fost create cu succes nenumărate aplicații bazate
pe această arhitectură. Totuși, în prezent majoritatea aplicațiilor Windows nu mai sunt
create cu modelul COM ci, mai degrabă, aplicațiile desktop, serviciile sistemului de operare și
bibliotecile de componente reutilizabile sunt create utilizând platforma .NET.
.NET Framework reprezintă o platformă software pentru dezvoltarea de sisteme atât pentru
familia de sisteme de operare Windows cât și pentru Mac OS X și diferite distribuții de
Unix/Linux. Iată o trecere în revistă a câtorva dintre caracteristicile principale ale .NET:
Interoperabilitate cu codul existent: fișiere binare COM pot interopera cu software
.NET mai nou.
Suport pentru numeroase limbaje de programare: pot fi create aplicații .NET
folosind orice număr de limbaje de programare (C#, Visual Basic, F#, C++ etc.)
Un motor de execuție comun pentru toate limbajele .NET: un aspect al acestui motor
îl reprezintă un set bine definit de tipuri de date pe care toate limbajele .NET le
înțeleg.
Integrarea limbajului: .NET suportă moștenire inter-limbaj, tratarea excepțiilor
inter-limbaj și depanarea codului inter-limbaj. De exemplu, puteți defini o clasă în C#
și să extindeți acest tip în Visual Basic.
O bibliotecă cuprinzătoare de clase: această bibliotecă asigură protecție față de
complexitatea apelurilor API de nivel jos și oferă un model obiect consistent utilizat
de toate limbajele .NET.
Un model de implementare simplificat: spre deosebire de COM, bibliotecile .NET nu
sunt înregistrate în registrele sistemului. Mai mult, platforma .NET permite existența
în armonie a mai multor versiuni ale aceluiași *.dll pe o singură mașină.
Microsoft a creat .NET Framework pentru a face mai ușoară dezvoltarea de aplicații pentru
diversele versiuni ale sistemului de operare Windows. Din acest motiv dezvoltarea aplica-
țiilor în .NET ar trebui să fie mai facilă decât în versiunile anterioare. .NET Framework
împreună cu limbajele .NET pot fi instrumente puternice, iar tot ce aveți de făcut este să
descoperiți modului în care acestea conlucrează prin intermediul mediului de dezvoltare
integrată Visual Studio.
.NET Framework este plasat între limbajul de programare (Visual Basic, C# etc.) și sistemul
de operare (de la Windows 98 și Windows NT până la Windows 8 și Windows Server 2012,
sau orice alte sub-versiuni ale acestora, cum ar fi cele destinate dispozitivelor mobile). .NET
Framework oferă funcționalități specifice sistemului de operare Windows, furnizând însă și
biblioteci care extind aceste funcționalități (calcule matematice, criptografie, accesarea baze-
lor de date etc.). Figura 2.1 ilustrează vizual relația între toate nivelele din .NET Framework.
O bună parte din dificultățile pe care le întâmpină programatorii când migrează la .NET
Framework provin deruta provocată de terminologia specifică. Pentru eliminarea oricăror
confuzii vom expune în continuare principalii termenii utilizați în dezvoltarea aplicațiilor
.NET. Din punctul de vedere al programatorului, în linii mari, .NET poate fi înțeles ca un
mediu de execuție și o bibliotecă cuprinzătoare de clase.
3
Medii și Tehnologii de Programare – curs
Figura 2.1. Ierarhia .NET Framework (.NET Framework 2.0 – anul 2005).
Base Class Library (BCL). Platforma .NET furnizează o bibliotecă de clase care este dispo-
nibilă tuturor limbajelor de programare .NET. Această bibliotecă de clase încapsulează nu
numai primitive precum fire de execuție, operații cu fișiere, sisteme de redare grafică și
interacțiunea cu diverse dispozitive hardware externe, ci furnizează și suport pentru anu-
mite servicii solicitate de majoritatea aplicațiilor din lumea reală.
Bibliotecile de clase definesc tot ceea ce aveți nevoie pentru dezvoltarea oricărui tip de
aplicație. De exemplu, puteți utiliza ASP.NET pentru construirea site-urilor web, WCF pentru
dezvoltarea de servicii în rețea, WPF pentru aplicații desktop cu interfețe grafice ș.a.m.d. De
asemenea, BCL permit interacțiunea cu documente XML, sistemul local de fișiere directoare,
comunicarea cu baze de date relaționale (ADO.NET) etc. Pentru scrierea aplicațiilor progra-
matorii pot utiliza biblioteca de clase împreună cu codul scris de ei înșiși.
Programele scrise pentru .NET Framework sunt executate într-o mașină virtuală care ges-
tionează programele în timpul rulării din punct de vedere al necesităților acestora. Această
mașină virtuală este cunoscută sub denumirea de Common Language Runtime (CLR) și
face parte din .NET Framework. Datorită faptului că programul va rula pe mașina virtuală
(CLR) programatorul nu are nevoie să ia în considerare tipul procesorului de pe calculatorul
care va rula aplicația. Toate programele .NET rulează sub supervizarea CLR, fiind garantate
anumite proprietăți și comportamente în ceea ce privește gestiunea memoriei, securitatea și
tratarea excepțiilor.
.NET Framework utilizează o arhitectură pe nivele, la baza căreia se situează Windows API
(vezi Figura 2.1). .NET Framework oferă o vedere orientată pe obiecte a funcțiilor sistemului
de operare, fără însă a le înlocui, astfel că majoritatea apelurilor din .NET Framework sunt
rezolvate în final ca apeluri într-unul din DLL-urile nucleului Windows. CLR reprezintă pri-
mul nivel care aparține lui .NET Framework, fiind responsabil pentru serviciile de bază .NET,
precum gestiunea memoriei, colectarea de gunoaie, tratarea structurată a excepțiilor, coor-
donarea firelor de execuție și efectuarea verificărilor de securitate. Ar trebui să imaginați
CLR ca fiind supervizorul tuturor aplicațiilor .NET: nu interacționați niciodată direct cu CLR,
însă toate aplicațiile voastre sunt controlate de acesta.
CLR oferă suport pentru mai multe limbaje de programare, asigurând un mediu de execuție
robust și sigur. De asemenea acesta simplifică procesul de distribuire și de management al
aplicației (scăpați de „coșmarul DLL”).
CLR rulează o formă de cod octet numită Common Intermediate Language (CIL), cunos-
cută și sub denumirea de Microsoft Intermediate Language (MSIL). Procesul de rulare a
unui program scris într-unul din limbajele .NET este ilustrat în Figura 2.2.
4
Introducere în Visual Studio .NET
5
Medii și Tehnologii de Programare – curs
excepție care apare ca urmare a unei erori. Dacă veți construi tipuri .NET care expun numai
caracteristici conforme cu CLS, puteți să fiți siguri că toate limbajele .NET le pot consuma.
Dimpotrivă, dacă utilizați un tip de dată sau structură de programare din afara CLS, nu puteți
avea garanția că toate limbajele .NET vor putea interacționa cu biblioteca dumneavoastră
.NET.
Cod gestionat și cod negestionat. Se spune că aplicațiile .NET execută cod gestionat
deoarece rulează sub controlul CLR și sunt împiedecate să ruleze cod nesigur care poate
afecta rularea sistemului sau poate compromite datele utilizatorilor. Spre exemplu, CLR
trebuie să prevină accesarea fișierelor sistem sau a regiștrilor sistem în cazul în care
aplicația a fost lansată dintr-o locație Internet care nu este de încredere. Prin contrast,
aplicațiile non-.NET, cum ar fi cele scrise în Visual Basic 6, execută cod negestionat, sau cod
nativ. Dintre toate limbajele de programare de la Microsoft, numai C++ poate produce atât
cod gestionat cât și cod negestionat, însă chiar și dezvoltatorii C++ ar trebui să recurgă la
scrierea de cod negestionat numai dacă este strictă nevoie – spre exemplu, pentru efectuarea
operațiilor low-level – deoarece numai codul gestionat beneficiază de avantajele platformei
.NET.
Deși Microsoft a inventat limbajul C#, acesta este documentat de organismul de standar-
dizare ECMA (European Computer Manufacturers Association), permițând oricui să imple-
menteze limbajul de programare C#. Acest lucru nu este ceva ipotetic. Proiectul open source
Mono (http://www.mono-project.com) pune la dispoziție instrumente pentru construirea
de aplicații C# care pot rula pe Linux, iOS și Android. Astfel, Mono poate rula fișierele binare
obținute pe platforme Windows cu Visual Studio .NET fără a mai fi nevoie de recompilarea
acestora. În Figura 2.3 este prezentat mediul MonoDevelop, un IDE GNOME gratuit, proiectat
special pentru programarea în C# și alte limbaje .NET.
6
Introducere în Visual Studio .NET
7
Medii și Tehnologii de Programare – curs
În continuare puteți alege fie să creați un proiect nou, fie să deschideți unul dintre ultimele
proiecte deschise în Visual Studio.
În funcție de componentele selectate la instalare, veți putea crea proiecte Visual Studio
dintre cele mai diverse, în funcție de limbajul de programare ales (Visual Basic, C#, Visual
C++, Visual F# sau JavaScript). Visual Basic și C# sunt singurele două limbaje care permit
crearea acelorași tipuri de proiecte (și a celor mai multe dintre limbajele .NET).
Astfel, pentru proiecte Visual Basic sau C# puteți crea de la aplicații Windows uzuale
(Windows Forms Application, Console Application, biblioteci de clase, servicii Windows,
controale personalizate etc.), până la aplicații web Windows Store, aplicații web, aplicații
WCF (Windows Communication Foundation), aplicații Silverlight, aplicații Windows Phone
ș.a.m.d. (vezi Figura 3.2).
8
Introducere în Visual Studio .NET
De asemenea, puteți să creați aplicații Visual Studio 2012 pornind de la o serie de modele
predefinite sau exemple online.
Figura 3.2. Dialogul pentru crearea unui proiect nou în Visual Studio 2012.
Figura 3.3 prezintă interfața mediului de dezvoltare integrat Visual Studio 2012 imediat
după crearea unui proiect nou C# de tip Windows Forms Application.
1
2
5
4
Figura 3.3. Configurația inițială a interfeței mediului de dezvoltare Visual Studio 2012.
Interfața este extrem de configurabilă, astfel încât poate să arate complet diferit dacă
rearanjați după bunul plac elementele de interfață. Orice s-ar întâmpla, puteți reveni la
9
Medii și Tehnologii de Programare – curs
10
Introducere în Visual Studio .NET
multe persoane pentru interogarea aplicației server. Datorită strânsei legături dintre aceste
două proiecte, este firesc ca ele să fie gestionate într-o singură soluție. Atunci când soluția va
fi deschisă, veți avea acces la toate fișierele din cadrul celor două proiecte.
Atât proiectele cât și soluțiile pot include fișiere asociate, care pot fi utile pentru dezvoltarea
aplicațiilor, dar care nu vor face parte din produsul final compilat. La dublu click pe numele
fișierelor, acestea vor fi deschise cu aplicația potrivită. Spre exemplu, un fișier cu extensia
.docx va fi deschis de către Visual Studio cu Microsoft Word.
Pentru asocierea unuia din aceste fișiere cu proiectul sau cu soluția dați click dreapta pe
numele proiectului/soluției în Solution Explorer, selectați comanda Add -> Existing Item
(sau din meniul Project -> New Item). Se va deschide o fereastră dialog pentru selectarea
fișierului dorit.
Pentru a adăuga o nouă componentă software la proiect dați click dreapta pe numele
proiectului în Solution Explorer, selectați comanda Add -> New Item (sau din meniul Project
-> New Item) și utilizați fereastra dialog pentru selectarea noii componente pe care doriți să
o adăugați la proiect (vezi Figura 3.4).
Un scenariu frecvent utilizat este acela în care codul sursă este plasat într-un proiect,
iar documentația în alt proiect din aceeași soluție.
11
Medii și Tehnologii de Programare – curs
Meniul FILE
Meniul File conține comenzi pentru creare, deschidere, salvare și închidere a proiectelor și a
fișierelor asociate acestora (Figura 3.5).
Figura 3.5. Meniul File cuprinde comenzi asociate cu soluția și cu fișierele acesteia
New – submeniul New permite crearea unui proiect nou, site Web (ASP.NET sau Serviciu
WCF), proiect Team Foundation Server (TFS) sau fișier (text, bitmap, icon, html, clasă etc.).
Comanda „Project From Existing Code” creează un proiect nou și permite alegerea fișierelor
care să fie incluse în noul proiect.
Open – submeniul Open conține comenzi pentru deschiderea unei soluții, a unui proiect, site
Web, proiect TFS sau fișier. Comanda Convert permite prin intermediul unui wizard conver-
sia proiectelor scrise în versiuni mai vechi de C# sau VB.
Save All – salvează toate fișierele modificate de la deschiderea acestora sau de la ultima
operație de salvare.
Export Template – acest wizard permite crearea unui șablon de proiect sau alte elemente
care pot fi utilizate mai târziu.
Page Setup și Print – permit configurarea imprimantei, respectiv tipărirea documentului
curent. Aceste comenzi sunt activate numai când are sens tipărirea documentului curent. De
exemplu, sunt activate atunci când vizualizați un fișier text (fișier sursă sau XML), însă sunt
dezactivate atunci când vizualizați un bitmap sau sunteți în Form Designer.
Meniul EDIT
Meniul Edit (Figura 3.6) conține comenzi care manipulează text sau alte tipuri obiecte.
Printre acestea clasicele comenzi Undo, Redo, Copy, Cut și Paste pe care le puteți găsi în
majoritatea aplicațiilor Windows.
12
Introducere în Visual Studio .NET
Figura 3.6. Meniul Edit conține comenzi pentru manipularea textului și a altor tipuri de obiecte
Cycle Clipboard Ring – Clipboard ring conține ultimele elemente copiate în clipboard.
Această comandă copiază în locația curentă elementul anterior din clipboard ring. Prin
utilizarea repetată a acestei comenzi, puteți parcurge elementele din clipboard ring până la
găsirea celui pe care îl doriți.
Go To – permite poziționarea rapidă pe o anume linie în fișierul sursă curent.
Advanced – submeniul Advanced conține comenzi pentru efectuarea unor formatări mai
complexe ale documentului, cum ar fi convertirea textului la majuscule sau minuscule, word
wrap, indentări, comentarea și decomentarea codului.
Bookmarks – submeniul Bookmarks conține comenzi pentru adăugarea și ștergerea
marcajelor, precum și poziționarea pe marcajele deja memorate.
Outlining – submeniul Outlining permite expandarea sau comprimarea secțiunilor de cod,
precum și activarea sau dezactivarea acestei opțiuni.
IntelliSense – oferă acces la facilitățile IntelliSense. Spre exemplu, comanda List Members
afișează lista cu proprietățile, metodele și evenimentele obiectului curent.
Refactor – conține câteva opțiuni utile pentru code refactoring. Vom expune în continuare
funcțiile de refactoring oferite de Visual Studio.
1) Comanda Rename – este utilă atunci când doriți să redenumiți o variabilă sau o metodă,
deoarece o redenumește în toate locurile în care aceasta este referită în codul proiectu-
lui.
2) Comanda Extract Method – oferă o modalitate simplă de creare a unei metode noi por-
nind de la un fragment de cod.
3) Comanda Encapsulate Field – ajută programatorii la crearea unei proprietăți pornind de
la un câmp privat al unei clase.
4) Comada Extract Interface – oferă o modalitate de creare rapidă a unei interfețe pornind
de la membrii unei clase, structuri sau interfețe.
5) Comanda Remove Parameters – oferă o modalitate mai simplă de ordonare a parame-
trilor unei metode, atât în definiția acesteia cât și în apelurile ei.
13
Medii și Tehnologii de Programare – curs
6) Comanda Reorder Parameters – oferă o modalitate mai simplă de ștergere a unuia sau a
mai multor parametri ai unei metode, atât în definiția acesteia cât și în apelurile ei.
Meniul VIEW
Meniul View (Figura 3.7) conține comenzi care permit ascunderea sau afișarea diverselor
ferestre sau bare de instrumente din cadrul mediului de dezvoltare integrat Visual Studio
2012.
Figura 3.7. Meniul View permite afișarea și ascunderea ferestrelor și a barelor cu instrumente Visual Studio
Code – comanda Code deschide fișierul selectat într-un editor de cod. Spre exemplu, pentru
editarea codului asociat unui formular (de exemplu, Form1), dați click pe formular
(Form1.cs – pentru proiect C#, sau Form1.vb – pentru proiect Visual Basic) în Solution
Explorer și selectați View Code.
Designer – comanda Designer deschide fișierul selectat într-un editor grafic, dacă există
vreunul definit pentru acel tip de fișier. Spre exemplu, dacă fișierul este un formular, Visual
Studio îl deschide într-un editor grafic de formulare. Dacă fișierul este o clasă sau o altă
componentă de cod, meniul View ascunde această comandă deoarece Visual Studio nu
dispune de un editor grafic pentru acest tip de fișiere.
Open – deschide elementul selectat cu editorul implicit pentru acesta.
Open With – deschide elementul selectat cu un editor la alegere. Spre exemplu, puteți
deschide codul asociat unui formular cu un editor de text.
14
Introducere în Visual Studio .NET
Tab Order – În mod implicit, în Visual Studio 2012, această comandă nu apare în meniul
View, însă poate fi adăugată prin dialogul deschis de comanda Tools -> Customize. Dacă un
formular conține controale, comanda Tab Order afișează deasupra fiecărui control o cifră
care indică ordinea în care vor fi selectate controalele la apăsarea tastei TAB (în timpul
rulării). Pentru a defini această ordine trebuie să dați click pe controale în ordinea dorită.
Meniul PROJECT
Meniul Project (Figura 3.9) conține comenzi care vă permit adăugarea, respectiv ștergerea
de elemente în/din proiectul curent. În funcție de elementul selectat în Solution Explorer
diferă și comenzile disponibile în acest meniu.
Figura 3.9. Meniul Project vă permite adăugarea de fișiere și referințe în proiectul curent
15
Medii și Tehnologii de Programare – curs
După ce ați adăugat o referință la un proiect, puteți să accesați prin cod obiectele publice ale
referinței. Spre exemplu, dacă fișierul MyMathLibrary.dll definește clasa MathTools, iar acea
clasă definește funcția publică Fibonacci, un proiect care are o referință la acest DLL poate
utiliza următoarea secvență de cod:
MyMathLibrary.MathTools math_tools = new MyMathLibrary.MathTools();
MessageBox.Show("Fib(5) = " + math_tools.Fibonacci(5));
Add Service Reference – afișează un dialog prin care puteți să adăugați referințe la servicii
Windows Communication Foundation (WCF) și ADO.NET Data.
Set as StartUp Project – setează unul dintre proiectele unei soluții (cel curent selectat) ca
fiind proiectul care va rula implicit la rularea soluției curente.
[Nume proiect] Properties – această comandă afișează paginile cu proprietăți ale pro-
iectului. Proprietățile vor diferi de la un tip de proiect la altul. Astfel, pentru un proiect C# de
tip Windows Forms Application pagina Application a proprietăților va fi cea din Figura 3.10.
În cazul unui proiect Visual Basic de tip Windows Forms Application pagina Application a
proprietăților acestuia va conține unele diferențe, majoritatea provenind din caracteristicile
diferite pe care le pune la dispoziție Visual Basic față de C# (vezi Figura 3.11).
Una dintre diferențele proprietăților unui proiect Visual Basic și ale unuia C# provine din
modul diferit prin care se indică punctul de intrare în aplicație. În C# punctul de intrare într-
o aplicație este funcția Main. Implicit, proiectele C# conțin fișierul Program.cs care o imple-
mentează. Pentru proiectele C# de tip Windows Forms Application funcția Main creează o
instanță a clasei Form1 pe care o afișează pe ecran:
16
Introducere în Visual Studio .NET
În C# pot exista mai multe fișiere sursă care să implementeze funcția Main. Din pagina de
proprietăți puteți indica fișierul sursă care implementează varianta dorită de dumnea-
voastră (Figura 3.12).
În cazul proiectelor Visual Basic de tip Windows Forms Application punctul de intrare în
aplicație se definește mai simplu, selectând în caseta „Startup object” fie numele ferestrei de
start (vezi Figura 3.13), fie numele unui modul de program care implementează funcția Main
(dacă în proiect există așa ceva).
17
Medii și Tehnologii de Programare – curs
Diferențele dintre proiectele C# și Visual Basic nu se opresc însă aici. În fereastra de proprie-
tăți a proiectelor Visual Basic se poate alege condiția de terminare a execuției aplicației (vezi
Figura 3.14). Implicit, execuția aplicațiilor Visual Basic de tip Windows Forms Application se
termină atunci când se închide fereastra de start (lucru valabil și pentru proiectele C#, deși
această opțiune lipsește de pe fereastra de proprietăți a acestora).
Această setare implicită nu este potrivită pentru aplicațiile Visual Basic care conțin mai
multe ferestre, deoarece nu este permisă închiderea ferestrei de start fără a se încheia
execuția aplicației, chiar dacă pe ecran se afișează în loc alte ferestre. În acest caz se va
selecta opțiunea de închidere a aplicației numai atunci când se închide și ultima fereastră de
pe ecran. Acest lucru se poate implementa și în C#, însă cu ceva mai mult efort din partea
programatorului.
Pe pagina Compile a proiectelor Visual Basic există patru proprietăți care merită o atenție
specială (vezi Figura 3.13). Prima dintre ele, Option Explicit determină din partea Visual
Basic cerința ca toate variabilele să fie declarate înainte de a fi utilizate. Inactivarea acestei
opțiuni poate conduce uneori la bug-uri subtile. Spre exemplu, următoarea secvență de cod
intenționează să afișeze o listă a numerelor pare între 0 și 10. Din nefericire, o greșeală de
tastare face ca funcția Debug.WriteLine să tipărească valoarea variabilei j, nu a lui i. Deoarece
j nu este inițializat, codul produce la ieșire o listă de valori nule. Dacă setați Option Explicit la
valoarea „On”, compilatorul va semnala faptul că variabila j nu este declarată, iar problema
devine ușor de rezolvat.
For i = 1 To 10
If i Mod 2 = 0 Then Debug.WriteLine(j)
Next i
Figura 3.13. Pagina Compile a proprietăților unui proiect Visual Basic conține opțiuni importante pentru
controlul generării codului
A doua opțiune de compilare este Option Strict. Atunci când această opțiune este inactivă,
Visual Studio permite în cod conversii implicite de la un tip de dată la altul, chiar dacă
tipurile de date nu sunt întotdeauna compatibile. Spre exemplu, Visual Basic va permite
următoarei secvențe de cod să încerce copierea stringului s în întregul i. Dacă textul din
string se întâmplă să reprezinte o valoare numerică, precum în primul caz, va funcționa. În
cazul contrar, precum se vede în cel de al doilea caz, va apărea o eroare la rulare.
18
Introducere în Visual Studio .NET
Dim i As Integer
Dim s As String
s = ”10”
i = s ’Corect.
s = ”Hello”
i = s ’Incorect.
Dacă activați opțiunea Option Strict, Visual Studio vă va avertiza cu privire la incompati-
bilitatea dintre cele două tipuri de date, astfel că veți putea rezolva ușor problema în timp ce
scrieți codul. Veți putea utiliza funcții de conversie de date precum CInt, Int și Integer.Parse
pentru convertirea stringului la întreg, însă va trebui să efectuați explicit aceste acțiuni.
Acest lucru va duce la diminuarea șansei de apariție a erorilor de conversie.
Pentru evitarea confuziilor sau a unor sesiuni lungi și obositoare de depanare, ar trebui să
setați permanent opțiunile Option Explicit (On) și Option Strict (On).
Directiva de compilare Option Compare, poate lua valorile „Binary” sau „Text”. Dacă setați
Option Compare la „Binary”, Visual Basic compară stringurile pe baza reprezentării lor
binare. Dacă setați Option Compare la „Text”, Visual Basic compară stringurile folosind o
metodă case-insensitive care depinde de setările calculatorului. Compare Binary este mai
rapidă, dar poate să nu producă întotdeauna rezultatele așteptate.
Ultima directivă de compilare, Option Infer poate lua valorile „On” sau „Off”. Odată setată pe
„On”, este activată opțiunea de deducere a tipului unei variabile locale, în cazul în care,
pentru respectiva variabilă, tipul acesteia nu a fost precizat explicit (vezi Figura 3.14).
Toate cele patru opțiuni de compilare pot fi setate local, la nivel de fișier, acestea având
prioritate față de opțiunile globale, setate la nivel de proiect.
Și în C# poate fi utilizată opțiunea de deducere a unei variabile. Aceasta se aplică însă numai
variabilelor locale al nivel de metodă, declarându-le ca fiind de tipul implicit var. Compila-
torul este cel care determină tipul variabilei în funcție de valoarea care îi este atribuită.
Practic este același lucru ca și când ați fi declarat variabila ca fiind de tipul dedus. Exemplu:
static void Main(string[] args)
{
var a = 5.23;
var b = 5.23f;
var c = "text";
var d = 5;
Console.WriteLine("Variabila a este de tipul {0}", a.GetType().ToString());
Console.WriteLine("Variabila b este de tipul {0}", b.GetType().ToString());
Console.WriteLine("Variabila c este de tipul {0}", c.GetType().ToString());
Console.WriteLine("Variabila d este de tipul {0}", d.GetType().ToString());
}
Dacă în Solution Explorer selectați numele soluției apoi apelați comanda Properties din
meniul Project, Visual Studio afișează fereastra cu proprietățile soluției (Figura 3.15). În
19
Medii și Tehnologii de Programare – curs
cazul în care soluția conține mai multe proiecte puteți alege care să fie proiectul de start
(acesta va fi compilat și depanat prima dată).
Meniul BUILD
Meniul Build (Figura 3.16), conține comenzi care permit compilarea proiectelor dintr-o
soluție.
20
Introducere în Visual Studio .NET
Configurațiile Release utilizează mai multe optimizări decât configurațiile Debug, astfel încât
ele furnizează programe executabile mai mici și mai rapide. Acestea nu includ suport pentru
depanare, astfel că nu veți putea depana un program compilat pentru release.
În caseta combo „Active solution configuration” selectați <New...> pentru crearea unei noi
configurații. Atunci când selectați aceasta, Visual Studio va fișa un dialog în care puteți da un
nume configurației și puteți selecta o configurație existentă de la care vor fi copiate valorile
implicite.
Veți putea astfel să indicați compilatorului că doriți ca unele proiecte din cadrul soluției să
fie compilate folosind configurația Debug, iar altele folosind configurația Release. Evident,
cele compilate cu Release nu vor putea fi depanate ulterior. Acest mod de abordare a
problemei poate fi util în cazul în care doriți să predați anumite proiecte clienților
(versiunile release), în timp ce versiunile debug ale proiectelor continuați să le dezvoltați.
Dacă debifați caseta „Build” asociată unui proiect, acel proiect va fi exclus din cadrul
operațiilor de construire. La construirea soluției acesta nu va fi compilat. Visual Studio
afișează rezultatele compilării în fereastra Output și contorizează numărul de proiecte
necompilate. Următoarea linie arată un exemplu în care, la construirea unei soluții care
conține două proiecte, un proiect a fost compilat iar celălalt nu.
========== Build: 1 succeeded, 0 failed, 0 up-to-date, 1 skipped ==========
Meniul DEBUG
Meniul Debug (Figura 3.18), conține comenzi care vă ajută să depanați un program. Aceste
comenzi vă ajută să rulați un program în mod depanare (debugger), să vă deplasați prin cod,
să setați și să eliminați breakpoint-uri și, în general, să urmăriți execuția codului pentru a
observa modul în care acesta rulează, în speranța găsirii eventualelor erori.
21
Medii și Tehnologii de Programare – curs
Figura 3.18. Meniul Debug conține comenzi pentru depanarea unei aplicații.
Comenzile vizibile în meniu se modifică în funcție mai multe condiții, cum ar fi: tipul
fișierului deschis, starea programului (dacă programul rulează sau nu), linia de cod care
conține cursorul, sau dacă linia de cod curentă conține un breakpoint.
Iată o scurtă descriere a unor comenzilor asociate meniului Debug:
Windows – Acest submeniu pune la dispoziție alte ferestre ce au legătură cu depanarea.
Continue – Comanda reia execuția unui program. Programul va rula până la terminarea
execuției acestuia, până la întâlnirea unui breakpoint sau până la oprirea manuală a execuției
lui.
Break All – Oprește execuția tuturor programelor rulate în mod depanare. Comanda aceasta
poate fi utilă dacă mai multe programe rulează în strânsă legătură unul cu celălalt.
Stop Debugging – Oprește execuția programului și termină sesiunea de depanare.
Detach All – Detașează debugger-ul de orice proces de care acesta este atașat. Acest lucru nu
duce la oprirea acestor procese.
Terminate All – Oprește orice proces la care este atașat debugger-ul.
Restart – Oprește procesul care rulează și repornește proiectul setat ca implicit.
Attach to Process – Afișează un dialog care permite să atașați debugger-ul la un proces care
rulează.
Exceptions – Această comandă afișează un dialog care conține o listă de erori posibile. Dacă
bifați în dreptul unei erori caseta „Thrown”, debugger-ul se va opri ori de câte ori va apărea
eroarea selectată. Dacă bifați „User-unhandled”, debugger-ul se va opri la apariția acelei
erori, iar programul nu va putea să o trateze nici măcar cu ajutorul codului de tratare a
excepțiilor.
22
Introducere în Visual Studio .NET
Step Into – Face ca debugger-ul să execute linia de cod curentă. Dacă această linie apelează o
funcție sau procedură, punctul de execuție se mută în acea procedură.
Step Over – Face ca debugger-ul să execute linia de cod curentă. Dacă această linie apelează
o funcție sau procedură debugger-ul apelează acea rutină, dar nu va intra în interiorul
codului acesteia decât dacă acea rutină conține un breakpoint.
Step Out – Această comandă face ca debugger-ul să ruleze până la părăsirea rutinei care se
află în execuție, apoi execuția se va întrerupe la întâlnirea liniei de cod care a apelat acea
rutină.
QuickWatch – Afișează un dialog care oferă informații legate de obiectul din secvența de cod
selectată. Din această fereastră puteți modifica valoarea unei variabile sau să o adăugați la
fereastra Watch.
Una dintre cele mai utile comenzi pentru fereastra Immediate este Debug.Print. De exemplu,
comanda Debug.Print x afișează valoarea variabilei x. Puteți utiliza semnul ? ca abreviere a
acestei comenzi (123 reprezintă valoarea variabilei x afișată în fereastră):
>? x
123
În cazul de față puteți verifica în fereastra Immediate dacă un anumit fișier există, evitând
astfel apariția unei erori în program:
? System.IO.File.Exists(”C:\Program Files\Customer Orders\Summary” & _
DateTime.Now().ToString(”yymmdd”) & ”.dat”)
Meniul FORMAT
Meniul Format (Figura 3.19), conține comenzi pentru aranjarea controalelor pe un formular.
23
Medii și Tehnologii de Programare – curs
Figura 3.19. Meniul Format conține comenzi pentru formatarea și aranjarea controalelor pe un formular.
Meniul TOOLS
Meniul Tools (Figura 3.20), conține diverse utilitare și instrumente care nu au fost
considerate potrivite pentru a fi cuprinse în cadrul altor meniuri.
24
Introducere în Visual Studio .NET
Spy++ – Această comandă lansează o unealtă numită Spy++, care vă permite să vedeți
mesajele trimise către aplicație.
External Tools – Afișează un dialog care vă permite să adăugați/ștergeți comenzi în/din
meniul Tools. Puteți, de exemplu, să adăugați comenzi pentru lansarea oricărei aplicații pe
care o considerați utilă.
Customize – permite modificarea comenzilor din meniurile și barele cu instrumente ale
Visual Studio 2012.
O facilitate a editorului de cod din pachetul Microsoft Visual Studio, foarte utilă programato-
rilor, este IntelliSense. Aceasta implementează autocompletarea codului scris de
programator (automat – în diverse momente ale scrierii codului sursă, sau manual – prin
combinația de taste CTRL+Spațiu), servind de asemenea ca documentație pentru numele
variabilelor, funcțiilor, metodelor sau evenimentelor unui obiect (Figura 3.22).
25
Medii și Tehnologii de Programare – curs
26
Introducere în Visual Studio .NET
27