Sunteți pe pagina 1din 27

2. Introducere în Visual Studio .

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.

2.1. Limbajele Visual Basic și Visual C#


Limbajele de programare Visual Basic și C# pot fi utilizate pentru multe categorii de aplicații,
cum ar fi site-uri web, aplicații dektop, jocuri, aplicații mobile sau utilitare în linie de
comandă. Dintre acestea două, în ultima decadă, C# a fost, poate, limbajul cel mai des folosit
de către dezvoltatorii de aplicații Windows, astfel că atunci când Microsoft a anunțat că
Windows 8 va introduce un nou stil de aplicații optimizate pentru dispozitive cu ecran tactil,
nu a fost o surpriză faptul că ele au fost printre cele patru limbaje de programare care oferă
suport complet pentru aplicațiile Metro (celelalte două fiind C++ și JavaScript).
Limbajul Visual Basic derivă din limbajul BASIC (Beginner's All-purpose Symbolic
Instruction Code), sau, mai precis, din versiunea Microsoft a limbajului BASIC – QuickBasic.
Prima dată când a apărut, Visual Basic a revoluționat programarea Windows. Prin tratarea
multor aspecte ale procesării evenimentelor Windows, acesta a permis programatorilor să
se concentreze asupra detaliilor specifice aplicațiilor în loc să se risipească în probleme de
rutină ce țin de programarea Windows.
În ceea ce privește stilul de programare, Visual Basic a urmărit o cale diferită față de alte
limbaje, precum cele din familia limbajelor C, anume aceea de a oferi un mediu de
programare mai productiv și, în general, o sintaxă mai intuitivă. În orice caz, sintaxa Visual
Basic nu era prea recomandată celor care doreau să dezvolte aplicații orientate pe obiecte.
Dezvoltatorii software puteau, totuși, să construiască aplicații sigure, fiabile și extensibile,
însă aveau nevoie de ceva experiență.
Visual Studio .NET a reușit să rezolve multe dintre deficiențele versiunilor anterioare. Astfel,
Visual Basic conține numeroase îmbunătățiri, apropiindu-se ca stil de programare de C++,
dar, în același timp, păstrând sintaxa specifică limbajului. Visual Basic .NET conține
modificări menite să-l alinieze la CLR (Common Language Runtime) și la celelalte limbaje de
programare .NET. Astfel, include o nouă modalitate de tratare a erorilor, sintaxe noi pentru
declarații și inițializări de variabile, supraîncărcarea funcțiilor și a subrutinelor și un model
mai puternic pentru crearea claselor care include moștenire reală (comparativ cu versiunile
anterioare ale limbajului, care permiteau declarații de clase, însă nu și mecanisme de
moștenire).
Versiunile mai noi de Visual Basic .NET adaugă facilități noi care fac din Visual Basic un
limbaj mai puternic ca oricând. Astfel, acesta include noi facilități de limbaj și îmbunătățiri
specifice programării orientate pe obiecte.
Visual Basic .NET poate fi văzut ca o evoluție a clasicului Visual Basic, implementat însă pe
Microsoft .NET Framework. Introducerea acestuia a generat unele controverse în rândul
comunității de dezvoltatori prin faptul că Visual Basic a suferit modificări majore care rup
compatibilitatea cu versiunile anterioare (compatibilitatea de sus în jos). Proiectele mai
Medii și Tehnologii de Programare – curs

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.2. .NET Framework


Înainte ca Microsoft să lanseze platforma .NET, dezvoltatorii software care creau aplicații
pentru familia de sisteme de operare Windows adeseori utilizau modelul de programare
COM (Component Object Model). Acest model permitea dezvoltatorilor software să constru-
iască biblioteci de cod care să fie partajate între diferite limbaje de programare. De exemplu,
un programator C++ putea construi o bibliotecă COM care să fie utilizată de către un progra-
mator Visual Basic. Acest caracter independent de limbaj al COM a fost cu siguranță util; în
orice caz, COM a fost afectat de infrastructura complicată, un model fragil de implementare și
era posibil numai pe sistemul de operare Windows.

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

