Documente Academic
Documente Profesional
Documente Cultură
C# pentru nceptori
Florin Tudor Cristea Microsoft Student Partners
.NET Framework
Microsoft .NET Framework reprezint un cadru de dezvoltare software care poate fi instalat pe mainile ce ruleaz familia de sisteme de operare Microsoft Windows (exist ns n desfurare un proiect open! source i cross!platform denumit Mono ce promite un ecosistem mai lar" pentru aplica#iile din familia $%&T'$ (cesta include o )i)liotec vast de solu#ii la cele mai comune pro)leme de pro"ramare i o main virtual care "estioneaz execu#ia pro"ramelor scrise specific pentru el$
CIL este un lim)a* de asam)lare orientat o)iect- )azat n ntre"ime pe stac+ (stiv' n ceea ce privete alocarea memoriei$
Limba"e CL
C), C##*C"I, &), +), Iron,ython, -!.N%T, .), .cti/e Oberon, .,"Next, .-R.N%T, !oo, Cobra, Common "arceny, Com0onent ,ascal, Del0hi.N%T, Delta &orth .N%T, Dot"is0, ylan.N%T, %iffel%n/ision, &ortran.N%T, Gar ens ,oint 1o ula23*C"R, 4as(ell for .N%T, 4ugs for .N%T, IoN%T, Iron"is0, IronRuby, IronScheme, +a.N%T, +Scri0t.N%T, "), "exico, "O"Co e.N%T, "ua.N%T, 1anage %xtensions for C##, 1anage +scri0t, 1ercury on .N%T, 1on rian, Nemerle, Net %x0ress, NetCO!O", Oxygene, OxygenScheme, ,), ,halanger, ,hrogram, ,"*I", ,o'er!uil er, S), sml.net, -!x, 5il cat Cobol, 5in o's
#espre C#
C# este un lim)a* de pro"ramare cu scop "eneralputernic tipizat- orientat o)iect$ Caracterizat prin simplitate- expresivitate i performan#- C3 uureaz mult scrierea diverselor aplica#ii (este optimizat pentru cadrul de dezvoltare $%&T'$ Cea mai recent versiune a lim)a*ului este 3. - lansat concomitent cu $%&T Framewor+ 4$5 n 6778$ 9rmtoarea versiune propus- :$7- se afl n dezvoltare (beta din mai 677;'$
Numele proiectulu i
using System9 names0ace 4ello5orl : class ,rogram : static /oi 1ain;string<= args> : Console.5rite"ine;?4ello, 'orl @?>9 A A A
<dentificatori
1eprezint numele unui element n cod$
Nu %ot ncepe &ot ncepe cu cu o cifr sau un ABC i con#ine sim)ol i sunt at>t minuscule limita#i la 5DD c>t i ma*uscule$ caractere$
0iterali
"alori *ntregi octal 74E5- 7F7$$8GH .exazecimal 7xF5- 7xF7$$;- ($$F- a$$fGH zecimal 6:5- FD$$;GF7$$;GH "alori *n 'irgul+ mobil+ 64$5F- 64$5fI D$86&4F- D$86&4ffloat D$86e4F- D$86e4f 64$5- 64$5/- 64$5dI D$86&4ouble D$86&4/- $$$ Caractere char JaJ- JKJ- JLu764DJ ,iruri String MNello- worldM #ec'en-e esca%e Lu urmat de codul (e!a$ecimal caractere 9nicode corespun$)tor Tab Lt *ackspace L) Carriage return Lr Form feed Lf *ackslas( LL Single +uote LJ ,ouble +uote LM Line feed Ln
int 1yInt9
*G InferenHa e ti0 ;ty0e inference> G* /ar 1yChars $ ne' char<= :I.I, IJIA9 *G sau char<= 1yChars $ ne' char<= :I.I, IJIA9 G*
"ariabil e
O identificatori cu %alori asociate
Metoda 1ain P punctul de intrare al aplica#iei names0ace : class class class A &oo !ar : ... A "ol : ... A Cat : ... A
Categorie o%eratori (ritmetici 0o"ici ()ooleeni i pe )i#i' Concatenare iruri <ncrementare- decrementare
*G termeni cheie\ im0licit Mi ex0licit ;construcHia o0eratorului e con/ersie im0licitF sau ex0licitF>, as ;o0eratorul e con/ersie tacitF> G*
.%eratori # 2 G * S T U V @ W TT UU true false # ## 22 XX YY $$ @$ X Y X$ Y$ $ #$ 2$ G$ *$ S$ T$ U$ V$ XX$ YY$ . < = ; > Z [\ # 2 ne' as is sizeof ty0eof unchec(e
Qiftare 1ela#ionali /e asi"nare (ccesul la mem)ri /e indexare /e tipizare (cast' Condi#ionali /e concatenare- nlturare a dele"a#ilor Creare o)iect <nforma#ie despre tip
*G signatura su0ra]ncFrcFrii unui o0erator binar G* 0ublic static Com0lex o0erator #;Com0lex cK, Com0lex c3> : ... A
using System9 0ublic class ,ointer : unsafe static /oi 1ain;> : int i $ E9 intG B $ Ti9 Console.5rite"ine;GB>9 A A ** Out0ut\ E
*G com0ilatorul trebuie in/ocat cu o0Hiunea *unsafe G*
,peratori
G 2Y <= T
s'itch ;0i/ot> o 'hile ;boolean> if ;boolean> : : : : ... case I.I\ ... ... A ... A A 'hile ;boolean> brea(9 else if ;boolean> : for ;int i $ R9 i X KR9 i##> case I!I\ ... : case ICI\ A ... ... else A brea(9 : ... foreach ;int i in int"ist> efault\ A : ... ... brea(9 Structuri condi-ionale A A
try : *G instrucHiuni ce 0ot arunca exce0Hii G* ... A catch ;%xce0tion ex> : *G exce0Hia este 0rinsF Mi tratatF aici G* ... A finally : *G instrucHiuni in/ariabil executate ulterior G* ... A
.nstruc-iuni de salt
Structuri de control
for ;int i $ R9 i X KR9 i##> for ;int i $ R9 i X KR9 i##> : : if ;i S 3 $$ R> if ;i $$ E> : : continue9 brea(9 A A Console.5rite;i # ^ ^>9 Console.5rite;i # ^ ^>9 A ** K D E O _ A ** R K 3 D L
Metod
()ilit#ile unui o)iect$ Rn lim)a* natural metodele (referite uneori i drept Afunc#iiC' sunt ver)e$ "assie - fiind un c>ine (Dog '- poate ltra P deci bar(;> este una din metodele sale$ Mai poate prezenta desi"ur i alte metode- precum sit;> sau eat;> sau 'al(;> sau sa/e`timmy;> $ /e o)icei utilizarea unei metode n pro"ram afecteaz numai un o)iect vizatI to#i c>inii (Dog2s' pot ltra- dar ne intereseaz ca numai unul
using System9 names0ace 4ello5orl : class Dog : string bree , fur`color9 ** cam0uri 0ublic Dog;string bree , string fur`color> ** constructor : this.bree $ bree 9 this.fur`color $ fur`color9 A 0ublic string !ree ** accesor : get : return this.bree 9 A set : this.bree $ /alue9 A A 0ublic string &ur`color ** X0ro0Y # XT.!Y : get : return this.fur`color9 A set : this.fur`color $ /alue9 A A 0ublic /oi bar(;> : Console.5rite"ine;?5oof@?>9 Console.!ee0;>9 A A class ,rogram : static /oi 1ain;string<= args> : Dog "assie $ ne' Dog;?collie?, ?bro'n2an 2'hite?>9 ** crearea unei instanHe a clasei Dog "assie.&ur`color $ ?bro'n2an 20earl?9 Console.5rite"ine;?"assie is a ? # "assie.!ree # ? 'ith ? # "assie.&ur`color # ? fur.?>9 "assie.bar(;>9 "assie is a collie 'ith bro'n2an 20earl fur. A 5oof@ A
&xemplu
using System9 names0ace 4ello5orl : class Dog : 0rotecte string bree , fur`color9 ** 0ublic Dog;> ** : ** A 0ublic Dog;string bree , string fur`color> : this.bree $ bree 9 this.fur`color $ fur`color9 A 0ublic string !ree : get : return this.bree 9 A set : this.bree $ /alue9 A A 0ublic string &ur`color : get : return this.fur`color9 A set : this.fur`color $ /alue9 A A
0ublic ne' /oi bar(;> : Console.5rite"ine;?5oof@ <? # this.GetTy0e;> # ?=? Console.!ee0;KERR, 3ER>9 A A
class ,rogram : static /oi 1ain;string<= args> : Collie "assie $ ne' Collie;>9 "assie.&ur`color $ ?bro'n2an 20earl?9 Console.5rite"ine;?"assie is a ? # "assie.!ree # ? 'ith ? # "assie.&ur`color # ? fur.?>9 "assie.bar(;>9 Chihuahua Tin(erbell $ ne' Chihuahua;?caramel?>9 Console.5rite"ine;?Tin(erbell is a ? # Tin(erbell.!ree # ? 'ith ? # Tin(erbell.&ur`col # ? fur.?>9 Tin(erbell.bar(;>9 A A
0ublic /oi bar(;> : Console.5rite"ine;?5oof@ <? # this.GetTy0e;> # ?=?>9 Console.!ee0;>9 A A class Collie \ Dog : 0ublic Collie;> \ base;?collie?, ?bro'n2an 2'hite?> : ** base.bree $ ?collie?9 ** base.fur`color $ ?bro'n2an 2'hite?9 A A class Chihuahua \ Dog : 0ublic Chihuahua;string fur`color> \ base;?chihuahua?, fur`color> "assie is a collie 'ith bro'n2an 20earl fur. : 5oof@ <4ello5orl .Collie= ** base.bree $ ?chihuahua?9 Tin(erbell is a chihuahua 'ith caramel fur. ** base.fur`color $ fur`color9 5oof@ <4ello5orl .Chihuahua= A
&xemplu
using System9 names0ace 4ello5orl : class %m0loyee : 0ublic string name9 0rotecte ecimal base0ay9 0ublic %m0loyee;string name, : this.name $ name9 this.base0ay $ base0ay9 A ecimal base0ay>
0ublic /irtual ecimal Calculate,ay;> : return base0ay9 A A seale class &iel %m0loyee \ %m0loyee ** seale : 0ri/ate ecimal fiel bonus9 0ublic &iel %m0loyee;string name, \ base;name, base0ay> : this.fiel bonus $ fiel bonus9 A 0ublic &iel %m0loyee;string name, \ base;name, base0ay> : this.fiel bonus $ R9 A $ clasa nu mai 0oate fi moMtenitF
ecimal base0ay,
0ublic o/erri e ecimal Calculate,ay;> ** o/erri e : return base0ay # fiel bonus9 A A class ,rogram : static /oi 1ain;string<= args> : &iel %m0loyee em0loyeeK $ ne' &iel %m0loyee;?The Cheshire Cat?, KRRR, ERR>9 %m0loyee em0loyee3 $ ne' %m0loyee;?.lice?, K3RR>9 Console.5rite"ine;em0loyeeK.name # ? earne \ ? # em0loyeeK.Calculate,ay;>>9 Console.5rite"ine;em0loyee3.name # ? earne \ ? # em0loyee3.Calculate,ay;>>9 A The Cheshire Cat earne \ KERR A .lice earne \ K3RR
&xemplu
A
using System9 names0ace 4ello5orl : class ,arent : 0ublic /irtual /oi &oo;> : Console.5rite"ine;?,arent Y &oo;>?>9 A 0ublic /oi !ar;> : Console.5rite"ine;?,arent Y !ar;>?>9 A A class Chil \ ,arent : 0ublic o/erri e /oi &oo;> ** o/erri ing : Console.5rite"ine;?Chil Y &oo;>?>9 A 0ublic ne' /oi !ar;> ** hi ing : Console.5rite"ine;?Chil Y !ar;>?>9 A A class ,rogram : static /oi 1ain;string<= args> : ,arent 0arent $ ne' ,arent;>9 Chil chil $ ne' Chil ;>9 0arent.&oo;>9 0arent.!ar;>9 chil .&oo;>9 chil .!ar;>9 0arent $ chil 9 0arent.&oo;>9 ** meto a a0elatF Hine 0arent.!ar;>9 ** meto a a0elatF Hine A A A
&xemplu
,arent Y &oo;> ,arent Y !ar;> Chil Y &oo;> Chil Y !ar;> Chil Y &oo;> ,arent Y !ar;>
(lte particularit)i
System.ObBect este clasa printe a tuturor celorlalte clase din UC0 (rdcina ierar.iei de tipuri'$ <mplicit- principalele metode (virtuale' motenite sunt %buals (suport compararea a dou o)iecte'&inalize (destructorul default- se ocup de cur#enie nainte ca o)iectul s fie rec.izi#ionat automat de ctre garbage collector'Get4ashCo e ("enereaz un numr corespunztor strii unui o)iect pentru a face posi)il utilizarea ta)elelor (as('- ToString (returneaz un ir lizi)il uman referitor la instan#a unei clase'$ Clasele sunt tipuri referin-) i structurile sunt tipuri %aloare$ , structur este alocat pe stiv atunci c>nd este declarat i varia)ila corespunztoare este direct referit prin adresa sa$ Clasele sunt diferite prin aceea c memoria este alocat pe (eap i varia)ila n acest caz se comport ca un pointer "estionat plasat pe stack ce
using System9 names0ace 4ello5orl : class ,oint ** clasa ,oint este : 0ublic int x, y9 0ublic ,oint;int x, int y> : this.x $ x9 this.y $ y9 A
eri/atF
in System.ObBect
0ublic o/erri e bool %buals;obBect obB> : if ;obB.GetTy0e;> @$ this.GetTy0e;>> return false9 ** this Mi obB sunt e acelaMi ti0Z ,oint other $ ;,oint>obB9 return ;this.x $$ other.x> TT ;this.y $$ other.y>9 ** cam0urile x Mi y se 0otri/escZ A 0ublic o/erri e int Get4ashCo e;> : return x V y9 ** V $ 6OR A 0ublic o/erri e String ToString;> ** /aloarea 0unctului ca un Mir : return String.&ormat;?;:RA, :KA>?, x, y>9 A 0ublic ,oint Co0y;> ** returneazF o co0ie su0erficialF a acestui obiect : return ;,oint>this.1ember'iseClone;>9 A A class ,rogram : static /oi 1ain;string<= args> : ,oint 0K $ ne' ,oint;K, 3>9 ** un nou obiect e ti0 ,oint ,oint 03 $ 0K.Co0y;>9 ** un alt obiect e ti0 ,oint care ]l co0iazF 0e 0rimul ,oint 0D $ 0K9 ** o altF /ariabilF care referenHiazF 0rimul obiect e ti0 ,oint Console.5rite"ine;ObBect.Reference%buals;0K, 03>>9 ** 0K Mi 03 se referF la ouF obiecte iferite Console.5rite"ine;ObBect.%buals;0K, 03>>9 ** 0K Mi 03 se referF la ouF obiecte iferite cu ac. /aloare Console.5rite"ine;ObBect.Reference%buals;0K, 0D>>9 ** 0K Mi 0D se referF la acelaMi obiect Console.5rite"ine;?0KIs /alue is\ :RA?, 0K.ToString;>>9 A
&xemplu
using System9 names0ace 4ello5orl : class aClass : 0ublic int x9 A struct aStruct : 0ublic int x9 A class ,rogram : static /oi oClass;aClass c> : c.x $ E9 A static /oi oStruct;aStruct s> : s.x $ E9 A
class Ref%xam0le : static /oi 1etho ;ref int i> : i $ K9 A static /oi 1ain;> : int /al $ R9 ** @ 1etho ;ref /al>9 ** /al $ K A A class Out%xam0le : static /oi 1etho ;out int i> : i $ K9 A static /oi 1ain;> : int /al9 1etho ;out /al>9 ** /al $ K A A
&xemplu
A
static /oi 1ain;string<= args> : aClass c $ ne' aClass;>9 c.x $ K9 Console.5rite"ine;?c.x $ ? # c.x>9 aStruct s $ ne' aStruct;>9 s.x $ K9 Console.5rite"ine;?s.x $ ? # s.x>9 oClass;c>9 ** o referinHF cFtre clasF este 0asatF meto ei Console.5rite"ine;?c.x $ ? # c.x>9 oStruct;s>9 ** o co0ie a structurii este 0asatF meto ei Console.5rite"ine;?s.x $ ? # s.x>9 A A
$ $ $ $
K K E K
using System9 names0ace 4ello5orl : 0artial class ,oint ** ,ointK.cs : 0ublic ouble 6 : get9 set9 A 0ublic ouble c : get9 set9 A 0ublic ,oint; ouble x, : 6 $ x9 c $ y9 A A ouble
class ,rogram : ;K,E93,R> static /oi 1ain;string<= args> K : K ,oint 0 $ ne' ,oint;K.E, 3.R>9 Console.5rite"ine;0.ToString;>>9 OuterClass o $ ne' OuterClass;K>9 OuterClass.InnerClass i $ ne' OuterClass.InnerClass;o> Console.5rite"ine;i.ToString;>>9 y> OuterClass.InnerClass. oOuterClass;o>9 A A A
*G /ariabile
e instanHF G*
*G co nati/ G* <DllIm0ort.ttribut e;?dernelD3. ll?>= 0ri/ate static extern bool SetConsoleText.ttr ibute;Int,tr hConsoleOut0ut, int '.ttributes>9 assembly P colec#ie de tipuri i resurse ce formeaz o unitate lo"ic de func#ionalitate
*G mo ificatori G* abstract, const, e/ent, extern, internal, o/erri e, 0ri/ate, 0rotecte , 0ublic, rea only, seale , static, unsafe, /irtual, /olatile
0artial class ,oint ** ,oint3.cs : 0ublic o/erri e string ToString;> : return String.&ormat;?;:RA9:KA>?, 6, c>9 A A
using System9
D,KLKE_3NE K3,ENNDORN
&xemplu
class OuterClass ** efault $ internal : 0ri/ate int x9 0ublic OuterClass;int x> : this.x $ x9 A 0ublic class InnerClass : A OuterClass o9 0ublic InnerClass;OuterClass o> : this.o $ o9 A 0ublic o/erri e string ToString;> : return String.&ormat;?:RA?, this.o.x>9 A 0ublic static /oi oOuterClass;OuterClass o> : Console.5rite"ine;o.x>9 A A A
names0ace 4ello5orl : class aClass : 0ublic static ouble efaultRa ius $ K9 0ublic const ouble ,I $ D.KLKE_3NE9 ** im0licit static 0ublic static ouble Circle.rea; ouble ra ius> : return aClass.,I G 1ath.,o';ra ius, 3>9 A A class ,rogram : static /oi 1ain;string<= args> : Console.5rite"ine;aClass.Circle.rea;aClass. efaultRa ius>>9 aClass. efaultRa ius $ 39 Console.5rite"ine;aClass.Circle.rea;aClass. efaultRa ius>>9 A A
Clase
0ublic 0ri/ate 0rotecte da da nu
Membri
da da da
using System9
names0ace 4ello5orl : abstract class Cat : 0ublic string Name : get9 set9 A 0ublic o/erri e string ToString;> : return Name9 A 0ublic abstract /oi meo';>9 A class CheshireCat \ Cat : 0ublic CheshireCat;> : this.Name $ ?The Cheshire Cat?9 A 0ublic o/erri e /oi meo';> ** @ : Console.5rite"ine;this.ToString;> # ? 2 5eIre all ma A A class ,rogram : static /oi 1ain;string<= args> : CheshireCat cc $ ne' CheshireCat;>9 cc.meo';>9 A A A
Clasele abstracte sunt clase ce servesc numai drept a)loane P pot fi doar motenite- nu i instan#iate$ Pot exista i mem)ri a)strac#i n cadrul acestora- fr implementri- care tre)uie neaprat suprascrii dup o derivare$
Pe data viitoareV
/tt%)00stu$ents.info.uaic.ro01florin.cristea0cs%i