Sunteți pe pagina 1din 33

Florin Tudor Cristea Microsoft Student Partners

C# pentru nceptori
L1
.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.Threaing
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 memoriei-
securitate 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'- Metadata-
Common Language Specification (CLS'- irtual
E!ecution System (ES'
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, Garens ,oint
1oula23*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"Coe.N%T, "ua.N%T,
1anage %xtensions for C##, 1anage +scri0t,
1ercury on .N%T, 1onrian, Nemerle, Net
%x0ress, NetCO!O", Oxygene, OxygenScheme, ,),
,halanger, ,hrogram, ,"*I", ,o'er!uiler, S),
sml.net, -!x, 5ilcat Cobol, 5ino's
,o'erShell, 6), 7onnon, )S, )Smalltal(, 888
#espre C#
C# este un lim)a* de pro"ramare cu scop "eneral-
puternic 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 Windows-
Windows 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'$
Numele
proiectulu
i
Crearea unui
proiect
using System9
names0ace 4ello5orl
:
class ,rogram
:
static /oi 1ain;string<= args>
:
Console.5rite"ine;?4ello, 'orl@?>9
A
A
A
1ularea unui proiect
<dentificatori
1eprezint numele unui element n cod$
&ot ncepe cu
ABC i con#ine
at>t minuscule
c>t i ma*uscule$
Nu %ot ncepe
cu o cifr sau un
sim)ol i sunt
limita#i la 5DD
caractere$
Elemente &e sinta' C#
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, escening,
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/errie, orerby, 0arams, 0ri/ate, 0rotecte, 0ublic,
reaonly, 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
"alori *ntregi
octal 74E5- 7F7$$8GH
.exazecimal 7xF5- 7xF7$$;- ($$F- a$$fGH
zecimal 6:5- FD$$;GF7$$;GH
"alori *n 'irgul+ mobil+
float
64$5F- 64$5fI D$86&4F- D$86&4f-
D$86e4F- D$86e4f
ouble
64$5- 64$5/- 64$5dI D$86&4-
D$86&4/- $$$
Caractere
char JaJ- JKJ- JLu764DJ
,iruri
String MNello- worldM
#ec'en-e esca%e
caractere 9nicode
Lu urmat de codul (e!a$ecimal
corespun$)tor
Tab Lt
*ackspace L)
Carriage return Lr
Form feed Lf
*ackslas( LL
Single +uote LJ
,ouble +uote LM
Line feed Ln
0iterali
"ariabil
e
int 1yInt9
int 1yInt9
1yInt $ DE9
int 1yInt $
DE9
Elemente &e sinta' C#
/eclarare
<ni#ializare
/eclarare cu ini#ializare
O identificatori cu
%alori asociate
int a, b9 ** eclarare
multi0lF
int a $ 3, b $ D9 *G
eclarare cu
iniHializare multi0lF
G*
*G InferenHa e ti0
;ty0e inference> G*
/ar 1yChars $ ne' char<=
:I.I, IJIA9 *G sau char<=
1yChars $ ne' char<=
:I.I, IJIA9 G*
*G const /s. reaonly G*
class &oo
:
const int xK $ K9
const int x39 ** eroare
reaonly int xD $ D, xL, xE9

&oo;> ** corect eMi xE nu e
iniH.
:
xL $ L9 ** corect
const int xN $ N9
reaonly int xO $ O9 **
eroare
A
A *G constantele const sunt
im0licit statice G*
Elemente &e sinta' C#
/oi foo;>
:
int a9

:
int b9
a $ K9
A ** alt Psco0eQ

a $ 39
b $ D9 ** eroare
A
/omenii de cod (scopes'
static int /oi 1ain;string<= args>
:
return R9
A
Metoda 1ain P punctul de intrare al aplica#iei
names0ace &oo
:
class !ar : ... A
class "ol : ... A
class Cat : ... A
A
Spa#ii de nume (namespaces'
using System9
using DirInfo $ System.IO.DirectoryInfo9
/irectiva using
Categorie o%eratori .%eratori
(ritmetici # 2 G * S
0o"ici ()ooleeni i pe )i#i' T U V @ W TT UU true false
Concatenare iruri #
<ncrementare- decrementare ## 22
Qiftare XX YY
1ela#ionali $$ @$ X Y X$ Y$
/e asi"nare $ #$ 2$ G$ *$ S$ T$ U$ V$ XX$ YY$
(ccesul la mem)ri .
/e indexare < =
/e tipizare (cast' ; >
Condi#ionali Z \
/e concatenare- nlturare a
dele"a#ilor
# 2
Creare o)iect ne'
<nforma#ie despre tip as is sizeof ty0eof
Controlul excep#iei de o%erflow chec(e unchec(e
<ndirec#ie i acces G 2Y <= T
,peratori
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*
*G signatura
su0ra]ncFrcFrii unui
o0erator binar G*
0ublic static Com0lex
o0erator #;Com0lex cK,
Com0lex c3> : ... A
*G termeni cheie\
im0licit Mi ex0licit
;construcHia o0eratorului
e con/ersie im0licitF sau
ex0licitF>, as ;o0eratorul
e con/ersie tacitF> G*
s'itch ;0i/ot>
:
case I.I\
...
brea(9

case I!I\
case ICI\
...
brea(9

efault\
...
brea(9
A
if ;boolean>
:
...
A
else if ;boolean>
:
...
A
else
:
...
A
Structuri condi-ionale
'hile ;boolean>
:
...
A
o
:
...
A
'hile ;boolean>
for ;int i $ R9 i X KR9 i##>
:
...
A
foreach ;int i in int"ist>
:
...
A
Structuri iterati%e
start\
...
goto start9
for ;int i $ R9 i X KR9 i##>
:
if ;i $$ E>
:
brea(9
A
Console.5rite;i # ^ ^>9
A ** R K 3 D L
for ;int i $ R9 i X KR9 i##>
:
if ;i S 3 $$ R>
:
continue9
A
Console.5rite;i # ^ ^>9
A ** K D E O _
.nstruc-iuni de salt
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 de control
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#iuni-
metode- 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
numesc membri$
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
oarecare s fac aceasta$
using System9
names0ace 4ello5orl
:
class Dog
:
string bree, fur`color9 ** cam0uri
0ublic Dog;string bree, string fur`color> ** constructor
:
this.bree $ bree9
this.fur`color $ fur`color9
A
0ublic string !ree ** accesor
:
get : return this.bree9 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'n2an2'hite?>9 ** crearea unei instanHe a
clasei Dog
"assie.&ur`color $ ?bro'n2an20earl?9
Console.5rite"ine;?"assie is a ? # "assie.!ree # ? 'ith ? # "assie.&ur`color # ?
fur.?>9
"assie.bar(;>9
A
A
A
&xemplu
"assie is a collie 'ith bro'n2an20earl fur.
5oof@
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
GolenRetrie/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
GolenRetrie/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
o)iect i o clas2 un Collie este un Dog- dar "assie este un Collie$ /eci o)iectul
numit "assie are metodele din am)ele clase Collie i Dog$
using System9
names0ace 4ello5orl
:
class Dog
:
0rotecte string bree, fur`color9
** 0ublic Dog;>
** :
** A
0ublic Dog;string bree, string fur`color>
:
this.bree $ bree9
this.fur`color $ fur`color9
A
0ublic string !ree
:
get : return this.bree9 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 /oi bar(;>
:
Console.5rite"ine;?5oof@ <? # this.GetTy0e;> # ?=?>9
Console.!ee0;>9
A
A
class Collie \ Dog
:
0ublic Collie;> \ base;?collie?, ?bro'n2an2'hite?>
:
** base.bree $ ?collie?9
** base.fur`color $ ?bro'n2an2'hite?9
A
A
class Chihuahua \ Dog
:
0ublic Chihuahua;string fur`color> \ base;?chihuahua?, fur`color>
:
** base.bree $ ?chihuahua?9
** base.fur`color $ fur`color9
A
0ublic ne' /oi bar(;>
:
Console.5rite"ine;?5oof@ <? # this.GetTy0e;> # ?=?>9
Console.!ee0;KERR, 3ER>9
A
A
class ,rogram
:
static /oi 1ain;string<= args>
:
Collie "assie $ ne' Collie;>9
"assie.&ur`color $ ?bro'n2an20earl?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`color
# ? fur.?>9
Tin(erbell.bar(;>9
A
A
A
"assie is a collie 'ith bro'n2an20earl fur.
5oof@ <4ello5orl.Collie=
Tin(erbell is a chihuahua 'ith caramel fur.
5oof@ <4ello5orl.Chihuahua=
&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 exemplu-
clasa 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)!
claselor- clasei ce i definete sau numai claselor din acelai assembly
(default O 0ri/ate'$
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
sum de termeni fr pro)leme- deci operatorul de adi#ie- #- tre)uie
suprancrcat corespunztor$
using System9
names0ace 4ello5orl
:
class %m0loyee
:
0ublic string name9
0rotecte ecimal base0ay9
0ublic %m0loyee;string name, ecimal base0ay>
:
this.name $ name9
this.base0ay $ base0ay9
A
0ublic /irtual ecimal Calculate,ay;>
:
return base0ay9
A
A
seale class &iel%m0loyee \ %m0loyee ** seale $ clasa nu mai 0oate fi moMtenitF
:
0ri/ate ecimal fielbonus9
0ublic &iel%m0loyee;string name, ecimal base0ay, ecimal fielbonus>
\ base;name, base0ay>
:
this.fielbonus $ fielbonus9
A
0ublic &iel%m0loyee;string name, ecimal base0ay> ** o/erloa
\ base;name, base0ay>
:
this.fielbonus $ R9
A
0ublic o/errie ecimal Calculate,ay;> ** o/errie
:
return base0ay # fielbonus9
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
A
A
The Cheshire Cat earne\ KERR
.lice earne\ K3RR
&xemplu
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/errie /oi &oo;> ** o/erriing
:
Console.5rite"ine;?Chil Y &oo;>?>9
A
0ublic ne' /oi !ar;> ** hiing
:
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 $ chil9
0arent.&oo;>9 ** metoa a0elatF Hine e ti0ul instanHei
0arent.!ar;>9 ** metoa a0elatF Hine e ti0ul /ariabilei
A
A
A
,arent Y &oo;>
,arent Y !ar;>
Chil Y &oo;>
Chil Y !ar;>
Chil Y &oo;>
,arent Y !ar;>
&xemplu
(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'-
Get4ashCoe ("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
indirecteaz ctre o)iect (este o referin#'$
using System9
names0ace 4ello5orl
:
class ,oint ** clasa ,oint este eri/atF in System.ObBect
:
0ublic int x, y9
0ublic ,oint;int x, int y>
:
this.x $ x9
this.y $ y9
A
0ublic o/errie 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/errie int Get4ashCoe;>
:
return x V y9 ** V $ 6OR
A
0ublic o/errie 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
A
A
&alse
True
True
0KIs /alue is\ ;K, 3>
&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
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 metoei
Console.5rite"ine;?c.x $ ? # c.x>9
oStruct;s>9 ** o co0ie a structurii este 0asatF metoei
Console.5rite"ine;?s.x $ ? # s.x>9
A
A
A
c.x $ K
s.x $ K
c.x $ E
s.x $ K
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
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, ouble y>
:
6 $ x9
c $ y9
A
A
0artial class ,oint ** ,oint3.cs
:
0ublic o/errie string ToString;>
:
return String.&ormat;?;:RA9:KA>?, 6, c>9
A
A
class OuterClass ** efault $ internal
:
0ri/ate int x9
0ublic OuterClass;int x>
:
this.x $ x9
A
0ublic class InnerClass
:
OuterClass o9
0ublic InnerClass;OuterClass o>
:
this.o $ o9
A
0ublic o/errie 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
class ,rogram
:
static /oi 1ain;string<= args>
:
,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>9
Console.5rite"ine;i.ToString;>>9
OuterClass.InnerClass.oOuterClass;o>9
A
A
A
&xemplu
*G moificatori G*
abstract, const,
e/ent, extern,
internal, o/errie,
0ri/ate, 0rotecte,
0ublic, reaonly,
seale, static,
unsafe, /irtual,
/olatile
assembly P colec#ie de
tipuri i resurse ce
formeaz o unitate
lo"ic de func#ionalitate
Clase Membri
0ublic da da
0ri/ate da da
0rotecte

nu da
internal da da
*G /ariabile e clasF /s. /ariabile e instanHF G*
using System9
names0ace 4ello5orl
:
class aClass
:
0ublic static ouble efaultRaius $ K9
0ublic const ouble ,I $ D.KLKE_3NE9 ** im0licit static
0ublic static ouble Circle.rea;ouble raius>
:
return aClass.,I G 1ath.,o';raius, 3>9
A
A
class ,rogram
:
static /oi 1ain;string<= args>
:
Console.5rite"ine;aClass.Circle.rea;aClass.efaultRaius>>9
aClass.efaultRaius $ 39
Console.5rite"ine;aClass.Circle.rea;aClass.efaultRaius>>9
A
A
A
;K,E93,R>
K
K
D,KLKE_3NE
K3,ENNDORN
*G co nati/ G*
<DllIm0ort.ttribut
e;?dernelD3.ll?>=
0ri/ate static
extern bool
SetConsoleText.ttr
ibute;Int,tr
hConsoleOut0ut,
int '.ttributes>9
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$
using System9
names0ace 4ello5orl
:
abstract class Cat
:
0ublic string Name : get9 set9 A
0ublic o/errie 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/errie /oi meo';> ** @
:
Console.5rite"ine;this.ToString;> # ? 2 5eIre all ma here@ IIm ma. couIre ma.?>9
A
A
class ,rogram
:
static /oi 1ain;string<= args>
:
CheshireCat cc $ ne' CheshireCat;>9
cc.meo';>9
A
A
A
The Cheshire Cat 2 5eIre all ma here@ IIm ma. couIre ma.
/ata viitoare2
interfe-e vs$ clase
a)stracte
Pe data viitoareV
/tt%)00stu$ents.info.uaic.ro01florin.cristea0cs%i