Figura 2.2. Diagrama CLR

Intermediate Language (IL sau MSIL). Spre deosebire de limbajele de programare


tradiționale compilatoarele .NET nu produc cod nativ care să poată fi executat direct de către
procesor. În schimb, acestea produc așa-numitul cod IL, care reprezintă un soi de limbaj
mașină pentru un procesor virtual care nu corespunde niciunui procesor fizic. Deși codul IL
este la un nivel mai jos decât majoritatea limbajelor de programare moderne, acesta este la
un nivel mai înalt decât limbajul de asamblare pur. IL este un limbaj orientat pe stivă (stack-
oriented) care nu adresează direct regiștrii procesorului și nu are legătură cu conceptele
specifice limbajelor de nivel înalt (stringuri, excepții sau crearea obiectelor).
Limbajele .NET. Deși limbajele Visual Basic și Visual C# (spre exemplu) au sintaxă diferită și
cuvinte cheie diferite, ele sunt în linii mari echivalente, ambele permițând utilizarea .NET
Framework la capacitate maximă. În plus, toate limbajele .NET Framework sunt compilate la
cod MSIL, care apoi este compilat în cod nativ. Din această cauză, nu pot fi sesizate diferențe
notabile între limbaje diferite. O excepție de la această regulă este cazul unei aplicații care
utilizează pointeri și cod nesigur (unsafe code). Aceasta poate rula semnificativ mai rapid
decât o aplicație echivalentă scrisă în C# sau Visual Basic.
Compilatorul Just-in-Time (JIT Compiler). Deoarece nici un procesor nu poate executa
cod IL, CLR trebuie să îl convertească în cod nativ în timpul rulării programului prin lansarea
compilatorului JIT și transmiterea către acesta a adresei funcției cu care pornește aplicația
(de obicei, într-o aplicație Visual Basic, procedura Sub Main). Atunci când procedura
principală apelează alte metode, .NET utilizează compilatorul .NET pentru transformarea
codului IL din aceste metode în cod nativ, apoi execută codul nativ. Această compilare „din
zbor” este efectuată numai o singură dată pentru fiecare metodă pe durata de viață a
aplicației, deoarece codul nativ este păstrat în memorie și reutilizat atunci când o metodă
este apelată din nou.
Common Type Specifications (CTS). Acest set de specificații dictează modul în care un tip
de dată expune câmpuri, metode, proprietăți și evenimente; de asemenea definește modul în
care un tip de dată poate moșteni alt tip de dată și poate supraîncărca membrii acestuia.
Datorită faptului că toate limbajele .NET recunosc aceste specificații, acestea pot face schimb
de date, pot utiliza sau moșteni tipuri definite într-un alt limbaj. Spre exemplu, puteți scrie o
clasă Visual Basic care să moștenească o altă clasă scrisă în C#, și puteți scrie o clasă C# care
implementează o interfață definită Visual Basic.
Common Language Specifications (CLS). Acest set de specificații dictează minimul de
caracteristici pe care un limbaj de programare trebuie să le aibă pentru a face parte din
categoria limbajelor .NET. Spre exemplu, toate limbajele .NET trebuie să poată opera cu
tipuri de date primitive precum stringuri sau întregi, și trebuie să fie capabile să proceseze o

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.

În lumea .NET, limbajele de programare devin doar o modalitate de a interacționa cu .NET


