*********************
* Limbajul C sharp *
* ABC-doar *
*********************
*********************************
* autor RUSU MIRCEA AUREL VALER *
*********************************
*************************************
* MOTTO: *
* *
* "Festina lente" *
* *
* "Dans le doute,abtiens-toi" *
* *
*************************************
De ce C sharp:
Pentru ca este cel mai modern limbaj de programare.
C sharp exploateaza baza de date arhivata in platforma .Net,
oferind cele mai complexe solutii pentru orice problema de
programare.Modulele executabile sunt compilate in cod
intermediar si sunt portabile in orice mediu de programare.
C O N T I N U T
Generalitati . . . . . . . . . . . . . . . . . . . . . . 1
Compilatorul C sharp (optiuni) . . . . . . . . . . . . . 5
Limbajul C sharp . . . . . . . . . . . . . . . . . . . 13
Tipuri de data . . . . . . . . . . . . . . . . . . 13
Operatori . . . . . . . . . . . . . . . . . . . . . 21
Instructiuni . . . . . . . . . . . . . . . . . . . 23
Clase si obiecte . . . . . . . . . . . . . . . . . 25
Structuri . . . . . . . . . . . . . . . . . . . . . 35
Interfete . . . . . . . . . . . . . . . . . . . . . 38
Clasele de tip Delegates . . . . . . . . . . . . . 40
Indexatori (indexers) . . . . . . . . . . . . . . . 43
Generice . . . . . . . . . . . . . . . . . . . . . .44
Enumerari . . . . . . . . . . . . . . . . . . . . . 49
Iteratori . . . . . . . . . . . . . . . . . . . . . 51
Selectii LINQ . . . . . . . . . . . . . . . . . . . 55
Namespaces ( blocuri de memorie ) . . . . . . . . . 59
Nullable types . . . . . . . . . . . . . . . . . . .61
Unsafe code . . . . . . . . . . . . . . . . . . . . 63
Documentatia XML . . . . . . . . . . . . . . . . . 65
Structura si executia aplicatiilor . . . . . . . . . . .67
Application Domain . . . . . . . . . . . . . . . . .67
Atribute . . . . . . . . . . . . . . . . . . . . . 69
Containere de tip Collection . . . . . . . . . . . 72
Exceptii si erori . . . . . . . . . . . . . . . . . 76
Threads (procesarea paralela) . . . . . . . . . . . 79
Reflexie . . . . . . . . . . . . . . . . . . . . . .84
Securitatea Aplicatiilor . . . . . . . . . . . . . 87
Platforma .NET . . . . . . . . . . . . . . . . . . . . 91
Prezentare generala . . . . . . . . . . . . . . . 91
CLR (Common Language Runtime) . . . . . . . . . . 92
Class Library . . . . . . . . . . . . . . . . . . 93
System.Windows.Forms . . . . . . . . . . . . . . . 94
System.Data . . . . . . . . . . . . . . . . . . . 103
System.Timers . . . . . . . . . . . . . . . . . . 107
System.Runtime . . . . . . . . . . . . . . . . . . 108
System.Media . . . . . . . . . . . . . . . . . . . 109
System.IO . . . . . . . . . . . . . . . . . . . . 110
System.Diagnostics . . . . . . . . . . . . . . . . 112
Platforma Microsoft Visual C# 2008 . . . . . . . . . . 115
Windows Forms Application . . . . . . . . . . . . . 117
Exemplu OpenFile . . . . . . . . . . . . . . . . . 118
Exemplu Album Foto . . . . . . . . . . . . . . . . 121
Exemplu SoundPlayer . . . . . . . . . . . . . . . 124
Exemplu MediaPlayer . . . . . . . . . . . . . . . 126
Exemplu ChartFX . . . . . . . . . . . . . . . . . 128
Exemplu TextToHTML Converter . . . . . . . . . . . 129
Exemplu Web Browser . . . . . . . . . . . . . . . 130
Exemplu cu baza de date . . . . . . . . . . . . . 131
Exemplu cu PerformanceCounter . . . . . . . . . . 133
Windows Presentation Foundation . . . . . . . . . . 134
Exemple Grafica 2D . . . . . . . . . . . . . . . . 135
Exemplu Diagrama . . . . . . . . . . . . . . . . . 138
Exemple Grafica 3D . . . . . . . . . . . . . . . . 139
Exemple Animatie . . . . . . . . . . . . . . . . . 145
Exemplu Grid . . . . . . . . . . . . . . . . . . . 149
Exemplu Data Binding . . . . . . . . . . . . . . . 150
Exemplu cu baza de date . . . . . . . . . . . . . 152
Exemplu pentru documente XPS . . . . . . . . . . . 153
WPF Browser Application . . . . . . . . . . . . . . 157
Exemplu pentru WPFBrowser . . . . . . . . . . . . 157
Aplicatii cu ferestre multiple . . . . . . . . . . . 159
Concluzii generale,recomandari . . . . . . . . . . . . 160
GENERALITATI
Limbajul C# (C sharp) este un Standard International,dezvoltat de
firma Microsoft si patentat impreuna cu firmele Intel si Hewlett-Packard,
cu scopul de a oferii programatorilor un limbaj de programare modern,
multi-functional,orientat spre obiect,capabil sa exploateze noile tipuri
de resurse software oferite de platforma .Net.
Principalii dezvoltatori ai acestui limbaj sunt Anders Hejlsberg,
Scott Wiltamuth si Peter Golde,iar standardul de limbaj este reglementat
prin documentul numit ECMA-334/June 2006.
Limbajul nu este o inventie pura,ci este construit clasic,cu aceleasi
principii de baza ca si limbajul C++,sau Java.Majoritatea solutiilor
tehnice,au fost create prin extinderea celor din limbajele C++ si Java,
cu scopul de a simplifica munca programatorilor obisnuiti cu aceste doua
limbaje.Cunoasterea acestor limbaje nu este obligatorie,dar este utila.
Limbajul C# poate fi utilizat eventaul si pentru a invata de la zero
alfabetul programarii,dar acest manual se adreseaza programatorilor deja
avansati si presupune ca stiti deja sa lucrati cu clase si obiecte,sau cu
o interfata vizuala,ca stiti sa comunicati cu sistemul de operare si sa
gestionati file si fisiere,resurse si structuri de memorie.Cu alte cuvinte
acest "abecedar" nu este axat pe problemele fundamentale de programare,
ci doar pe solutiile oferite de limbajul C sharp.Vor fi prezentate si
notiunile fundamentale de limbaj,doar pentru a prezenta particularitatile
limbajului C#,sau pentru a propune solutii simple.
Specialistii,au caracterizat limbajul C# cu urmatoarele calitati:
multiparadigma: imperativa,functionala,generica si orientata spre obiect
sau component.
Prin paradigma se intelege un anumit stil de programare sau un anumit
tip de solutie tehnica,pentru o problema software oarecare.Principalele
paradigme de programare sunt:
1.Programarea imperativa -se face prin procesarea unor instructiuni,prin
care se schimba o anumita stare a sistemului.Programul este o lista
de astfel de comenzi si instructiuni.
2.Programarea functionala -se face prin evaluarea unor functii matematice
si evita structurile de date fixe sau variabile.Intregul program
este controlat cu ajutorul functiilor (Exemplu: functia Main).
3.Programarea procedurala sau structurata - se face prin fragmentarea
operatiilor necesare in seturi.Pentru a obtine o anumita stare a
sistemului,trebuiesc urmate mai multe astfel de seturi de operatii.
Cu alte cuvinte este un tip de programare modulara.
4.Programarea in flux -numita si programare dictata de evenimente,se face
prin raspuns la o anumita schimbare de stare a sistemului,denumita
eveniment (click de mouse,apasarea unei taste...etc.).In mod curent
legatura dintre eveniment si functiile programului se face fie
prin mesaje simple,fie prin thread-uri (linii de executie).
5.Programarea orientata spre obiect -utilizeaza structuri complexe de date
denumite obiecte,pentru a izola seturi de date in fragmente mai
mici de memorie,denumite si namespaces.Interactiunea cu restul
datelor din program se face prin functii specializate,denumite
metode.
6.Programarea declarativa -prezinta logica unui process fara a descrie
insa si fluxul de executie (Exemplu: clasele abstracte).
-2-
7.Programarea automata -este conceputa ca un set de stari finite ce pot
fi controlate cu ajutorul unor variabile de control sau a unor tabele
de schimbare de stare.Cu alte cuvinte,programul este format din mai
multe module automate sau semi-automate.
EXEMPLE: Limbajul Basic este imperativ,Limbajul Pascal este structurat si
functional,Limbajul C este pur functional,Limbajul Java este procedural si
"event-driven" iar platforma Visual Studio este formata exclusiv din
limbaje orienate spre obiect.
Se spune despre C sharp ca este multiparadigma,tocmai pentru ca accepta
toate aceste stiluri de programare,pentru a crea solutii personalizate,in
functie de necesitatile de moment.Cu alte cuvinte,daca este nevoie de o
singura linie de comanda,nu trebuie creat un obiect,sau o fereastra de
control ci se poate implementa direct comanda respectiva.Se va putea
construi un modul executabil ce contine o singura comanda.
Exemplu: -deschide automat un site de Web.
Aplicatiile C sharp,consuma minimum de memorie necesara,dar economia de
memorie nu este scopul principal pentru acest limbaj.Mai degraba,pentru
a simplifica munca programatorului,compilatorul C sharp include si un
mecanism de tip "automatic garbage collection",asemanator cu cel din Java,
prin care vaiabilele si constantele inutile sunt eliberate automat din
memorie,in functie de vechimea lor in program.
Compilatorul verifica foarte strict tipurile de data,dimensiunea
ariilor de date si variabilele neinitializate sau desuete,pentru a limita
la maximum procesarea de date "defective",sau imposibil de gasit (procese
redundante).
Aplicatiile scrise in limbaj C#,sunt portabile pe numeroase sisteme de
operare si sunt compatibile cu orice alt program ce utilizeaza standardul
CLI (Common Language Infrastructure) specificat prin documentul ECMA-335.
Standardul CLI propune un set de reguli cunoscut sub numele de CLS (Common
Language Specification) cu scopul de a asigura interoperabilitatea dintre
mai multe limbaje de programare.Codurile care respecta aceste reguli de
limbaj,sunt arhivate in niste biblioteci speciale si poarta numele de
"framework" (suport).O astfel de biblioteca este comuna pentru mai multe
limbaje de programare.Concret,limbajul C# exploateaza biblioteca .Net
(mai exact Microsoft.Net).Aceeasi biblioteca este exploatata si de catre
platforma Visual Basic 2010 si intregul set de programe din platforma
Visual Studio 2010.Ca rezultat,programele editate in Visual C# vor putea
fi portabile si pentru Visual Basic 2010.Mai mult decat atat,utilizatorii
platformei Visual Studio 2010 vor putea construi aplicatii ce utilizeaza
module scrise in limbaje diferite.Fiecare astfel de modul,va fi un simplu
executabil ce poate fi apelat la fel ca si o functie din program.
Numele de C sharp (C#) provine de la semnul "diez" din muzica si
indica faptul ca este vorba despre o incrementare a limbajului C.A fost
propusa initial denumirea de C++++,pentru a simboliza faptul ca este o
incrementare a limbajului C++,dar din motive comerciale s-a ales notatia
C#.Platforma .Net contine si alte limbaje denumite asemanator: J#,A#,Gtk#,
Cocoa# sau Qt#,toate cu scopul de a simboliza o incrementare a limbajului
de baza.Totusi,C# nu este un C++ cu functii auxiliare ci este un program
complet nou,cu alta biblioteca de functii si alta conceptie de organizare.
Nici compilarea si constructia aplicatiilor nu este similara.C sharp
construieste direct executabile,pentru sistemul de operare instalat.
-3-
Mai exact,compilatorul C# lucreaza in doua etape.In prima etapa codul
nativ este convertit la un limbaj intermediar: CIL (Common Intermediate
Language).In cea de a doua etapa,codul intermediar este transformat in
cod masina,in functie de sistemul de operare instalat.Acest mecanism este
asemanator cu cel al compilatorului Java.Principalul avantaj este dat de
faptul ca acelasi fragment de cod nativ,poate fi transformat in executabil
pentru Windows,Linux sau alt sistem de operare.Daca se creaza un sistem de
operare nou,nu va trebui rescris decat compilatorul.Toate aplicatiile
vechi vor putea fi utilizate pentru noul sistem de operare.Mai mult decat
atat,toate limbajele care exploateaza platforma .Net,utilizeaza acelasi
cod intermediar.Ca rezultat,aplicatiile pot utiliza module scrise in
limbaje de programare diferite.
Platforma .Net revolutioneaza si modul de arhivare a resurselor si
a bibliotecilor de coduri.Vechiul sistem utiliza celebrele biblioteci cu
alocare dinamica (DLL).Sistemul a fost exceptional la inceput,dar numarul
extrem de mare de file DLL noi,sau de versiuni incompatibile,a facut ca
gestionarea acestui tip de resurse sa fie tot mai dificila.In numeroase
cazuri,programele instalau versiuni diferite ale unei file DLL,versiuni
incompatibile cu restul programelor ce exploatatu aceasi fila DLL,avand
ca rezultat defectarea acestor programe.In plus,numeroasele file DLL,
puteau introduce o serie de conflicte de identificator,de supraincarcari
ale functiilor si claselor...etc.
Pentru a solutiona aceste inconveniente,platforma .Net a introdus un
nou tip de unitate logica pentru arhivarea resurselor,denumit "asamblare"
(assemblies).Aceste unitati pot fi de doua tipuri: aplicatii cu extensia
.exe (numite frecvent si executabile) si componente cu extensia .dll.
Primele sunt programe complete,executabile direct,iar ultimele sunt doar
obiecte,ce pot fi asamblate pentru a crea aplicatii noi.Din acest motiv,
in cazul limbajului C# se prefera expresia de "limbaj orientat spre
component" in locul celei de "limbaj orienat spre obiect".Deosebirile nu
sunt foarte mari,dar exista.Pentru robustetea suportului,limbajul C# nu
accepta mostenirea multipla.Fiecare obiect trebuie sa fie derivat din o
singura clasa ancestoare.Pentru a personaliza obiectul se pot utiliza
insa un numar nelimitat de interfete.
O astfel de unitate,denumita "asamblare" este mai complexa decat o
simpla arhiva pentru codul sursa si contine:1.-O serie de metadate in care
sunt arhivate informatii despre unitate,modul de acces si o lista de file
dependente (se mai numeste si "manifest") 2.-O serie de metadate in care
sunt descrise tipurile de data utilizate 3.-Codul intermediar propriu zis
(Codul MSIL) 4.-Resursele necesare.
Asamblarile pot fi de doua tipuri: private si partajate.Cele private
pot fi utilizate doar de catre aplicatia care le-a instalat,iar cele
partajate,pot fi utilizate in retea,de catre doi sau mai multi utilizatori
simultan.In majoritatea situatiilor,se vor prefera cele private,deoarece
sunt usor de realizat,sunt portabile,pot fi instalate in acelasi director
cu aplicatia,nu se preteaza la interactiuni cu structuri asemanatoare.
Cele partajate,se creaza mai dificil,cu instrumente specializate si
trebuie sa primeasca un cod criptografic unic,pentru a evita orice fel
de conflicte de identificator.In schimb,cele partajate pot fi utilizate
pentru a construi aplicatii noi,sau pot fi apelate din retea de la
locatii diferite.
-4-
O astfel de asamblare poate fi o fila unica,sau poate fi formata din
mai multe file,caz in care exista o fila centrala ce contine manifestul,
metadatele si link-urile spre restul filelor.
Cu alte cuvinte,platforma .Net reprezinta o noua etapa de dezvoltare
pentru relatia dintre aplicatie si resurse.Dupa cum anunta si numele,
suportul .Net este destinat mai ales pentru a crea aplicatii portabile,
de tip Web Forms sau pentru a facilita schimbul de date in retea,fie
cu ajutorul unor baze de date,fie cu alt tip de structuri de memorie.Dar
posibilitatile nu se rezuma la aplicatii de tip Web.Limbajul C# si
platforma .Net se pot combina pentru a obtine orice tip posibil de resursa
software.Initial a purtat numele de NGWS(Next Generation Windows Services)
pentru a sublinia faptul ca este vorba despre o tehnologie noua.Suportul
.Net are la baza urmatoarele standarde Internet: HTTP,XML,SOAP si UDDI.
Dintre trasaturile caracteristice limbajului C#,merita mentionat:
1. Nu exista functii sau variabile globale.Toate datele trebuie sa fie
declarate in interiorul unor clase.Membrii statici ai unei clase publice
pot substitui cu succes functiile si variabilele globale.
2. Tipul de data boolean este strict.Conditiile de tip while sau if vor
evalua strict date de tip boolean (True sau False),spre deosebire de
limbajul C++ unde sunt acceptate si valori de tip INT,ce pot fi convertite
la valori booleene (0 si 1).
3. C# nu lucreaza cu pointeri spre adrese de memorie,ci doar cu referinte
spre obiecte reale.Daca se utilizeaza pointeri,blocurile de cod vor fi
marcate ca nesigure (unsafe) si nu vor putea fi executate decat dupa ce
se solicita permisiunea utilizatorului.
4. Memoria nu poate fi eliberata explicit.Toate operatiile de eliberare
a memoriei se fac automat,prin "Garbage collection".
5. Pe linga try...catch,C# poate contine si bucle de tip try...finaly,
pentru a gestiona functiile de tratare a exceptiilor.
6. C# nu accepta mostenirea multipla,dar accepta oricate interfete.
7. Limbajul C# este foarte strict in ce priveste tipul de data.Nu se fac
nici un fel de conversii automate (cu exceptia extinderii tipului INT).
8. Limbajul C# unifica toate tipurile de data intr-un sistem comun denumit
CTS (Common Type System).Ca rezultat,toate tipurile de data,inclusiv cele
primitive (exemplu INT) sunt subclase ale clasei radacina: System.object.
Astfel mostenesc metodele clasei de baza (Exemplu: toate tipurile de data
vor avea si metoda: ToString()).
Dintre principalele facilitati noi,oferite de combinatia C# si .Net,
merita remarcate urmatoarele: independenta fata de platforma software,
interoperabilitatea cu alte limbaje,multi-threading,conectarea la serverul
SQL 2005,suportul pentru formate de 64 de biti,genericele,metodele anonime
si clasele partiale,iteratorii si delegatii (delegates).
Pentru a edita programele C#,exista doua solutii:
1.-editati codul cu orice editor de text,salvati fila cu extensia .cs si
apoi compilati fila cu utilitarul csc.exe,pentru a crea un executabil.
2.-utilizati una dintre versiunile de Visual C#.
Ambele metode au avantaje si dezavantaje.Prima metoda,se poate aplica
si in absenta unei conexiuni la Internet,ofera programe mici,simple si
robuste in care trebuie sa controlati fiecare linie de cod.Cea de a doua
metoda,este mult mai eleganta si comoda,permite construirea unor aplicatii
complexe si beneficiati de un numar foarte mare de instrumente automate.
-5-
COMPILATORUL C Sharp
Pentru a incepe sa invatati limbajul C# sunt necesare urmatoarele
etape:
1.Descarcati din reteaua Internet o versiune de platforma .Net,preferabil
3.5 sau mai noua si instalati suportul SDK in calculatorul d-voasta(daca
nu este deja instalat).
2.Optional,descarcati din reteaua Internet si documentele fundamentale
pentru standardul de limbaj: ECMA-334 si ECMA 335,eventual si ECMA TR/89.
3.Optional puteti descarca tutoriale,carti si articole de specialitate.
4.Daca doriti sa lucrati exclusiv intr-o platforma vizuala,descarcati si
instalati Visual C# 2008 (sau o versiune mai recenta).
Documentatia tehnica pentru platforma .Net nu se gaseste sub forma de
fila independenta si trebuie accesata in reteaua Internet (MSDN Library).
Dupa instalare,suportul (Framework) se va regasi in directorul:
C:\Windows\Microsoft.Net\Framework
cu un nume oarecare: v3.5 sau v3.0 sau v2.0.50727 etc.
Daca doriti sa simplificati accesul,redenumti directorul in v3 si
apoi copiati continutul direct pe unitatea C.In interiorul acestui
director se gaseste fila csc.exe in care este inclus compilatorul C#.
Pentru a va familiariza putin cu sistemul de lucru,puteti incepe sa
construiti primele module executabile.Codul sursa se poate edita cu
orice editor de text (de exemplu Notepad) si se salveaa in file cu
extensia .cs (practic se poate utiliza orice extensie,dar extensia cs
va fi inteleasa de orice alt programator).
EXEMPLU: deschideti Notepad si editati urmatorul cod:
using System
class WelcomeCSS
{
static void Main()
{
System.Diagnostics.Process.Start("notepad.exe");
}
}
Salvati fila cu numele StartNotepad.cs.
Pentru a compila fila intr-o asamblare (un executabil) deschideti din
Start utilitarul CommandPrompt si navigati la adresa la care este arhivat
directorul ce contine compilatorul.
Exemplu: CD C:\v3
apoi introduceti comanda de compilare:
csc.exe StartNotepad.cs
Daca nu exista si o versiune valida de Visual C# vor apare eventual niste
mesaje de avertizare de tip (warning CS1668).Puteti neglija aceste
mesaje (sau instalati si Visual C#).
In mod normal,in directorul curent a aparut un executabil Windows cu
numele "StartNotepad.exe".Puteti utiliza acest modul pentru a lansa
programul Notepad.In mod similar,puteti lansa in executie orice alt
program sau fila.De exemplu,daca doriti sa lansati direct ziarul preferat
nu trebuie de cat sa introduceti adresa corecta http:
EXEMPLU:
System.Diagnostics.Process.Start("http:\\gsp.ro\");
-6-
Un alt program minimal poate deschide si actualiza o fila de tip text.
Exemplu: -Salvati in directorul C o fila goala denumita test.txt,apoi
editati urmatorul cod:
using System;
using System.IO;
class WelcomeCSS {
static void Main() {
string lines = "Prima linie.\r\n A doua linie.\r\n Ultima linie.";
System.IO.StreamWriter file = new System.Io.StreamWriter("c:\\test.txt");
file.WriteLine(lines);
file.Close();
Console.WriteLine("Textul a fost editat in fila test.txt");
Console.ReadLine();
}
}
Salvati fila cu numele Test1.cs,apoi compilati cu o comanda:
csc.exe Test1.cs
Executati un dublu click pe executabilul Test1.exe si apoi verificati
daca textul a fost editat in fila de control (test.txt).
Observati ca structura programului este asemanatoare cu C++.
Bibliotecile se importa cu "using" in loc de "import".Intregul program
trebuie sa fie inclus intr-o clasa,iar fluxul de executie trebuie
controlat cu ajutorul unei functii principale,denumita functia Main().
Pentru a intelege mai bune functiile apelate,deschideti MSDN Library si
apoi explorati biblioteca System si respectiv System.IO.
Daca exista date si functii cu care lucrati frecvent,este comod si
practic sa arhivati aceste functii intr-o biblioteca DLL proprie,pe
care o puteti apoi apela din programe diferite.Pentru acest scop,trebuie
sa construiti o asamblare de tip arhiva (DLL) cu acces privat.
EXEMPLU: pentru o operatie de adunare,editati modulul:
using System;
Dostları ilə paylaş: |