Sunteți pe pagina 1din 33

L1

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$

Base Class Library


Base Class Library (BCL' constituie o )i)liotec standard disponi)il tuturor lim)a*elor ce folosesc framewor+!ul $%&T$ ,fer o palet lar" de solu#ii referitoare la interfa#a cu utilizatorul- accesul la fiiere i )aze de date- cripto"rafie- dezvoltarea de aplica#ii we)al"oritmi numerici- comunicarea n re#ea i nu numai$ &ste folosit de ctre pro"ramatori- care o com)in cu propriul lor cod pentru a produce aplica#ii software$
System, System.Collections, System.Diagnostics, System.Globalization, System.IO, System.Net, System.Reflection, System.Runtime, System.Security, System.Text, System.Threa ing

Common Language Runtime


Pro"ramele scrise pentru framewor+!ul $%&T sunt executate ntr!un mediu software care "estioneaz cerin#ele pro"ramelor n timpul rulrii$ (cesta poart numele de Common Language Runtime (CLR' i ofer caracteristicile unei maini virtuale- fapt ce permite pro"ramatorilor s creeze aplica#ii fr s i fac pro)leme le"ate de ar.itectura procesorului de pe care vor rula acestea$ /e asemenea- C01!ul se ocup i de alte servicii importante precum mana"ementul memorieisecuritate i manipularea excep#iilor$
!C" # C"R $ .N%T &rame'or(

Common Language n!rastructure


Common Language Infrastructure (CLI' este o specifica#ie desc.is dezvoltat de ctre Microsoft ce definete un mediu software care permite ca multiple lim)a*e de nivel nalt s poat fi folosite pe diferite platforme de operare fr s fie necesar ca acestea s fie rescrise pentru ar.itecturi specifice (.NET Framework- Mono- Portable.NET implementeaz aceste standarde'$ Termeni c.eie2 Common Type System (CTS'- MetadataCommon Language Specification (CLS'- irtual

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;'$

#espre $isual %tu&io


!icrosoft "isual #tu$io este un mediu inte"rat de dezvoltare (</& = <nte"rated /evelopment &nvironment' produs de Microsoft$ Poate fi folosit at>t pentru a dezvolta aplica#ii tip consol sau cu interfa# "rafic ("indows Forms' c>t i situri- aplica#ii i servicii we) = at>t n cod nativ c>t i n cod "estionat- pe toate platformele suportate de ctre Microsoft WindowsWindows Mo)ile- Windows C&- $%&T Framewor+- $%&T Compact Framewor+ i Microsoft Silverli".t$
?ersiunea 677@ Professional poate fi descrcat de pe MS/%(( (ms$n.info.uaic.ro' sau /reamSpar+ ($reams%ark.com'$

Crearea unui proiect

Numele proiectulu i

1ularea unui proiect

using System9 names0ace 4ello5orl : class ,rogram : static /oi 1ain;string<= args> : Console.5rite"ine;?4ello, 'orl @?>9 A A A

Elemente &e sinta' C#

<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$

Elemente &e sinta' C#


Cu'inte re(er'ate) abstract, as, base, bool, brea(, by,
byte, case, catch, char, chec(e , class, const, continue, ecimal, efault, elegate, o, ouble, escen ing, ex0licit, e/ent, extern, else, enum, false, finally, fixe , float, for, foreach, from, goto, grou0, if, im0licit, in, int, interface, internal, into, is, loc(, long, ne', null, names0ace, obBect, o0erator, out, o/erri e, or erby, 0arams, 0ri/ate, 0rotecte , 0ublic, rea only, ref, return, s'itch, struct, sbyte, seale , short, sizeof, stac(alloc, static, string, select, this, thro', true, try, ty0eof, uint, ulong, unchec(e , unsafe, ushort, using, /ar, /irtual, /olatile, /oi , 'hile, 'here, yiel

#tili$area unui cu%&nt re$er%at ca un identificator' string Cout9

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

Elemente &e sinta' C#


int a, b9 ** eclarare multi0lF int a $ 3, b $ D9 *G eclarare cu iniHializare multi0lF G* /eclarare
*G const /s. rea only G* class &oo : const int xK $ K9 const int x39 ** eroare rea only int xD $ D, xL, xE9 &oo;> ** corect eMi xE nu e iniH. : xL $ L9 ** corect const int xN $ N9 rea only int xO $ O9 ** eroare A A *G constantele const sunt im0licit statice G*

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

int 1yInt $ DE9


/eclarare cu ini#ializare

int 1yInt9 1yInt $ DE9


<ni#ializare

Elemente &e sinta' C#


/oi : : int b9 a $ K9 A ** alt Psco0eQ a $ 39 b $ D9 ** eroare A /omenii de cod (scopes' foo;> int a9 static int /oi : return R9 A 1ain;string<= args>

Metoda 1ain P punctul de intrare al aplica#iei names0ace : class class class A &oo !ar : ... A "ol : ... A Cat : ... A

Spa#ii de nume (namespaces'

using System9 /irectiva using using DirInfo $ System.IO.DirectoryInfo9

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*

Controlul excep#iei de o%erflow chec(e <ndirec#ie i acces

,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

Structuri iterati%e start\ ... goto start9

.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

Elemente &e programare orientat obiect


Conce%te fun$amentale
Clas
/efinete caracteristicile a)stracte ale unui lucru (o)iect'- inclusiv caracteristicile (atri)ute- c>mpuri- propriet#i' i comportamentul (ac#iunimetode- opera#ii' acestuia$ Poat fi privit ca o sc.i# ( blueprint' care descrie ceva$ Spre exemplu- clasa Dog ar include caracteristici comune tuturor c>inilor- precum rasa i culoarea )lnii (caracteristici'- precum i a)ilitatea de a ltra i edea (comportamente'$ Clasele ofer astfel modularitate i structur ntr!un pro"ram orientat o)iect$ /e o)icei conceptul implementat de ctre o clas este reco"nosci)il inclusiv unui non!pro"ramator familiar cu domeniul pro)lemei- caracteristicile clasei pur i simplu av>nd sens n context$ /e asemenea- codul unui clase se presupune a fi relativ independent (self/contained'- utiliz>nd principiul ncapsulrii (encapsulation'$ Colectiv- propriet#ile i metodele unei clase se

Elemente &e programare orientat obiect


,)iect
, instan# a unei clase$ Clasa Dog definete toate tipurile posi)ile de c>ini list>nd caracteristicile i comportamentele pe care le pot afiaI o)iectul "assie este un c>ine particular- cu versiuni particulare ale acestor trsturi$ 9n c>ine (Dog ' are )lana de o culoare oarecareI "assie n sc.im) are )lana de culoare maro cu al)- fiind un collie$ (nsam)lul valorilor propriet#ilor unui anumit o)iect definesc starea acestuia$

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

Elemente &e programare orientat obiect


Motenire
ASu)!claseleC sunt versiuni mai specializate ale unei clase printe care mo0tenesc atri)utele i comportamentele acesteia- adu">nd n acelai timp un su)set propriu$ Spre exemplu- clasa Dog poate avea su)!clasele denumite Collie - Chihuahua i Gol enRetrie/er $ Rn acest caz- o)iectul "assie ar fi o instan# a su)!clasei Collie $ S presupunem c n clasa Dog sunt definite o metod denumit bar(;> i o proprietate denumit furColor $ Fiecare din su)!clasele sale (Collie - Chihuahua i Gol enRetrie/er ' va moteni aceti mem)ri- ceea ce nseamn c pro"ramatorul tre)uie s scrie codul pentru toate acestea o sin"ur dat$ Fiecare su)!clas poate modifica caracteristicile motenite$ Spre exemplu- clasa Collie poate specifica o valoare predefinit pentru furColor - maro cu al)$ Clasa Chihuahua poate utiliza o tonalitate mai nalt la "enerarea unui ltrat via metoda bar(;> $ Su)!clasele pot de asemenea s adau"e noi mem)ri P Chihuahua poate prezenta o metod denumit tremble;> $ /eci o instan# individual de tip Chihuahua - fie aceasta Tin(erbell - ar folosi metoda bar(;> cu tonalitate nalt din su)!clas- care mai departe a motenit metoda bar(;> normal din Dog $ Tin(erbell ar prezenta metoda tremble;> - dar "assie nu P deoarece este un Collie - nu un Chihuahua $ /e fapt- motenirea este o rela#ie de tip AunS este unC ntre clase- n timp ce instan#ierea este o rela#ie de tip Aeste unC ntre un

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

Elemente &e programare orientat obiect


Rncapsulare
Rncapsularea ascunde detaliile func#ionale ale unei clase de o)iectele care i transmit mesa*e (pasea$) date sau in%oc) o metod)'$ Spre exempluclasa Dog are o metod bar(;> $ Codul pentru aceast metod definete exact ce se nt>mpl c>nd c>inele latr (inhale;> apoi exhale;> la o anumit tonalitate i volum'$ Rns Timmy - prietenul lui "assie - nu are nevoie s tie aceste detalii$ Rncapsularea este realizat specific>nd anume care clase pot utiliza mem)rii unui o)iect$ 1ezultatul este c fiecare o)iect expune oricrei clase o anumit interfa-) P mem)rii accesi)ili acelei clase$ Motiva#ia din spatele ncapsulrii este aceea de a mpiedica clien#ii unei interfe#e s depind de acele pr#i ale implementrii care vor fi cel mai pro)a)il supuse sc.im)rilor n viitor P ceea ce faciliteaz procesul de modificare fr a afecta pe cineva$ Mem)rii sunt specifica#i ca fiind 0ublic (pu)lici'- 0rotecte (prote*a#i' - 0ri/ate (priva#i' sau internal (interni'- determin>nd astfel dac sunt accesi)ili tuturor claselor- su)!

Elemente &e programare orientat obiect


Polimorfism
Polimorfismul permite pro"ramatorilor s trateze mem)rii claselor derivate exact la fel precum mem)rii claselor printe$ Mai precis- acesta reprezint a)ilitatea o)iectelor de tipuri diferite s rspund apelurilor unei metode specifice cu acelai nume- fiecare n maniera dictat de felul su$ , metod P sau un operator precum # - 2 sau G P poate fi aplicat a)stract n o multitudine de situa#ii$ /ac se emite comanda s0ea(;> unui o)iect de tip Dog - va rezulta un apel ctre metoda bar(;> $ Rn sc.im)- un o)iect de tip ,ig va rspunde n aceeai situa#ie cu un apel ctre metoda oin(;> $ (m>ndoi motenesc s0ea(;> din .nimal - dar clasele lor derivate suprascriu (o%erride' metodele din clasa printe P polimorfism de suprascriere$ Polimorfismul de supra1nc)rcare (o%erload' constituie utilizarea unei si"naturi caracteristice a metodei sau folosirea unui operator pentru a efectua diferite opera#ii n func#ie de implementare$ ,peratorul # - de exemplu- poate fi ntre)uinTat pentru a executa adunarea unor ntre"i sau numere n vir"ul mo)il sau concatenarea irurilor$ ,ricare dou su)!clase ale Number P precum Integer i Double P tre)uie s fie capa)ile s fac o

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,

ecimal fiel bonus>

ecimal base0ay> ** o/erloa

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

e ti0ul instanHei e ti0ul /ariabilei

,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

&alse True True 0KIs /alue is\ ;K, 3>

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

c.x s.x c.x s.x

$ $ $ $

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 clasF /s. /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

The Cheshire Cat 2 5eIre all ma

here@ IIm ma . couIre ma .

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

here@ IIm ma . couIre ma

/ata viitoare2 interfe-e vs$ clase a)stracte

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

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