Framework și, în consecință, cu sistemul de operare Windows. Toate programele au nevoie
de un set de reguli stabilite pentru interpretarea fluxului de instrucțiuni din cadrul progra-
melor. Limbajul de programare .NET furnizează un set de reguli, iar .NET Framework pune la
dispoziție obiectele și evenimentele cu care se poate interacționa.
În esență, orice lucru pe care Windows îl poate face este cuprins în cadrul .NET Framework.
În mod specific, .NET Framework dă un nume programatic fiecărui obiect și eveniment pe
care Windows îl poate controla. Orice programator poate utiliza acel nume pentru a se referi
în cod la orice are legătură cu sistemul de operare. De exemplu, doriți să îi transmiteți
imprimatei să efectueze două copii ale documentului vostru? Încercați:
My.Computer.Printers.DefaultPrinter.PrinterSettings.Copies = 2

Aveți nevoie să desenați pe ecran elemente grafice de culoare albastră? Încercați:


System.Drawing.Brushes.Blue

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

Figura 2.3. Scrierea unei aplicații C# folosind IDE-ul MonoDevelop.

7
Medii și Tehnologii de Programare – curs

3. Mediul de dezvoltare integrat Visual


Studio 2012

3.1. Scurtă prezentare a mediului de dezvoltare integrat (IDE)


Imediat după pornirea Visual Studio 2012 acesta este pregătit pentru a începe să lucrați cu el
(Figura 3.1).

Figura 3.1. Mediul Visual Studio 2012 imediat după pornire.

Î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

modul inițial de organizare a interfeței mediului de dezvoltare accesând comanda de meniu


Window -> Reset Window Layout.
Elementele cheie ale mediului de dezvoltare vizibile în Figura 3.3 sunt numerotate după cum
urmează.
1. Meniuri – conțin comenzi standard Visual Studio. Acestea manipulează elementele
soluției curente și ale modulelor componente ale acesteia. Visual Studio activează sau
dezactivează meniurile și comenzile disponibile în funcție de obiectele selectate curent. În
Figura 3.3, este deschis Form Designer (marcat cu numărul 4), astfel că mediul de dezvoltare
afișează meniurile și comenzile pentru proiectarea interfețelor ferestrelor.
2. Toolbars – Barele de instrumente conțin comenzile cel mai frecvent utilizate. Aceleași
comenzi pot fi disponibile atât în meniuri cât și în barele de instrumente (pentru o apelare
mai rapidă). Mediul de dezvoltare integrat definește o multitudine de bare de instrumente
printre care Standard, Layout, Build, Debug și Text Editor. Puteți construi de asemenea
propriile bare de instrumente pentru accesarea rapidă a instrumentelor favorite.
3. Toolbox – Caseta cu instrumente conține instrumente potrivite cu obiectul curent selectat
și cu tipul de proiect la care lucrați. În Figura 3.3 este selectat modul Form Designer, astfel că
Toolbox va conține instrumentele potrivite pentru un Form Designer: controale și
componente uzuale Windows, plus instrumente din alte categorii: Menus & Toolbars, Data,
Components, Reporting, etc. Pentru alte categorii de proiecte acestea pot să difere. Spre
exemplu, un proiect de tip Web Application va afișa numai controale și componente Web.
4. Form Designer – permite proiectarea designului grafic al unei ferestre din cadrul
proiectului. Acest spațiu (spațiul principal de lucru al mediului) este împărțit între
designerul de ferestre și editorul de cod. Dacă adăugați pe suprafața ferestrei un control din
caseta cu instrumente, puteți utiliza fereastra de proprietăți (marcată cu 6) pentru modifi-
carea proprietăților controlului nou desenat. În Figura 3.3 nu este selectat nici un control,
astfel că fereastra de proprietăți va afișa proprietățile ferestrei.
5. Solution Explorer – acesta vă permite să gestionați fișierele asociate cu soluția curentă.
Spre exemplu, în Figura 3.3, puteți selecta Form1.cs din Solution Explorer apoi să dați click
pe butonul View Code (al treilea de la dreapta în partea de sus a ferestrei Solution
Explorer) pentru a deschide editorul de cod asociat ferestrei. Puteți de asemenea să dați
click dreapta pe un obiect în Solution Explorer pentru a avea acces la comenzile asociate
acelui obiect.
6. Properties – fereastra de proprietăți vă permite modificarea proprietăților unui obiect în
timpul desenării interfeței (design time). Atunci când selectați un obiect în Form Designer
sau în Solution Explorer, fereastra de proprietăți afișează proprietățile acelui obiect. Pentru
a modifica valoarea unei proprietăți, dați click pe proprietate și introduceți noua valoare.
7. Output / Error List – fereastra Output poate afișa mesaje de stare pentru diferite
caracteristici din mediul de dezvoltare integrat. Fereastra Error List afișează erorile si
avertismentele (warnings) din proiectul curent. Spre exemplu, dacă o variabilă este folosită
fără a fi declarată, această listă va afișa la compilare această eroare. Dacă o variabilă este
declarată, dar nu este folosită, lista va afișa la compilare un avertisment în acest sens.

3.1.2. Soluții și proiecte Visual Studio


Un proiect reprezintă un grup de fișiere care produc la ieșire un anumit rezultat. Această
ieșire poate fi, printre altele, un fișier executabil, o pagină web, un DLL care poate fi folosit în
cadrul altor proiecte sau un control grafic care să fie utilizat pe suprafața altor ferestre.
O soluție reprezintă un grup format dintr-unul sau mai multe proiecte care sunt gestionate
împreună. Spre exemplu, presupunem că dezvoltăm o aplicație server care oferă acces la o
anumită bază de date. De asemenea, dezvoltăm o aplicație client care va fi utilizată de mai

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).

Figura 3.4. Adăugarea unei componente noi la proiect

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.

3.1.1. Structura meniului


În continuare vor fi descrise meniurile cuprinse în mediul de dezvoltare Visual Studio 2012,
neîncercând însă o prezentare exhaustivă a comenzilor cuprinse în cadrul acestora. Ne vom
axa în consecință asupra unor comenzi mai importante, considerând inutilă prezentarea
unor comenzi uzuale sau foarte rar folosite.

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ă.

Figura 3.8. Stabilirea ordinii de selectare a controalelor cu comanda Tab Order

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

Iată o descriere a comenzilor asociate cu meniul Project:


Add New Item – afișează dialogul din Figura 3.4. Dialogul permite selecția dintr-o gamă
largă de elemente printre care fișiere text, fișiere bitmap și module de clasă.
Show All Files – această comandă face ca Solution Explorer să afișeze lista cu fișierele care,
în mod normal, sunt ascunse. Acestea includ fișiere de resurse asociate formularelor, clase
parțiale ascunse cum ar fi secvențe de cod generate automat, fișiere din directoarele OBJ și
BIN, care sunt create automat de Visual Studio atunci când compilează programul. În mod
normal nu aveți nevoie să interacționați direct cu aceste fișiere, astfel că ele sunt ascunse.
Selectați această comandă pentru afișarea lor, apoi selectați-o din nou pentru ascunderea lor.
Add Reference – permite în primă fază selectarea categoriei unui obiect extern, a unei clase,
sau a unei biblioteci pe care doriți să o găsiți. Puteți adăuga o referință la o componentă
.NET, la o componentă COM (Component Object Model), cum ar fi o bibliotecă ActiveX sau un
control creat în Visual Basic 6, sau la un alt proiect Visual Studio.

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.

Figura 3.10. Pagina Application a proprietăților unui proiect C#

Î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

static class Program


{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
}

Dacă programatorul dorește să modifice fereastra de start a aplicației va trebui modifice


codul din funcția Main astfel încât, la pornire, programul să afișeze altă fereastră.

Figura 3.11. Pagina Application a proprietăților unui proiect Visual Basic

Î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).

Figura 3.12. Indicarea punctului de intrare într-o aplicație C#

Î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

Figura 3.13. Indicarea punctului de intrare într-o aplicație Visual Basic

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).

Figura 3.14. Selectarea condițiilor de închidere a un program Visual Basic

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).

Figura 3.14. Deducerea tipului unei variabile cu directiva Option Infer

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());
}

La rularea aplicației va fi afișat următorul rezultat:


Variabila a este de tipul System.Double
Variabila b este de tipul System.Single
Variabila c este de tipul System.String
Variabila d este de tipul System.Int32

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ă).

Figura 3.15. Pagina de proprietăți a soluției.

Meniul BUILD
Meniul Build (Figura 3.16), conține comenzi care permit compilarea proiectelor dintr-o
soluție.

Figura 3.16 Meniul Build permite compilarea proiectelor.

Urmează o scurtă descriere a unor comenzilor asociate meniului Build:


Build Solution – Această comandă compilează numai acele fișiere și componente care au
fost modificate de la ultima compilare.
Rebuild Solution – această comandă șterge întâi fișierele temporare și intermediare ale
soluției (similar comenzii "clean"), apoi compilează de la zero toate fișierele și componentele
proiectelor din cadrul soluției curente.
Clean Solution – această comandă șterge fișierele temporare sau intermediare create la
compilarea soluției, păstrând doar fișierele sursă și rezultatele finale (fișierele EXE sau DLL).
Build [nume proiect] – Această comandă compilează proiectul curent. Visual Studio
examinează fișierele proiectului pentru a vedea dacă au apărut modificări de la ultima
compilare a proiectului. La orice modificare din cadrul fișierelor, Visual Studio recompilează
aceste fișiere și actualizează rezultatul.
Rebuild [nume proiect] – această comandă forțează recompilarea de la zero a proiectului
curent.

20
Introducere în Visual Studio .NET

Configuration Manager – comanda Configuration Manager afișează dialogul din Figura


3.17. Acest dialog poate fi folosit pentru a indica în ce mod se va compila un proiect
(debug/release) și platformele destinație (x64 sau x86). Puteți utiliza casetele de bifare
Build pentru a determina care proiect va fi compilat. Vă puteți folosi de această opțiune
pentru a evita compilarea anumitor proiecte din cadrul soluției curente. Dacă observați că
anumite părți din soluție nu sunt compilate, verificați opțiunile din Configuration Manager.

Figura 3.17. Configuration Manager

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.

Ferestrele Command și Immediate


Fereastra Command este folosită pentru a executa comenzi sau alias-uri direct din mediul
Visual Studio. Puteți executa atât comenzi de meniu cât și comenzi care nu apar în meniu.
Fereastra Command o puteți afișa prin comanda de meniu View -> Other Windows ->
Command Window sau prin scurtătura de taste Ctrl+Alt+A.
Fereastra Immediate este folosită în timpul depanării programelor pentru evaluarea
expresiilor, executarea instrucțiunilor, afișarea valorilor unor variabile ș.a.m.d. Aceasta vă
permite să introduceți expresii pentru a fi evaluate sau executate în timpul depanării
programelor. Fereastra Immediate este accesibilă din meniul Debug -> Windows ->
Immediate sau prin scurtătura de taste Ctrl+Alt+I.
Spre exemplu, din fereastra Command putem deschide fereastra QuickWatch pentru
variabila nume. Simbolul > reprezintă prompterul ferestrei.
>Debug.QuickWatch nume

În fereastra Immediate putem utiliza, de exemplu, următoarea linie de cod pentru


deschiderea unui fișier în mod citire:
Dim fs As FileStream = File.OpenRead( _
”C:\Program Files\Customer Orders\Summary” & _
datetime.Now().ToString(”yymmdd”) & “.dat”)

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”)

Ambele ferestre, Command și Immediate, includ suport pentru IntelliSense.

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.

Figura 3.20. Meniul Tools oferă acces la diferite instrumente și utilitare

Iată o prezentare a câtorva dintre comenzile cuprinse în meniul Tools:


Attach to Process – Afișează un dialog care vă permite să atașați debugger-ul la un proces
care rulează.
Connect to Database – Afișează dialogul Connection Properties, în care puteți defini o
conexiune la o bază de date. Conexiunea este adăugată la fereastra Server Explorer și puteți
să o utilizați ulterior.
Code Snippets Manager – Afișează fereastra Code Snippets Manager, care vă permite
adăugarea sau ștergerea fragmentelor de cod pe care le puteți insera în programele pe care
le scrieți.
Error Lookup – Afișează un dialog în care puteți afla, pe baza unui cod de eroare introdus de
dumneavoastră, o descriere a erorii respective.

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.

3.1.2. Editorul de cod Visual Studio 2012


Editorul de text din mediul de dezvoltare Visual Studio 2012 este adesea referit ca editor de
cod deoarece este utilizat pentru editarea codului programelor Visual Studio. Puteți să îl
folosiți de asemenea ca editor XML, HTML sau CSS.
Puteți deschide mai multe instanțe ale editorului de cod asociat diferitor formulare sau
module și puteți copia sau lipi secvențe de cod dintr-una într-alta. În meniul Window aveți
acces la toate documentele deschise în instanțe diferite ale editorului de cod.
Editorul de cod, în funcție de limbajul în care scrieți cod, oferă caracteristici cum ar fi:
 Acces la proprietățile, metodele și evenimentele obiectelor în modul design.
 Completarea instrucțiunilor pe baza IntelliSense.
 Secțiuni de cod care pot fi expandate sau comprimate, după preferință, cu ajutorul
directivei #region (în C#: #region … #endregion, în Visual Basic: #Region … #End Region),
precum se poate vedea în Figura 3.21.
 Fereastră de definire a codului care afișează codul sursă pentru un obiect sau
element.
 Opțiune de inserare a unor fragmente de cod predefinite (code snippets), care vă
permite să adăugați blocuri de cod prefabricate.
 Opțiuni pentru definirea indent-urilor, tab-urilor și a comportamentului la operații
de tip drag&drop.
 Pagini de cod unicode.
 Emulări ale editoarelor Emacs și Brief.

Figura 3.21. Definirea unei regiuni în codul unui proiect C#

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

Figura 3.22. IntelliSense în acțiune

Elemente ale editorului de cod


Editorul de cod din Visual Studio 2012 (Figura 3.23) prezintă următoarele elemente:
1. Panoul de cod. Acesta reprezintă zona în care este afișat pentru editare codul sau textul.
Acesta oferă facilități IntelliSense pentru limbajul în care scrieți codul.
2. Marginea pentru indicatori. Aceasta reprezintă o coloană gri, situată în partea stângă a
editorului de cod, pe care sunt afișați indicatori de tip breakpoint, bookmark sau
indicator pentru execuția liniei curente. Dacă dați click pe această margine veți seta un
breakpoint pe linia de cod corespunzătoare.
3. Marginea de selecție. Aceasta reprezintă o coloană, situată între marginea pentru
indicatori și fereastra de editare, pe care puteți da click pentru selectarea liniilor de cod.
Modificările făcute în cod sunt reflectate pe această margine cu diferite culori (galben:
modificările făcute în cod de la ultima salvare, verde: modificările salvate).
4. Listele „Class Name” și „Method Name”. Acestea reprezintă două liste derulante plasate în
partea superioară a editorului de cod. Lista „Class Name”, situată în partea stângă, oferă
acces la componentele clasei curente (de exemplu, pentru formulare – lista controalelor
situate pe formular, iar pentru module Visual Basic – lista claselor, funcțiilor,
procedurilor etc. declarate în interiorul acestuia). Lista „Method Name”, situată în partea
dreaptă, oferă, în funcție de elementul selectat în „Class Name”, acces la membrii
acestuia.

26
Introducere în Visual Studio .NET

Figura 3.23. Editorul de cod din Visual Studio 2012

27

S-ar putea să vă placă și