You are on page 1of 100

NGN NG

LP TRNH C#

Ngn Ng Lp Trnh C#

Mc Lc

1. Microsoft .NET............................................................................................... 10
Tnh hnh trc khi MS.NET ra i........................................................ 10
Ngun gc ca .NET................................................................................12

Microsoft .NET........................................................................................ 12
Tng quan................................................................................................ 12
Kin trc .NET Framework..................................................................... 13
Common Language Runtime................................................................... 15
Th vin .NET Framework...................................................................... 16
Pht trin ng dng client........................................................................ 16

Bin dch v MSIL................................................................................... 17


Ngn ng C#............................................................................................ 18

2. Ngn ng C#.................................................................................................... 20
Ti sao phi s dng ngn ng C#...........................................................20
C# l ngn ng n gin.......................................................................... 20
C# l ngn ng hin i........................................................................... 21
C# l ngn ng hng i tng............................................................. 21
C# l ngn ng mnh m......................................................................... 22
C# l ngn ng t t kha.........................................................................22
C# l ngn ng module ha..................................................................... 22
C# s l ngn ng ph bin......................................................................22

Ngn ng C# vi ngn ng khc............................................................. 23


Cc bc chun b cho chng trnh....................................................... 24
Chng trnh C# n gin....................................................................... 25
Pht trin chng trnh minh ha.............................................................31
Cu hi & bi tp..................................................................................... 35

3. Nn tng ngn ng C#.................................................................................. 39


Kiu d liu..............................................................................................40
Kiu d liu xy dng sn....................................................................... 41
Chn kiu d liu..................................................................................... 42
Chuyn i kiu d liu........................................................................... 43

Bin v hng............................................................................................ 44
Gn gi tr xc nh cho bin................................................................... 45
Hng......................................................................................................... 46
Kiu lit k............................................................................................... 47
2

Ngn Ng Lp Trnh C#

Kiu chui k t.......................................................................................50


nh danh.................................................................................................50

Biu thc.................................................................................................. 50
Khong trng............................................................................................51
Cu lnh................................................................................................... 51
Phn nhnh khng c iu kin............................................................... 52
Phn nhnh c iu kin.......................................................................... 53
Cu lnh lp............................................................................................. 60

Ton t..................................................................................................... 68
Namespace............................................................................................... 76
Cc ch dn bin dch............................................................................... 80
Cu hi & bi tp..................................................................................... 82

4. Xy dng lp - i tng............................................................................87
nh ngha lp......................................................................................... 88
Thuc tnh truy cp.................................................................................. 91
Tham s ca phng thc........................................................................ 92

To i tng........................................................................................... 93
B khi dng............................................................................................93
Khi to bin thnh vin.......................................................................... 96
B khi dng sao chp.............................................................................98
T kha this............................................................................................. 99

S dng cc thnh vin static...................................................................100


Gi phng thc static............................................................................. 101
S dng b khi dng static.................................................................... 101
S dng b khi dng private..................................................................102
S dng thuc tnh static..........................................................................102

Hy i tng.......................................................................................... 104
Truyn tham s.........................................................................................107
Np chng phng thc........................................................................... 112
ng gi d liu vi thuc tnh............................................................... 116
Thuc tnh ch c................................................................................... 119
Cu hi & bi tp..................................................................................... 121

5. K tha a hnh.......................................................................................... 125


c bit ha v tng qut ha.................................................................. 126
S k tha................................................................................................ 129
Thc thi k tha....................................................................................... 129
Gi phng thc khi dng ca lp c s...............................................131
Gi phng thc ca lp c s................................................................ 132
3

Ngn Ng Lp Trnh C#

iu khin truy xut.................................................................................132

a hnh..................................................................................................... 133
Kiu a hnh............................................................................................. 133
Phng thc a hnh................................................................................ 133
T kha new v override......................................................................... 137

Lp tru tng......................................................................................... 139


Gc ca tt c cc lp- lp Object........................................................... 142

Boxing v Unboxing d liu.................................................................... 144


Boxing d liu ngm nh........................................................................144
Unboxing phi thc hin tng minh...................................................... 145

Cc lp lng nhau.................................................................................... 147


Cu hi & bi tp..................................................................................... 149

6. Np chng ton t.......................................................................................... 153


S dng t kha operator......................................................................... 153
H tr ngn ng .NET khc.....................................................................154
S dng ton t........................................................................................ 154
Ton t so snh bng............................................................................... 156
Ton t chuyn i...................................................................................157
Cu hi & bi tp..................................................................................... 163

7. Cu trc............................................................................................................. 165
nh ngha mt cu trc........................................................................... 165
To cu trc..............................................................................................168
Cu trc l mt kiu gi tr...................................................................... 168
Gi b khi dng mc nh..................................................................... 169
To cu trc khng gi new..................................................................... 170

Cu hi & bi tp..................................................................................... 172

8. Thc thi giao din.......................................................................................... 176


Thc thi giao din.................................................................................... 177
Thc thi nhiu giao din.......................................................................... 180
M rng giao din.................................................................................... 181
Kt hp cc giao din...............................................................................181

Truy cp phng thc giao din.............................................................. 187


Gn i tng cho giao din.................................................................... 187
Ton t is................................................................................................. 188
Ton t as.................................................................................................190
Giao din i lp vi tru tng..............................................................192

Thc thi ph quyt giao din................................................................... 193


Thc thi giao din tng minh.................................................................197
4

Ngn Ng Lp Trnh C#

La chn th hin phng thc giao din................................................200


n thnh vin........................................................................................... 200

Cu hi & bi tp..................................................................................... 207

9. Mng, ch mc, v tp hp......................................................................... 211


Mng........................................................................................................ 212
Khai bo mng......................................................................................... 213
Gi tr mc nh....................................................................................... 214
Truy cp cc thnh phn trong mng....................................................... 214
Khi to thnh phn trong mng..............................................................216
S dng t kha params...........................................................................216

Cu lnh foreach...................................................................................... 218


Mng a chiu.......................................................................................... 220
Mng a chiu cng kch thc............................................................... 220
Mng a chiu c kch thc khc nhau..................................................224
Chuyn i mng..................................................................................... 227

B ch mc............................................................................................... 232
B ch mc v php gn........................................................................... 236
S dng kiu ch s khc......................................................................... 237

Giao din tp hp..................................................................................... 241


Giao din IEnumerable...................................................................... 242
Giao din ICollection......................................................................... 246
Danh sch mng....................................................................................... 247
Thc thi IComparable........................................................................ 251
Thc thi IComparer........................................................................... 254
Hng i...................................................................................................259
Ngn xp.................................................................................................. 262
Kiu t in..............................................................................................265
Hastables.......................................................................................... 266
Giao din IDictionary.........................................................................267
Tp kha v tp gi tr.....................................................................269
Giao din IDictionaryEnumerator....................................................... 270
Cu hi & bi tp..................................................................................... 271

10. X l chui..................................................................................................... 275


Lp i tng string................................................................................ 276
To mt chui.......................................................................................... 276
To mt chui dng phng thc ToString.............................................277
Thao tc trn chui...................................................................................278
Tm mt chui con................................................................................... 285
5

Ngn Ng Lp Trnh C#

Chia chui................................................................................................ 286


Thao tc trn chui dng StringBuilder................................................... 288

Cc biu thc quy tc............................................................................... 290


S dng biu thc quy tc qua lp Regex................................................291
S dng Regex tm tp hp................................................................. 294
S dng Regex gom nhm.................................................................. 295
S dng CaptureCollection...................................................................... 298

Cu hi & bi tp..................................................................................... 301

11. C ch y quyn v s kin...................................................................... 303


y quyn.................................................................................................. 304
S dng y quyn xc nhn phng thc lc thc thi............................. 304
y quyn tnh........................................................................................... 314
Dng y quyn nh thuc tnh................................................................. 315
Thit lp th t thi hnh vi mng y quyn........................................... 316
Multicasting............................................................................................. 320

S kin..................................................................................................... 324
C ch publishing- subscribing................................................................324
S kin v y quyn................................................................................. 325

Cu hi & bi tp..................................................................................... 333

12. Cc lp c s .NET......................................................................................335
Lp i tng trong .NET Framework.................................................... 335
Lp Timer................................................................................................ 337
Lp v th mc v h thng.................................................................... 340
Lp Math..................................................................................................342
Lp thao tc tp tin.................................................................................. 345
Lm vic vi tp tin d liu..................................................................... 351
Cu hi & bi tp..................................................................................... 362

13. X l ngoi l................................................................................................. 364


Pht sinh v bt gi ngoi l.................................................................... 365
Cu lnh throw......................................................................................... 365
Cu lnh catch.......................................................................................... 367
Cu lnh finally........................................................................................ 373

Nhng i tng ngoi l........................................................................ 375


To ring cc ngoi l.............................................................................. 378
Pht sinh li ngoi l................................................................................ 381
Cu hi & bi tp..................................................................................... 385

Ngn Ng Lp Trnh C#

Tham Kho
Gio trnh Ngn ng Lp trnh C# c bin dch v tng hp t:
Programming C#, Jesse Liberty, OReilly.
C# in 21 Days, Bradley L.Jones, SAMS.
Windows Forms Programming with C#, Erik Brown, Manning.
MSDN Library April 2002.

Quy c
Gio trnh s dng mt s quy c nh sau:
Cc thut ng c gii thiu ln u tin s in nghing.
M ngun ca chng trnh minh ha dng font Verdana -10.
Cc t kha ca C# dng font Verdana-10, m hoc Verdana-10, bnh thng.
Tn namspace, lp, i tng, phng thc, thuc tnh, s kin... dng font Verdana10.
Kt qu ca chng trnh xut ra mn hnh console dng font Courier New-10.

Ngn Ng Lp Trnh C#

Chng 1

MICROSOFT .NET
Tnh hnh trc khi MS.NET ra i

Ngun gc ca .NET

Microsoft .NET
Tng quan
Kin trc .NET Framework

Common Language Runtime


(CLR)

Th vin .NET Framework

Pht trin ng dng client

Bin dch v MSIL


Ngn ng C#

Tnh hnh trc khi MS.NET ra i


Trong lnh vc cng ngh thng tin ca th gii ngy nay, vi s pht trin lin tc v a
dng nht l phn mm, cc h iu hnh, cc mi trng pht trin, cc ng dng lin tc ra
i. Tuy nhin, i khi vic pht trin khng ng nht v nht l do li ch khc nhau ca
cc cng ty phn mm ln lm nh hng n nhng ngi xy dng phn mm.
Cch y vi nm Java c Sun vit ra, c sc mnh ng k, n hng ti vic chy
trn nhiu h iu hnh khc nhau, c lp vi b x l (Intel, Risc,). c bit l Java rt
thch hp cho vic vit cc ng dng trn Internet. Tuy nhin, Java li c hn ch v mt tc
v trn thc t vn cha thnh hnh. Mc d Sun Corporation v IBM c y mnh Java,
nhng Microsoft dng ASP lm gim kh nng nh hng ca Java.
lp trnh trn Web, lu nay ngi ta vn dng CGI-Perl v gn y nht l PHP, mt
ngn ng ging nh Perl nhng tc chy nhanh hn. Ta c th trin khai Perl trn
Unix/Linux hay MS Windows. Tuy nhin c nhiu ngi khng thch dng do bn thn ngn
ng hay cc qui c khc thng v Perl khng c pht trin thng nht, cc cng c c
xy dng cho Perl tuy rt mnh nhng do nhiu nhm pht trin v ngi ta khng m bo
rng tng lai ca n ngy cng tt p hn.
8
Microsoft .NET

Ngn Ng Lp Trnh C#

Trong gii pht trin ng dng trn Windows ta c th vit ng dng bng Visual C++,
Delphi hay Visual Basic, y l mt s cng c ph bin v mnh. Trong Visual C++ l
mt ngn ng rt mnh v cng rt kh s dng. Visual Basic th n gin d hc, d dng
nht nn rt thng dng. L do chnh l Visual Basic gip chng ta c th vit chng trnh
trn Windows d dng m khng cn thit phi bit nhiu v cch thc MS Windows hot
ng, ta ch cn bit mt s kin thc cn bn ti thiu v MS Windows l c th lp trnh
c. Do theo quan im ca Visual Basic nn n lin kt vi Windows l iu t nhin
v d hiu, nhng hn ch l Visual Basic khng phi ngn ng hng i tng (Object
Oriented).
Delphi l hu du ca Turbo Pascal ca Borland. N cng ging v tng i d dng
nh Visual Basic. Delphi l mt ngn ng hng i tng. Cc iu khin dng trn Form
ca Delphi u c t ng khi to m ngun. Tuy nhin, chc nng khi ng m ngun
ny ca Delphi i khi gp rc ri khi c s can thip ca ngi dng vo. Sau ny khi cng
ty Borland b bn v cc chuyn gia xy dng nn Delphi chy qua bn Microsoft, v
Delphi khng cn c pht trin tt na, ngi ta khng dm u t trin khai phn mm
vo Delphi. Cng ty sau ny pht trin dng sn phm Jbuilder (dng Java) khng cn
quan tm n Delphi.
Tuy Visual Basic bn hn do khng cn phi khi to m ngun trong Form khi thit k
nhng Visual Basic cng c nhiu khuyt im :
Khng h tr thit k hng i tng, nht l kh nng tha k (inheritance).
Gii hn v vic chy nhiu tiu trnh trong mt ng dng, v d ta khng th dng
Visual Basic vit mt Service kiu NT.
Kh nng x l li rt yu, khng thch hp trong mi trng Multi- tier
Kh dng chung vi ngn ng khc nh C++.
Khng c User Interface thch hp cho Internet.
Do Visual Basic khng thch hp cho vit cc ng Web Server nn Microsoft to ra ASP
(Active Server Page). Cc trang ASP ny va c tag HTML va cha cc on script
(VBScript, JavaScript) nm ln ln nhau. Khi x l mt trang ASP, nu l tag HTML th s
c gi thng qua Browser, cn cc script th s c chuyn thnh cc dng HTML ri gi
i, ngoi tr cc function hay cc sub trong ASP th v tr cc script khc rt quan trng.
Khi mt s chc nng no c vit tt ngi ta dch thnh ActiveX v a n vo Web
Server. Tuy nhin v l do bo mt nn cc ISP (Internet Service Provider) lm my ch cho
Web site thng rt d t khi ci ActiveX l trn my ca h. Ngoi ra vic tho g cc
phin bn ca ActiveX ny l cng vic rt kh, thng xuyn lm cho Administrator nhc
u. Nhng ngi tng qun l cc version ca DLL trn Windows iu than phin ti sao
phi ng k cc DLL v nht l ch c th ng k mt phin bn ca DLL m thi. V t
DLL Hell xut hin tc l a ngc DLL

9
Microsoft .NET

Ngn Ng Lp Trnh C#

Sau ny gip cho vic lp trnh ASP nhanh hn th cng c Visual InterDev, mt IDE
(Integrated Development Environment) ra i. Visual InterDev to ra cc Design Time
Controls cho vic thit k cc iu khin trn web, Tic thay Visual InterDev khng bn
vng lm nn sau mt thi gian th cc nh pht trin ri b n.
Tm li bn thn ca ASP hy cn mt s khuyt im quan trng, nht l khi chy trn
Internet Information Server vi Windows NT 4, ASP khng ng tin cy lm.
Tm li trong gii lp trnh theo Microsoft th vic lp trnh trn desktop cho n lp trnh
h phn tn hay trn web l khng c nhp nhng cho lm. chuyn c t lp trnh
client hay desktop n lp trnh web l mt chng ng di.

Ngun gc .NET
u nm 1998, sau khi hon tt phin bn Version 4 ca Internet Information Server
(IIS), cc i ng lp trnh Microsoft nhn thy h cn rt nhiu sng kin kin ton IIS.
H bt u xy dng mt kin trc mi trn nn tng tng v t tn l Next
Generation Windows Services (NGWS).
Sau khi Visual Basic c trnh lng vo cui 1998, d n k tip mang tn Visual Studio
7 c xc nhp vo NGWS. i ng COM+/MTS gp vo mt universal runtime cho tt c
ngn ng lp trnh chung trong Visual Studio, v tham vng ca h cung cp cho cc ngn
ng lp trnh ca cc cng ty khc dng chung lun. Cng vic ny c xc tin mt cch
hon ton b mt mi cho n hi ngh Professional Developers Conference Orlado vo
thng 7/2000. n thng 11/2000 th Microsoft pht hnh bn Beta 1 ca .NET gm 3 a
CD. Tnh n lc ny th Microsoft lm vic vi .NET gn 3 nm ri, do bn Beta 1
ny tng i vng chc.
.NET mang dng dp ca nhng sng kin c p dng trc y nh p-code trong
UCSD Pascal cho n Java Virtual Machine. C iu l Microsoft gp nht nhng sng kin
ca ngi khc, kt hp vi sng kin ca chnh mnh lm nn mt sn phm hon chnh
t bn trong ln bn ngoi. Hin ti Microsoft cng b phin bn release ca .NET.
Tht s Microsoft t cc vo .NET v theo thng tin ca cng ty, tp trung 80%
sc mnh ca Microsoft nghin cu v trin khai .NET (bao gm nhn lc v ti chnh ?),
tt c cc sn phm ca Microsoft s c chuyn qua .NET.

Microsoft .NET
Tng quan
Microsoft .NET gm 2 phn chnh : Framework v Integrated Development Environment
(IDE). Framework cung cp nhng g cn thit v cn bn, ch Framework c ngha l khung
hay khung cnh trong ta dng nhng h tng c s theo mt qui c nht nh cng
vic c tri chy. IDE th cung cp mt mi trng gip chng ta trin khai d dng, v
nhanh chng cc ng dng da trn nn tng .NET. Nu khng c IDE chng ta cng c th
10
Microsoft .NET

Ngn Ng Lp Trnh C#

dng mt trnh son tho v nh Notepad hay bt c trnh son tho vn bn no v s dng
command line bin dch v thc thi, tuy nhin vic ny mt nhiu thi gian. Tt nht l
chng ta dng IDE pht trin cc ng dng, v cng l cch d s dng nht.
Thnh phn Framework l quan trng nht .NET l ct li v tinh hoa ca mi trng,
cn IDE ch l cng c pht trin da trn nn tng thi. Trong .NET ton b cc ngn
ng C#, Visual C++ hay Visual Basic.NET u dng cng mt IDE.
Tm li Microsoft .NET l nn tng cho vic xy dng v thc thi cc ng dng phn tn
th h k tip. Bao gm cc ng dng t client n server v cc dch v khc. Mt s tnh
nng ca Microsoft .NET cho php nhng nh pht trin s dng nh sau:
Mt m hnh lp trnh cho php nh pht trin xy dng cc ng dng dch v web v
ng dng client vi Extensible Markup Language (XML).
Tp hp dch v XML Web, nh Microsoft .NET My Services cho php nh pht
trin n gin v tch hp ngi dng kinh nghim.
Cung cp cc server phc v bao gm: Windows 2000, SQL Server, v BizTalk
Server, tt c iu tch hp, hot ng, v qun l cc dch v XML Web v cc ng
dng.
Cc phn mm client nh Windows XP v Windows CE gip ngi pht trin phn
phi su v thuyt phc ngi dng kinh nghim thng qua cc dng thit b.
Nhiu cng c h tr nh Visual Studio .NET, pht trin cc dch v Web XML,
ng dng trn nn Windows hay nn web mt cch d dng v hiu qu.

Kin trc .NET Framework


.NET Framework l mt platform mi lm n gin vic pht trin ng dng trong mi
trng phn tn ca Internet. .NET Framework c thit k y p ng theo quan
im sau:
cung cp mt mi trng lp trnh hng i tng vng chc, trong m
ngun i tng c lu tr v thc thi mt cch cc b. Thc thi cc b nhng
c phn tn trn Internet, hoc thc thi t xa.
cung cp mt mi trng thc thi m ngun m ti thiu c vic ng gi phn
mm v s tranh chp v phin bn.
cung cp mt mi trng thc thi m ngun m m bo vic thc thi an ton m
ngun, bao gm c vic m ngun c to bi hng th ba hay bt c hng no m
tun th theo kin trc .NET.
cung cp mt mi trng thc thi m ngun m loi b c nhng li thc hin
cc script hay mi trng thng dch.
lm cho nhng ngi pht trin c kinh nghim vng chc c th nm vng nhiu
kiu ng dng khc nhau. Nh l t nhng ng dng trn nn Windows n nhng
ng dng da trn web.
11
Microsoft .NET

Ngn Ng Lp Trnh C#

xy dng tt c cc thng tin da trin tiu chun cng nghip m bo rng


m ngun trn .NET c th tch hp vi bt c m ngun khc.
.NET Framework c hai thnh phn chnh: Common Language Runtime (CLR) v th
vin lp .NET Framework. CLR l nn tng ca .NET Framework. Chng ta c th hiu
runtime nh l mt agent qun l m ngun khi n c thc thi, cung cp cc dch v ct li
nh: qun l b nh, qun l tiu trnh, v qun l t xa. Ngoi ra n cn thc y vic s
dng kiu an ton v cc hnh thc khc ca vic chnh xc m ngun, m bo cho vic thc
hin c bo mt v mnh m. Tht vy, khi nim qun l m ngun l nguyn l nn tng
ca runtime. M ngun m ch ti runtime th c bit nh l m ngun c qun l
(managed code). Trong khi m ngun m khng c ch ti runtime th c bit nh m
ngun khng c qun l (unmanaged code).
Th vin lp, mt thnh phn chnh khc ca .NET Framework l mt tp hp hng i
tng ca cc kiu d liu c dng li, n cho php chng ta c th pht trin nhng ng
dng t nhng ng dng truyn thng command-line hay nhng ng dng c giao din
ha (GUI) n nhng ng dng mi nht c cung cp bi ASP.NET, nh l Web Form v
dch v XML Web.

Hnh 1.1: M t cc thnh phn trong .NET Framework.


12
Microsoft .NET

Ngn Ng Lp Trnh C#

Common Language Runtime (CLR)


Nh cp th CLR thc hin qun l b nh, qun l thc thi tiu trnh, thc thi m
ngun, xc nhn m ngun an ton, bin bch v cc dch v h thng khc. Nhng c tnh
trn l nn tng c bn cho nhng m ngun c qun l chy trn CLR.
Do ch trng n bo mt, nhng thnh phn c qun l c cp nhng mc
quyn hn khc nhau, ph thuc vo nhiu yu t nguyn thy ca chng nh: lin quan n
Internet, h thng mng trong nh my, hay mt my tnh cc b. iu ny c ngha rng,
mt thnh phn c qun l c th c hay khng c quyn thc hin mt thao tc truy cp
tp tin, thao tc truy cp registry, hay cc chc nng nhy cm khc.
CLR thc y vic m ngun thc hin vic truy cp c bo mt. V d, ngi s dng
gii hn rng vic thc thi nhng vo trong mt trang web c th chy c hot hnh trn
mn hnh hay ht mt bn nhc, nhng khng th truy cp c d liu ring t, tp tin h
thng, hay truy cp mng. Do , c tnh bo mt ca CLR cho php nhng phn mm ng
gi trn Inernet c nhiu c tnh m khng nh hng n vic bo mt h thng.
CLR cn thc y cho m ngun c thc thi mnh m hn bng vic thc thi m ngun
chnh xc v s xc nhn m ngun. Nn tng ca vic thc hin ny l Common Type
System (CTS). CTS m bo rng nhng m ngun c qun l th c t m t (selfdescribing). S khc nhau gia Microsoft v cc trnh bin dch ngn ng ca hng th ba l
vic to ra cc m ngun c qun l c th thch hp vi CTS. iu ny th m ngun c
qun l c th s dng nhng kiu c qun l khc v nhng th hin, trong khi thc y
nghim ngt vic s dng kiu d liu chnh xc v an ton.
Thm vo , mi trng c qun l ca runtime s thc hin vic t ng x l layout
ca i tng v qun l nhng tham chiu n i tng, gii phng chng khi chng khng
cn c s dng na. Vic qun l b nh t ng ny cn gii quyt hai li chung ca ng
dng: thiu b nh v tham chiu b nh khng hp l.
Trong khi runtime c thit k cho nhng phn mm ca tng lai, n cng h tr cho
phn mm ngy nay v trc y. Kh nng hot ng qua li gia m ngun c qun l v
m ngun khng c qun l cho php ngi pht trin tip tc s dng nhng thnh phn
cn thit ca COM v DLL.
Rutime c thit k ci tin hiu sut thc hin. Mc d CLR cung cp nhiu cc tiu
chun dch v runtime, nhng m ngun c qun l khng bao gi c dch. C mt c
tnh gi l Just-in-Time (JIT) bin dch tt c nhng m ngun c qun l vo trong ngn
ng my ca h thng vo lc m n c thc thi. Khi , trnh qun l b nh xa b
nhng phn mnh b nh nu c th c v gia tng tham chiu b nh cc b, v kt qu
gia tng hiu qu thc thi.

13
Microsoft .NET

Ngn Ng Lp Trnh C#

Th vin lp .NET Framework


Th vin lp .NET Framework l mt tp hp nhng kiu d liu c dng li v c
kt hp cht ch vi Common Language Runtime. Th vin lp l hng i tng cung cp
nhng kiu d liu m m ngun c qun l ca chng ta c th dn xut. iu ny khng
ch lm cho nhng kiu d liu ca .NET Framework d s dng m cn lm gim thi gian
lin quan n vic hc c tnh mi ca .NET Framework. Thm vo , cc thnh phn ca
cc hng th ba c th tch hp vi nhng lp trong .NET Framework.
Cng nh mong i ca ngi pht trin vi th vin lp hng i tng, kiu d liu .
NET Framework cho php ngi pht trin thit lp nhiu mc thng dng ca vic lp
trnh, bao gm cc nhim v nh: qun l chui, thu thp hay chn lc d liu, kt ni vi c
c d liu, v truy cp tp tin. Ngoi nhng nhim v thng dng trn. Th vin lp cn a
vo nhng kiu d liu h tr cho nhng kch bn pht trin chuyn bit khc. V d ngi
pht trin c th s dng .NET Framework pht trin nhng kiu ng dng v dch v nh
sau:
ng dng Console
ng dng giao din GUI trn Windows (Windows Forms)
ng dng ASP.NET
Dch v XML Web
Dch v Windows
Trong nhng lp Windows Forms cung cp mt tp hp ln cc kiu d liu nhm
lm n gin vic pht trin cc ng dng GUI chy trn Windows. Cn nu nh vit cc ng
dng ASP.NET th c th s dng cc lp Web Forms trong th vin .NET Framework.

Pht trin ng dng Client


Nhng ng dng client cng gn vi nhng ng dng kiu truyn thng c lp trnh
da trn Windows. y l nhng kiu ng dng hin th nhng ca s hay nhng form trn
desktop cho php ngi dng thc hin mt thao tc hay nhim v no . Nhng ng dng
client bao gm nhng ng dng nh x l vn bn, x l bng tnh, nhng ng dng trong
lnh vc thng mi nh cng c nhp liu, cng c to bo co...Nhng ng dng client ny
thng s dng nhng ca s, menu, toolbar, button hay cc thnh phn GUI khc, v chng
thng truy cp cc ti nguyn cc b nh l cc tp tin h thng, cc thit b ngoi vi nh
my in.
Mt loi ng dng client khc vi ng dng truyn thng nh trn l ActiveX control
(hin nay n c thay th bi cc Windows Form control) c nhng vo cc trang web
trn Internet. Cc ng dng ny cng ging nh nhng ng dng client khc l c th truy cp
ti nguyn cc b.
Trong qu kh, nhng nh pht trin c th to cc ng dng s dng C/C++ thng qua
kt ni vi MFC hoc s dng mi trng pht trin ng dng nhanh (RAD: Rapid
14
Microsoft .NET

Ngn Ng Lp Trnh C#

Application Development). .NET Framework tch hp din mo ca nhng sn phm thnh


mt. Mi trng pht trin c nh lm n gin mnh m s pht trin ca ng dng client.
Nhng lp .NET Framework cha trong .NET Framework c thit k cho vic s dng
pht trin cc GUI. iu ny cho php ngi pht trin nhanh chng v d dng to cc ca
s, button, menu, toolbar, v cc thnh phn khc trong cc ng dng c vit phc v cho
lnh vc thng mi. V d nh, .NET cung cp nhng thuc tnh n gin hiu chnh cc
hiu ng visual lin quan n form. Trong vi trng hp h iu hnh khng h tr vic
thay i nhng thuc tnh ny mt cch trc tip, v trong trng hp ny .NET t ng to
li form. y l mt trong nhiu cch m .NET tch hp vic pht trin giao din lm cho m
ngun n gin v mnh m hn.
Khng ging nh ActiveX control, Windows Form control c s truy cp gii hn n
my ca ngi s dng. iu ny c ngha rng m ngun thc thi nh phn c th truy cp
mt vi ti nguyn trong my ca ngi s dng (nh cc thnh phn ha hay mt s tp
tin c gii hn) m khng th truy cp n nhng ti nguyn khc. Nguyn nhn l s bo
mt truy cp ca m ngun. Lc ny cc ng dng c ci t trn my ngi dng c th
an ton a ln Internet

Bin dch v MSIL


Trong .NET Framework, chng trnh khng c bin dch vo cc tp tin thc thi m
thay vo chng c bin dch vo nhng tp tin trung gian gi l Microsoft Intermediate
Language (MSIL). Nhng tp tin MSIL c to ra t C# cng tng t nh cc tp tin MSIL
c to ra t nhng ngn ng khc ca .NET, platform y khng cn bit ngn ng ca
m ngun. iu quan trng chnh yu ca CLR l chung (common), cng mt runtime h tr
pht trin trong C# cng nh trong VB.NET.
M ngun C# c bin dch vo MSIL khi chng ta build project. M MSIL ny c
lu vo trong mt tp tin trn a. Khi chng ta chy chng trnh, th MSIL c bin dch
mt ln na, s dng trnh bin dch Just-In-Time (JIT). Kt qu l m my c thc thi bi
b x l ca my.
Trnh bin dch JIT tiu chun th thc hin theo yu cu. Khi mt phng thc c gi,
trnh bin dch JIT phn tch MSIL v to ra sn phm m my c hiu qu cao, m ny c th
chy rt nhanh. Trnh bin dch JIT thng minh nhn ra khi mt m c bin dch,
do vy khi ng dng chy th vic bin dch ch xy ra khi cn thit, tc l ch bin dch m
MSIL cha bin dch ra m my. Khi mt ng dng .NET thc hin, chng c xu hng l
chy nhanh v nhanh hn na, cng nh l nhng m ngun c bin dch ri th c dng
li.
Do tt c cc ngn ng .NET Framework cng to ra sn phm MSIL ging nhau, nn kt
qu l mt i tng c to ra t ngn ng ny c th c truy cp hay c dn xut t

15
Microsoft .NET

Ngn Ng Lp Trnh C#

mt i tng ca ngn ng khc trong .NET. V d, ngi pht trin c th to mt lp c


s trong VB.NET v sau dn xut n trong C# mt cch d dng.

Ngn ng C#
Ngn ng C# kh n gin, ch khong 80 t kha v hn mi my kiu d liu c
xy dng sn. Tuy nhin, ngn ng C# c ngha cao khi n thc thi nhng khi nim lp
trnh hin i. C# bao gm tt c nhng h tr cho cu trc, thnh phn component, lp trnh
hng i tng. Nhng tnh cht hin din trong mt ngn ng lp trnh hin i. V
ngn ng C# hi nhng iu kin nh vy, hn na n c xy dng trn nn tng ca
hai ngn ng mnh nht l C++ v Java.
Ngn ng C# c pht trin bi i ng k s ca Microsoft, trong ngi dn u l
Anders Hejlsberg v Scott Wiltamuth. C hai ngi ny iu l nhng ngi ni ting, trong
Anders Hejlsberg c bit n l tc gi ca Turbo Pascal, mt ngn ng lp trnh PC
ph bin. V ng ng u nhm thit k Borland Delphi, mt trong nhng thnh cng u
tin ca vic xy dng mi trng pht trin tch hp (IDE) cho lp trnh client/server.
Phn ct li hay cn gi l tri tim ca bt c ngn ng lp trnh hng i tng l s h
tr ca n cho vic nh ngha v lm vic vi nhng lp. Nhng lp th nh ngha nhng
kiu d liu mi, cho php ngi pht trin m rng ngn ng to m hnh tt hn gii
quyt vn . Ngn ng C# cha nhng t kha cho vic khai bo nhng kiu lp i tng
mi v nhng phng thc hay thuc tnh ca lp, v cho vic thc thi ng gi, k tha, v
a hnh, ba thuc tnh c bn ca bt c ngn ng lp trnh hng i tng.
Trong ngn ng C# mi th lin quan n khai bo lp iu c tm thy trong phn
khai bo ca n. nh ngha mt lp trong ngn ng C# khng i hi phi chia ra tp tin
header v tp tin ngun ging nh trong ngn ng C++. Hn th na, ngn ng C# h tr
kiu XML, cho php chn cc tag XML pht sinh t ng cc document cho lp.
C# cng h tr giao din interface, n c xem nh mt cam kt vi mt lp cho nhng
dch v m giao din quy nh. Trong ngn ng C#, mt lp ch c th k tha t duy nht
mt lp cha, tc l khng cho a k tha nh trong ngn ng C++, tuy nhin mt lp c th
thc thi nhiu giao din. Khi mt lp thc thi mt giao din th n s ha l n s cung cp
chc nng thc thi giao din.
Trong ngn ng C#, nhng cu trc cng c h tr, nhng khi nim v ng ngha ca
n thay i khc vi C++. Trong C#, mt cu trc c gii hn, l kiu d liu nh gn, v
khi to th hin th n yu cu t hn v h iu hnh v b nh so vi mt lp. Mt cu trc
th khng th k tha t mt lp hay c k tha nhng mt cu trc c th thc thi mt
giao din.
Ngn ng C# cung cp nhng c tnh hng thnh phn (component-oriented), nh l
nhng thuc tnh, nhng s kin. Lp trnh hng thnh phn c h tr bi CLR cho php
lu tr metadata vi m ngun cho mt lp. Metadata m t cho mt lp, bao gm nhng
16
Microsoft .NET

Ngn Ng Lp Trnh C#

phng thc v nhng thuc tnh ca n, cng nh nhng s bo mt cn thit v nhng


thuc tnh khc. M ngun cha ng nhng logic cn thit thc hin nhng chc nng
ca n.. Do vy, mt lp c bin dch nh l mt khi self-contained, nn mi trng
hosting bit c cch c metadata ca mt lp v m ngun cn thit m khng cn nhng
thng tin khc s dng n.
Mt lu cui cng v ngn ng C# l ngn ng ny cng h tr vic truy cp b nh
trc tip s dng kiu con tr ca C++ v t kha cho du ngoc [] trong ton t. Cc m
ngun ny l khng an ton (unsafe). V b gii phng b nh t ng ca CLR s khng
thc hin vic gii phng nhng i tng c tham chiu bng s dng con tr cho n khi
chng c gii phng.

17
Microsoft .NET

Ngn Ng Lp Trnh C#

Chng 2

NGN NG C#
Ti sao phi s dng ngn ng C#

C# l ngn ng n gin

C# l ngn ng hin i

C# l ngn ng hng i tng

C# l ngn ng mnh m

C# l ngn ng t t kha

C# l ngn ng module ha

C# s l ngn ng ph bin

Ngn ng C# v nhng ngn ng khc

Cc bc chun b cho chng trnh

Chng trnh C# n gin

Pht trin chng trnh minh ha

Cu hi & bi tp

Ti sao phi s dng ngn ng C#


Nhiu ngi tin rng khng cn thit c mt ngn ng lp trnh mi. Java, C++, Perl,
Microsoft Visual Basic, v nhng ngn ng khc c ngh rng cung cp tt c nhng
chc nng cn thit.
Ngn ng C# l mt ngn ng c dn xut t C v C++, nhng n c to t nn tng
pht trin hn. Microsoft bt u vi cng vic trong C v C++ v thm vo nhng c tnh
mi lm cho ngn ng ny d s dng hn. Nhiu trong s nhng c tnh ny kh ging
vi nhng c tnh c trong ngn ng Java. Khng dng li , Microsoft a ra mt s
mc ch khi xy dng ngn ng ny. Nhng mc ch ny c c tm tt nh sau:
C# l ngn ng n gin
C# l ngn ng hin i
C# l ngn ng hng i tng
C# l ngn ng mnh m v mm do
18
Ngn Ng C#

Ngn Ng Lp Trnh C#

C# l ngn ng c t t kha
C# l ngn ng hng module
C# s tr nn ph bin

C# l ngn ng n gin
C# loi b mt vi s phc tp v ri rm ca nhng ngn ng nh Java v c++, bao gm
vic loi b nhng macro, nhng template, a k tha, v lp c s o (virtual base class).
Chng l nhng nguyn nhn gy ra s nhm ln hay dn n nhng vn cho cc ngi
pht trin C++. Nu chng ta l ngi hc ngn ng ny u tin th chc chn l ta s khng
tri qua nhng thi gian hc n! Nhng khi ta s khng bit c hiu qu ca ngn
ng C# khi loi b nhng vn trn.
Ngn ng C# n gin v n da trn nn tng C v C++. Nu chng ta thn thin vi C
v C++ hoc thm ch l Java, chng ta s thy C# kh ging v din mo, c php, biu
thc, ton t v nhng chc nng khc c ly trc tip t ngn ng C v C++, nhng n
c ci tin lm cho ngn ng n gin hn. Mt vi trong cc s ci tin l loi b cc
d tha, hay l thm vo nhng c php thay i. V d nh, trong C++ c ba ton t lm
vic vi cc thnh vin l ::, . , v ->. bit khi no dng ba ton t ny cng phc tp v
d nhm ln. Trong C#, chng c thay th vi mt ton t duy nht gi l . (dot). i vi
ngi mi hc th iu ny v nhng vic ci tin khc lm bt nhm ln v n gin hn.
Ghi ch: Nu chng ta s dng Java v tin rng n n gin, th chng ta cng s tm
thy rng C# cng n gin. Hu ht mi ngi u khng tin rng Java l ngn ng n
gin. Tuy nhin, C# th d hn l Java v C++.

C# l ngn ng hin i
iu g lm cho mt ngn ng hin i? Nhng c tnh nh l x l ngoi l, thu gom
b nh t ng, nhng kiu d liu m rng, v bo mt m ngun l nhng c tnh c
mong i trong mt ngn ng hin i. C# cha tt c nhng c tnh trn. Nu l ngi mi
hc lp trnh c th chng ta s cm thy nhng c tnh trn phc tp v kh hiu. Tuy
nhin, cng ng lo lng chng ta s dn dn c tm hiu nhng c tnh qua cc chng
trong cun sch ny.
Ghi ch: Con tr c tch hp vo ngn ng C++. Chng cng l nguyn nhn gy ra
nhng rc ri ca ngn ng ny. C# loi b nhng phc tp v rc ri pht sinh bi con tr.
Trong C#, b thu gom b nh t ng v kiu d liu an ton c tch hp vo ngn ng,
s loi b nhng vn rc ri ca C++.

C# l ngn ng hng i tng


Nhng c im chnh ca ngn ng hng i tng (Object-oriented language) l s
ng gi (encapsulation), s k tha (inheritance), v a hnh (polymorphism). C# h tr tt

19
Ngn Ng C#

Ngn Ng Lp Trnh C#

c nhng c tnh trn. Phn hng i tng ca C# s c trnh by chi tit trong mt
chng ring phn sau.

C# l ngn ng mnh m v cng mm do


Nh cp trc, vi ngn ng C# chng ta ch b gii hn chnh bi bn thn hay
l tr tng tng ca chng ta. Ngn ng ny khng t nhng rng buc ln nhng vic c
th lm. C# c s dng cho nhiu cc d n khc nhau nh l to ra ng dng x l vn
bn, ng dng ha, bn tnh, hay thm ch nhng trnh bin dch cho cc ngn ng khc.

C# l ngn ng t t kha
C# l ngn ng s dng gii hn nhng t kha. Phn ln cc t kha c s dng
m t thng tin. Chng ta c th ngh rng mt ngn ng c nhiu t kha th s mnh hn.
iu ny khng phi s tht, t nht l trong trng hp ngn ng C#, chng ta c th tm
thy rng ngn ng ny c th c s dng lm bt c nhim v no. Bng sau lit k cc
t kha ca ngn ng C#.
abstract

default

foreach

object

sizeof

unsafe

as

delegate

goto

operator

stackalloc

ushort

base

do

if

out

static

using

bool

double

implicit

override

string

virtual

break

else

in

params

struct

volatile

byte

enum

int

private

switch

void

case

event

interface

protected

this

while

catch

explicit

internal

public

throw

char

extern

is

readonly

true

checked

false

lock

ref

try

class

finally

long

return

typeof

const

fixed

namespace

sbyte

uint

continue

float

new

sealed

ulong

decimal

for

null

short

unchecked

Bng 1.2: T kha ca ngn ng C#.

C# l ngn ng hng module


M ngun C# c th c vit trong nhng phn c gi l nhng lp, nhng lp ny
cha cc phng thc thnh vin ca n. Nhng lp v nhng phng thc c th c s
dng li trong ng dng hay cc chng trnh khc. Bng cch truyn cc mu thng tin n
nhng lp hay phng thc chng ta c th to ra nhng m ngun dng li c hiu qu.

C# s l mt ngn ng ph bin
20
Ngn Ng C#

Ngn Ng Lp Trnh C#

C# l mt trong nhng ngn ng lp trnh mi nht. Vo thi im cun sch ny c


vit, n khng c bit nh l mt ngn ng ph bin. Nhng ngn ng ny c mt s l do
tr thnh mt ngn ng ph bin. Mt trong nhng l do chnh l Microsoft v s cam kt
ca .NET
Microsoft mun ngn ng C# tr nn ph bin. Mc d mt cng ty khng th lm mt
sn phm tr nn ph bin, nhng n c th h tr. Cch y khng lu, Microsoft gp s
tht bi v h iu hnh Microsoft Bob. Mc d Microsoft mun Bob tr nn ph bin nhng
tht bi. C# thay th tt hn em n thnh cng s vi Bob. Tht s l khng bit khi no
mi ngi trong cng ty Microsoft s dng Bob trong cng vic hng ngy ca h. Tuy nhn,
vi C# th khc, n c s dng bi Microsoft. Nhiu sn phm ca cng ty ny chuyn
i v vit li bng C#. Bng cch s dng ngn ng ny Microsoft xc nhn kh nng ca
C# cn thit cho nhng ngi lp trnh.
Micorosoft .NET l mt l do khc em n s thnh cng ca C#. .NET l mt s
thay i trong cch to v thc thi nhng ng dng.
Ngoi hai l do trn ngn ng C# cng s tr nn ph bin do nhng c tnh ca ngn
ng ny c cp trong mc trc nh: n gin, hng i tng, mnh m... Ngn

ng C# v nhng ngn ng khc


Chng ta tng nghe n nhng ngn ng khc nh Visual Basic, C++ v Java. C l
chng ta cng t hi s khc nhau gia ngn ng C# v nhng ngn ng . V cng t hi
ti sao li chn ngn ng ny hc m khng chn mt trong nhng ngn ng kia. C rt
nhiu l do v chng ta hy xem mt s s so snh gia ngn ng C# vi nhng ngn ng
khc gip chng ta phn no tr li c nhng thc mc.
Microsoft ni rng C# mang n sc mnh ca ngn ng C++ vi s d dng ca ngn
ng Visual Basic. C th n khng d nh Visual Basic, nhng vi phin bn Visual
Basic.NET (Version 7) th ngang nhau. Bi v chng c vit li t mt nn tng. Chng ta
c th vit nhiu chng trnh vi t m ngun hn nu dng C#.
Mc d C# loi b mt vi cc c tnh ca C++, nhng b li n trnh c nhng li
m thng gp trong ngn ng C++. iu ny c th tit kim c hng gi hay thm ch
hng ngy trong vic hon tt mt chng trnh. Chng ta s hiu nhiu v iu ny trong cc
chng ca gio trnh.
Mt iu quan trng khc vi C++ l m ngun C# khng i hi phi c tp tin header.
Tt c m ngun c vit trong khai bo mt lp.
Nh ni bn trn. .NET runtime trong C# thc hin vic thu gom b nh t ng. Do
iu ny nn vic s dng con tr trong C# t quan trng hn trong C++. Nhng con tr cng
c th c s dng trong C#, khi nhng on m ngun ny s c nh du l khng
an ton (unsafe code).

21
Ngn Ng C#

Ngn Ng Lp Trnh C#

C# cng t b tng a k tha nh trong C++. V s khc nhau khc l C# a thm


thuc tnh vo trong mt lp ging nh trong Visual Basic. V nhng thnh vin ca lp
c gi duy nht bng ton t . khc vi C++ c nhiu cch gi trong cc tnh hung khc
nhau.
Mt ngn ng khc rt mnh v ph bin l Java, ging nh C++ v C# c pht trin
da trn C. Nu chng ta quyt nh s hc Java sau ny, chng ta s tm c nhiu ci m
hc t C# c th c p dng.
im ging nhau C# v Java l c hai cng bin dch ra m trung gian: C# bin dch ra
MSIL cn Java bin dch ra bytecode. Sau chng c thc hin bng cch thng dch
hoc bin dch just-in-time trong tng my o tng ng. Tuy nhin, trong ngn ng C#
nhiu h tr c a ra bin dch m ngn ng trung gian sang m my. C# cha nhiu
kiu d liu c bn hn Java v cng cho php nhiu s m rng vi kiu d liu gi tr. V
d, ngn ng C# h tr kiu lit k (enumerator), kiu ny c gii hn n mt tp hng
c nh ngha trc, v kiu d liu cu trc y l kiu d liu gi tr do ngi dng nh
ngha. Chng ta s c tm hiu k hn v kiu d liu tham chiu v kiu d liu gi tr s
c trnh by trong phn sau
Tng t nh Java, C# cng t b tnh a k tha trong mt lp, tuy nhin m hnh k
tha n ny c m rng bi tnh a k tha nhiu giao din. Cc bc chun b cho

chng trnh
Thng thng, trong vic pht trin phn mm, ngi pht trin phi tun th theo quy
trnh pht trin phn mm mt cch nghim ngt v quy trnh ny c chun ha. Tuy
nhin trong phm vi ca chng ta l tm hiu mt ngn ng mi v vit nhng chng trnh
nh th khng i hi kht khe vic thc hin theo quy trnh. Nhng gii quyt c
nhng vn th chng ta cng cn phi thc hin ng theo cc bc sau. u tin l phi
xc nh vn cn gii quyt. Nu khng bit r vn th ta khng th tm c phng
php gii quyt. Sau khi xc nh c vn , th chng ta c th ngh ra cc k hoch
thc hin. Sau khi c mt k hoch, th c th thc thi k hoch ny. Sau khi k hoch c
thc thi, chng ta phi kim tra li kt qu xem vn c gii quyt xong cha. Logic
ny thng c p dng trong nhiu lnh vc khc nhau, trong c lp trnh.
Khi to mt chng trnh trong C# hay bt c ngn ng no, chng ta nn theo nhng
bc tun t sau:
Xc nh mc tiu ca chng trnh.
Xc nh nhng phng php gii quyt vn .
To mt chng trnh gii quyt vn .
Thc thi chng trnh xem kt qu.

22
Ngn Ng C#

Ngn Ng Lp Trnh C#

V d mc tiu vit chng trnh x l vn bn n gin, mc tiu chnh l xy dng


chng trnh cho php son tho v lu tr nhng chui k t hay vn bn. Nu khng c
mc tiu th khng th vit c chng trnh hiu qu.
Bc th hai l quyt nh n phng php vit chng trnh. Bc ny xc nh
nhng thng tin no cn thit c s dng trong chng trnh, cc hnh thc no c s
dng. T nhng thng tin ny chng ta rt ra c phng php gii quyt vn .
Bc th ba l bc ci t, bc ny c th dng cc ngn ng khc nhau ci t,
tuy nhin, ngn ng ph hp gii quyt vn mt cch tt nht s c chn. Trong
phm vi ca sch ny chng ta mc nh l dng C#, n gin l chng ta ang tm hiu n!
V bc cui cng l phn thc thi chng trnh xem kt qu.

Chng trnh C# n gin


bt u cho vic tm hiu ngn ng C# v to tin cho cc chng sau, chng u
tin trnh by mt chng trnh C# n gin nht.

 V d 2.1 : Chng trnh C# u tin.


----------------------------------------------------------------------------class ChaoMung
{
static void Main( )
{
// Xuat ra man hinh
System.Console.WriteLine(Chao Mung);
}
}

----------------------------------------------------------------------------Kt qu:
Chao Mung

----------------------------------------------------------------------------Sau khi vit xong chng ta lu di dng tp tin c phn m rng *.cs (C sharp). Sau
bin dch v chy chng trnh. Kt qu l mt chui Chao Mung s xut hin trong mn
hnh console.
Cc mc sau s gii thiu xoay quanh v d 2.1, cn phn chi tit tng loi s c trnh
by trong cc chng k tip.

Lp, i tng v kiu d liu (type)


iu ct li ca lp trnh hng i tng l to ra cc kiu mi. Kiu l mt th c
xem nh tru tng. N c th l mt bng d liu, mt tiu trnh, hay mt nt lnh trong
mt ca s. Tm li kiu c nh ngha nh mt dng va c thuc tnh chung (properties)
v cc hnh vi ng x (behavior) ca n.
23
Ngn Ng C#

Ngn Ng Lp Trnh C#

Nu trong mt ng dng trn Windows chng ta to ra ba nt lnh OK, Cancel, Help, th


thc cht l chng ta ang dng ba th hin ca mt kiu nt lnh trong Windows v cc nt
ny cng chia x cc thuc tnh v hnh vi chung vi nhau. V d, cc nt c cc thuc tnh
nh kch thc, v tr, nhn tn (label), tuy nhin mi thuc tnh ca mt th hin khng nht
thit phi ging nhau, v thng th chng khc nhau, nh nt OK c nhn l OK, Cancel c
nhn l Cancel...Ngoi ra cc nt ny c cc hnh vi ng x chung nh kh nng v, kch
hot, p ng cc thng ip nhn,Ty theo tng chc nng c bit ring ca tng loi th
ni dung ng x khc nhau, nhng tt c chng c xem nh l cng mt kiu.
Cng nh nhiu ngn ng lp trnh hng i tng khc, kiu trong C# c nh ngha
l mt lp (class), v cc th hin ring ca tng lp c gi l i tng (object). Trong
cc chng k tip s trnh by cc kiu khc nhau ngoi kiu lp nh kiu lit k, cu trc v
kiu y quyn (delegates).
Quay li chng trnh ChaoMung trn, chng trnh ny ch c mt kiu n gin l lp
ChaoMung. nh ngha mt kiu lp trong C# chng ta phi dng t kho class, tip sau l
tn lp trong v d trn tn lp l ChaoMung. Sau nh ngha cc thuc tnh v hnh ng
cho lp. Thuc tnh v hnh ng phi nm trong du { }.
Ghi ch: Khai bo lp trong C# khng c du ; sau ngoc } cui cng ca lp. V khc
vi lp trong C/C++ l chia thnh 2 phn header v phn nh ngha. Trong C# , nh ngha
mt lp c gi gn trong du { } sau tn lp v trong cng mt tp tin.

Phng thc
Hai thnh phn chnh cu thnh mt lp l thuc tnh hay tnh cht v phng thc hay
cn gi l hnh ng ng x ca i tng. Trong C# hnh vi c nh ngha nh mt
phng thc thnh vin ca lp.
Phng thc chnh l cc hm c nh ngha trong lp. Do , ta cn c th gi cc
phng thc thnh vin l cc hm thnh vin trong mt lp. Cc phng thc ny ch ra
rng cc hnh ng m lp c th lm c cng vi cch thc lm hnh ng . Thng
thng, tn ca phng thc thng c t theo tn hnh ng, v d nh DrawLine() hay
GetString().

Tuy nhin trong v d 2.1 va trnh by, chng ta c hm thnh vin l Main() hm ny l
hm c bit, khng m t hnh ng no ca lp ht, n c xc nh l hm u vo ca
lp (entry point) v c CRL gi u tin khi thc thi.
Ghi ch: Trong C#, hm Main() c vit k t hoa u, v c th tr v gi tr void hay
int

Khi chng trnh thc thi, CLR gi hm Main() u tin, hm Main() l u vo ca


chng trnh, v mi chng trnh phi c mt hm Main(). i khi chng trnh c nhiu
hm Main() nhng lc ny ta phi xc nh cc ch dn bin dch CLR bit u l hm
Main() u vo duy nht trong chng trnh.
24
Ngn Ng C#

Ngn Ng Lp Trnh C#

Vic khai bo phng thc c xem nh l mt s giao c gia ngi to ra lp v


ngi s dng lp ny. Ngi xy dng cc lp cng c th l ngi dng lp , nhng
khng hon ton nh vy. V c th cc lp ny c xy dng thnh cc th vin chun v
cung cp cho cc nhm pht trin khcDo vy vic tun th theo cc qui tc l rt cn thit.
khai bo mt phng thc, phi xc nh kiu gi tr tr v, tn ca phng thc, v
cui cng l cc tham s cn thit cho phng thc thc hin.

Ch thch
Mt chng trnh c vit tt th cn phi c ch thch cc on m c vit. Cc on
ch thch ny s khng c bin dch v cng khng tham gia vo chng trnh. Mc ch
chnh l lm cho on m ngun r rng v d hiu.
Trong v d 2.1 c mt dng ch thch :
// Xuat ra man hinh.

Mt chui ch thch trn mt dng th bt u bng k t //. Khi trnh bin dch gp hai k
t ny th s b qua dng .
Ngoi ra C# cn cho php kiu ch thch cho mt hay nhiu dng, v ta phi khai bo /*
phn u ch thch v kt thc ch thch l k t */.

 V d 2.2 : Minh ha dng ch thch trn nhiu dng.


----------------------------------------------------------------------------class ChaoMung
{
static void Main()
{
/* Xuat ra man hinh chuoi chao mung
Su dung ham WriteLine cua lop System.Console
*/
System.Console.WriteLine(Chao Mung);
}
}

----------------------------------------------------------------------------Kt qu:
Chao Mung

----------------------------------------------------------------------------Ngoi hai kiu ch thch trn ging trong C/C++ th C# cn h tr thm kiu th ba cng l
kiu cui cng, kiu ny cha cc nh dng XML nhm xut ra tp tin XML khi bin dch
to su liu cho m ngun. Chng ta s bn kiu ny trong cc chng trnh cc phn tip.

25
Ngn Ng C#

Ngn Ng Lp Trnh C#

ng dng Console
V d n gin trn c gi l ng dng console, ng dng ny giao tip vi ngi dng
thng quan bn phm v khng c giao din ngi dng (UI), ging nh cc ng dng thng
thy trong Windows. Trong cc chng xy dng cc ng dng nng cao trn Windows hay
Web th ta mi dng cc cc giao din ha. Cn tm hiu v ngn ng C# thun tu th
cch tt nht l ta vit cc ng dng console.
Trong hai ng dng n gin trn ta dng phng thc WriteLine() ca lp Console.
Phng thc ny s xut ra mn hnh dng lnh hay mn hnh DOS chui tham s a vo,
c th l chui Chao Mung.

Namespace
Nh chng ta bit .NET cung cp mt th vin cc lp s v th vin ny c tn l
FCL (Framework Class Library). Trong Console ch l mt lp nh trong hng ngn lp
trong th vin. Mi lp c mt tn ring, v vy FCL c hng ngn tn nh ArrayList,
Dictionary, FileSelector,

iu ny lm ny sinh vn , ngi lp trnh khng th no nh ht c tn ca cc lp


trong .NET Framework. T hn na l sau ny c th ta to li mt lp trng vi lp c
chng hn. V d trong qu trnh pht trin mt ng dng ta cn xy dng mt lp t in v
ly tn l Dictionary, v iu ny dn n s tranh chp khi bin dch v C# ch cho php mt
tn duy nht.
Chc chn rng khi chng ta phi i tn ca lp t in m ta va to thnh mt ci
tn khc chng hn nh myDictionary. Khi s lm cho vic pht trin cc ng dng tr
nn phc tp, cng knh. n mt s pht trin nht nh no th chnh l cn c mng
cho nh pht trin.
Gii php gii quyt vn ny l vic to ra mt namespace, namsespace s hn ch
phm vi ca mt tn, lm cho tn ny ch c ngha trong vng nh ngha.
Gi s c mt ngi ni Tng l mt k s, t k s phi i km vi mt lnh vc nht nh
no , v nu khng th chng ta s khng bit c l anh ta l k s cu ng, c kh hay
phn mm. Khi mt lp trnh vin C# s bo rng Tng l CauDuong.KySu phn bit vi
CoKhi.KySu hay PhanMem.KySu. Namespace trong trng hp ny l CauDuong, CoKhi,
PhanMem s hn ch phm vi ca nhng t theo sau. N to ra mt vng khng gian tn
sau c ngha.
Tng t nh vy ta c to cc namespace phn thnh cc vng cho cc lp trng tn
khng tranh chp vi nhau.
Tng t nh vy, .NET Framework c xy dng mt lp Dictionary bn trong
namespace System.Collections, v tng ng ta c th to mt lp Dictionary khc nm
trong namespace ProgramCSharp.DataStructures, iu ny hon ton khng dn n s
tranh chp vi nhau.
26
Ngn Ng C#

Ngn Ng Lp Trnh C#

Trong v d minh ha 1.2 i tng Console b hn ch bi namespace bng vic s dng m


lnh:
System.Console.WriteLine();

Ton t .
Trong vd 2.2 trn du . c s dng truy cp n phng thc hay d liu trong
mt lp (trong trng hp ny phng thc l WriteLine()), v ngn cch gia tn lp n
mt namespace xc nhn (namspace System v lp l Console). Vic thc hin ny theo
hng t trn xung, trong mc u tin namespace l System, tip theo l lp Console,
v cui cng l truy cp n cc phng thc hay thuc tnh ca lp.
Trong nhiu trng hp namespace c th c chia thnh cc namespace con gi l
subnamespace. V d trong namespace System c cha mt s cc subnamesapce nh
Configuration, Collections, Data, v cn rt nhiu na, hn na trong namespace Collection
cn chia thnh nhiu namesapce con na.
Namespace gip chng ta t chc v ngn cch nhng kiu. Khi chng ta vit mt
chng trnh C# phc tp, chng ta c th phi to mt kin trc namespace ring cho mnh,
v khng gii hn chiu su ca cy phn cp namespace. Mc ch ca namespace l gip
chng ta chia qun l nhng kin trc i tng phc tp.

T kha using
lm cho chng trnh gn hn, v khng cn phi vit tng namespace cho tng i
tng, C# cung cp t kha l using, sau t kha ny l mt namespace hay subnamespace
vi m t y trong cu trc phn cp ca n.
Ta c th dng dng lnh :
using System;

u chng trnh v khi trong chng trnh nu chng ta c dng i tng Console th
khng cn phi vit y : System.Console. m ch cn vit Console. thi.

 V d 2.3: Dng kha using


----------------------------------------------------------------------------using System;
class ChaoMung
{
static void Main()
{
//Xuat ra man hinh chuoi thong bao
Console.WriteLine(Chao Mung);
}
}

----------------------------------------------------------------------------27
Ngn Ng C#

Ngn Ng Lp Trnh C#

Kt qu:
Chao Mung

----------------------------------------------------------------------------Lu rng phi t cu using System trc nh ngha lp ChaoMung.


Mc d chng ta ch nh rng chng ta s dng namespace System, v khng ging nh cc
ngn ng khc, khng th ch nh rng chng ta s dng i tng System.Console.

 V d 2.4: Khng hp l trong C#.


----------------------------------------------------------------------------using System.Console;
class ChaoMung
{
static void Main()
{
//Xuat ra man hinh chuoi thong bao
WriteLine(Chao Mung);
}
}

----------------------------------------------------------------------------on chng trnh trn khi bin dch s c thng bo mt li nh sau:


error CS0138: A using namespace directive can only be applied to namespace;
System.Console is a class not a namespace.

Cch biu din namespace c th lm gim nhiu thao tc g bn phm, nhng n c th s


khng em li li ch no bi v n c th lm xo trn nhng namespace c tn khng khc
nhau. Gii php chung l chng ta s dng t kha using vi cc namespace c xy
dng sn, cc namespace do chng ta to ra, nhng namespace ny chng ta nm chc su
liu v n. Cn i vi namespace do cc hng th ba cung cp th chng ta khng nn dng
t kha using.

Phn bit ch thng v ch hoa


Cng ging nh C/C++, C# l ngn ng phn bit ch thng vi ch hoa, iu ny c
ngha rng hai cu lnh writeLine th khc vi WriteLine v cng khc vi WRITELINE.
ng tic l C# khng ging nh VB, mi trng pht trin C# s khng t sa cc li ny,
nu chng ta vit hai ch vi cch khc nhau th chng ta c th a vo chng trnh g ri
tm ra cc li ny.
trch vic lnh ph thi gian v cng sc, ngi ta pht trin mt s qui c cho cch
t tn bin, hng, hm, v nhiu nh danh khc na. Qui c trong gio trnh ny dng c
php lc (camel notation) cho tn bin v c php Pascal cho hm, hng, v thuc tnh.
V d :
28
Ngn Ng C#

Ngn Ng Lp Trnh C#

Bin myDictionary theo cch t tn c php lc .


Hm DrawLine, thuc tnh ColorBackground theo cch t tn c php Pascal.

T kha static
Hm Main() trong v d minh ha trn c nhiu hn mt cch thit k. Trong minh ha ny
hm Main() c khai bo vi kiu tr v l void, tc l hm ny khng tr v bt c gi tr
no c. i khi cn kim tra chng trnh c thc hin ng hay khng, ngi lp trnh c th
khai bo hm Main() tr v mt gi tr no xc nh kt qu thc hin ca chng trnh.
Trong khai bo ca v d trn c dng t kha static:
static void Main()
{
.......
}

T kha ny ch ra rng hm Main() c th c gi m khng cn phi to i tng


ChaoMung. Nhng vn lin quan n khai bo lp, phng thc, hay thuc tnh s c
trnh by chi tit trong cc chng tip theo.

Pht trin chng trnh minh ha


C ti thiu l hai cch son tho, bin dch v thc thi chng trnh trong cun sch ny:
S dng mi trng pht trin tch hp (IDE) Visual Studio .NET
S dng chng trnh son tho vn bn bt k nh Notepad ri dng bin dch dng
lnh.
Mc d chng ta c th pht trin phn mm bn ngoi Visual Studio .NET, IDE cung cp
nhiu cc tin ch h tr cho ngi pht trin nh: h tr phn son tho m ngun nh canh
l, mu sc, tch hp cc tp tin tr gip, cc c tnh intellisense,...Nhng iu quan trng
nht l IDE phi c cng c debug mnh v mt s cng c tr gip pht trin ng dng
khc.
Trong cun sch ny gi s rng ngi c ang s dng Visual Studio .NET. Phn trnh
ny s tp trung vo ngn ng v platform hn l cng c pht trin. Chng ta c th sao chp
tt c nhng m ngun v d vo trong mt chng trnh son tho vn bn nh Notepad hay
Emacs, lu chng di dng tp tin vn bn, v bin dch chng bng trnh bin dch dng
lnh C#, chng trnh ny c phn phi cng .NET Framework SDK. Trong nhng chng
cui v xy dng cc ng dng trn Windows v Web, chng ta s s dng cng c Visual
Studio .NET to ra cc Windows Form v Web Form, tuy nhin chng ta cng c th vit
bng tay trong Notepad nu chng ta quyt nh s dng cch lm bng tay thay v dng cng
c thit k.

S dng Notepad son tho

29
Ngn Ng C#

Ngn Ng Lp Trnh C#

u tin chng ta s m chng trnh Notepad ri son tho chng trnh minh ha trn,
lu l ta c th s dng bt c trnh son tho vn bn no ch khng nht thit l Notepad.
Sau khi son tho xong th lu tp tin xung a v tp tin ny c phn m rng l *.cs, trong
v d ny l chaomung.cs. Bc tip theo l bin dch tp tin ngun va to ra. bin dch
ta dng trnh bin dch dng lnh C# (csc.exe) chng trnh ny c chp vo my trong qu
trnh ci .NET Framework. bit csc.exe nm chnh xc v tr no trong a ta c th dng
chc nng tm kim ca Windows.
thc hin bin dch chng ta m mt ca s dng lnh ri nh vo lnh theo mu sau:
csc.exe [/out: <file thc thi>] <file ngun>

V d: csc.exe /out:d:\chaomung.exe d:\chaomung.cs


Thng th khi bin dch ta ch cn hai phn l tn ca trnh bin dch v tn tp tin ngun m
thi. Trong mu trn c dng mt trong nhiu ty chn khi bin dch l /out, theo sau l tn
ca chng trnh thc thi hay chnh l kt qu bin dch tp tin ngun.
Cc tham s ty chn c rt nhiu nu mun tm hiu chng ta c th dng lnh:
csc.exe /?

Lnh ny xut ra mn hnh ton b cc ty chn bin dch v cc hng dn s dng.


Hai hnh sau minh ha qu trnh nhp m ngun chng trnh C# bng mt trnh son tho
vn bn n gin nh Notepad trong Windows. V sau bin dch tp tin m ngun va to
ra bng chng trnh csc.exe mt trnh bin dch dng lnh ca C#. Kt qu l mt tp tin
thc thi c to ra v ta s chy chng trnh ny.

Hnh 2.2: M ngun c son tho trong Notepad.

30
Ngn Ng C#

Ngn Ng Lp Trnh C#

Hnh 2.3: Bin dch v thc thi chng trnh.

S dng Visual Studio .NET to chng trnh


to chng trnh cho mng trong IDE, la chn mc Visual Studio .NET trong menu
Start hoc icon ca n trn desktop, sau khi khi ng xong chng trnh, chn tip chc

nng File New


Project trong menu. Chc nng ny s gi ca s New Project (hnh 2.4
bn di). Nu nh chng trnh Visual Studio .NET c chy ln u tin, khi ca s
New Project s xut hin t ng m khng cn phi kch hot.
to ng dng, ta la chn mc Visual C# Projects trong ca s Project Type bn tri. Lc
ny chng ta c th nhp tn cho ng dng v la chn th mc ni lu tr cc tp tin ny.
Cui cng, kch vo OK khi mi chuyn khi to chm dt v mt ca s mi s xut hin
(hnh 2.4 bn di), chng ta c th nhp m ngun vo y.
Lu rng Visual Studio .NET to ra mt namespace da trn tn ca project m ta va cung
cp (ChaoMung), v thm vo ch dn s dng namespace System bng lnh using, bi hu
nh mi chng trnh m chng ta vit u cn s dng cc kiu d liu cha trong
namespace System.

31
Ngn Ng C#

Ngn Ng Lp Trnh C#

Hnh 2.4: To ng dng C# console trong Visual Studio .NET.

Hnh 2.5: Phn son tho m ngun cho project.


Visual Studio .NET to mt lp tn l Class1, lp ny chng ta c th ty i tn ca
chng. Khi i tn ca lp, tt nht l i tn lun tp tin cha lp (Class1.cs). Gi s
32
Ngn Ng C#

Ngn Ng Lp Trnh C#

trong v d trn chng ta i tn ca lp thnh ChaoMung, v i tn tp tin Class1.cs (i


tn tp tin trong ca s Solution Explorer).
Cui cng, Visual Studio .NET to mt khung sn chng trnh, v kt thc vi ch thch
TODO l v tr bt u ca chng ta. to chng trnh cho mng trong minh ha trn, ta

b tham s string[] args ca hm Main() v xa tt c cc ch thch bn trong ca hm. Sau


nhp vo dng lnh sau bn trong thn ca hm Main()
// Xuat ra man hinh
System.Console.WriteLine(Chao Mung);

Sau tt c cng vic , tip theo l phn bin dch chng trnh t Visual Studio .NET.
Thng thng thc hin mt cng vic no ta c th chn kch hot chc nng trong
menu, hay cc button trn thanh toolbar, v cch nhanh nht l s dng cc phm nng hay
cc phm kt hp gi nhanh mt chc nng.
Trong v d, bin dch chng trnh nhn Ctrl-Shift-B hoc chn chc nng:
Build
Build Solution. Mt cch khc na l dng nt lnh trn thanh toolbar:
chy chng trnh va c to ra m khng s dng ch debug chng ta c th nhn
Ctrl-F5 hay chn Debug
ca Visual Studio . NET

Start Without Debugging hoc nt lnh

trn thanh toolbar

Ghi ch: Tt hn ht l chng ta nn b ra nhiu thi gian tm hiu hay khm ph mi


trng pht trin Visual Studio .NET. y cng l cch thc tt m nhng ngi pht trin
ng dng v chng ta nn thc hin. Vic tm hiu Visual Studio .NET v thng tho n s
gip cho chng ta rt nhiu trong qu trnh xy dng v pht trin ng dng sau ny. Cu

hi v tr li
Cu hi 1: Mt chng trnh C# c th chy trn bt c my no?
Tr li 1: Khng phi tt c. Mt chng trnh C# ch chy trn my c Common Language
Runtime (CLR) c ci t. Nu chng ta copy mt chng trnh exe ca C# qua mt my
khng c CLR th chng ta s nhn c mt li. Trong nhng phin bn ca Windows
khng c CLR chng ta s c bo rng thiu tp tin DLL.
Cu hi 2: Nu mun a chng trnh m ta vit cho mt ngi bn th tp tin no m
chng ta cn a?
Tr li 2: Thng thng cch tt nht l a chng trnh bin dch. iu ny c ngha
rng sau khi m ngun c bin dch, chng ta s c mt chng trnh thc thi (tp tin c
phn m rng *.exe ). Nh vy, nu chng ta mun a chng trnh Chaomung cho tt c
nhng ngi bn ca chng ta th ch cn a tp tin Chaomung.exe. Khng cn thit phi
a tp tin ngun Chaomung.cs. V nhng ngi bn ca chng ta khng cn thit phi c
trnh bin dch C#. H ch cn c C# runtime trn my tnh (nh CLR ca Microsoft) l c
th chy c chng trnh ca chng ta.
Cu hi 3: Sau khi to ra c tp tin thc thi .exe. C cn thit gi li tp tin ngun khng?
33
Ngn Ng C#

Ngn Ng Lp Trnh C#

Tr li 3: Nu chng ta t b tp tin m ngun th sau ny s rt kh khn cho vic m rng


hay thay i chng trnh, do cn thit phi gi li cc tp tin ngun. Hu ht cc IDE
to ra cc cc tp tin ngun (.cs) v cc tp tin thc thi. Cng nh gi cc tp tin ngun
chng ta cng cn thit phi gi cc tp tin khc nh l cc ti nguyn bn ngoi cc icon,
image, form.. Chng ta s lu gi nhng tp tin ny trong trng hp chng ta cn thay i
hay to li tp tin thc thi.
Cu hi 4: Nu trnh bin dch C# a ra mt trnh son tho, c phi nht thit phi s dng
n?
Tr li 4: Khng hon ton nh vy. Chng ta c th s dng bt c trnh son tho vn bn
no v lu m ngun di dng tp tin vn bn. Nu trnh bin dch a ra mt trnh son
tho th chng ta nn s dng n. Nu chng ta c mt trnh son tho khc tt hn chng ta
c th s dng n. Mt s cc tin ch son tho m ngun c th gip cho ta d dng tm
cc li c php, gip to mt s m ngun t ng n gin...Ni chung l ty theo chng ta
nhng theo ti th Visual Studio .NET cng kh tt s dng
Cu hi 5: C th khng quan tm n nhng cnh bo khi bin dch m ngun
Tr li 5: Mt vi cnh bo khng nh hng n chng trnh khi chy, nhng mt s khc
c th nh hng n chng trnh chy. Nu trnh bin dch a ra cnh bo, tc l tn hiu
cho mt th g khng ng. Hu ht cc trnh bin dch cho php chng ta thit lp mc
cnh bo. Bng cch thit lp mc cnh bo chng ta c th ch quan tm n nhng
cnh bo nguy him, hay nhn ht tt c nhng cnh bo. Ni chung cch tt nht l chng
ta nn xem tt c nhng cnh bo sa cha chng, mt chng trnh tm gi l t yu
cu khi khng c li bin dch v cng khng c cnh bo (nhng cha chc chy ng
kt qu!).

Cu hi thm
Cu hi 1: Hy a ra 3 l do ti sao ngn ng C# l mt ngn ng lp trnh tt?
Cu hi 2: IL v CLR vit tt cho t no v ngha ca n?
Cu hi 3: a ra cc bc c bn trong chu trnh xy dng chng trnh?
Cu hi 4: Trong bin dch dng lnh th lnh no c s dng bin dch m ngun .cs
v lnh ny gi chng trnh no?
Cu hi 5: Phn m rng no m chng ta nn s dng cho tp tin m ngun C#?
Cu hi 6: Mt tp tin .txt cha m ngun C# c phi l mt tp tin m ngun C# hp l
hay khng? C th bin dch c hay khng?
Cu hi 7: Ngn ng my l g? Khi bin dch m ngun C# ra tp tin .exe th tp tin ny l
ngn ng g?
Cu hi 8: Nu thc thi mt chng trnh bin dch v n khng thc hin ng nh
mong i ca chng ta, th iu g chng ta cn phi lm?
Cu hi 9: Mt li tng t nh bn di thng xut hin khi no?

34
Ngn Ng C#

Ngn Ng Lp Trnh C#

mycode.cs(15,5): error CS1010: NewLine in constan


Cu hi 10: Ti sao phi khai bo static cho hm Main ca lp?
Cu hi 11: Mt m ngun C# c phi cha trong cc lp hay l c th tn ti bn ngoi lp
nh C/C++?
Cu hi 12: So snh s khc nhau c bn gia C# v C/C++, C# vi Java, hay bt c ngn
ng cp cao no m bn bit?
Cu hi 13: Con tr c cn c s dng trong C# hay khng? Nu c th n c qun l
nh th no?
Cu hi 14: Khi nim v ngha ca namespace trong C#? iu g xy ra nu nh ngn
ng lp trnh khng h tr namespace?

Bi tp
Bi tp 1: Dng trnh son tho vn bn m chng trnh exe m ta bin dch t cc
chng trnh ngun trc v xem s khc nhau gia hai tp tin ny, lu sao khi ng tp
tin ny ta khng chn lu tp tin.
Bi tp 2: Nhp vo chng trnh sau v bin dch n. Cho bit chng trnh thc hin iu
g?
----------------------------------------------------------------------------using System;
class variables
{
public static void Main()
{
int radius = 4;
const double PI = 3.14159;
double circum, area;
area = PI * radius* radius;
circum = 2 * PI * radius;
// in kt qu
Console.WriteLine(Ban kinh = {0}, PI = {1}, radius, PI);
Console.WriteLine(Dien tich {0}, area);
Console.WriteLine(Chu vi {0}, circum);
}
}

----------------------------------------------------------------------------Bi tp 3: Nhp vo chng trnh sau v bin dch. Cho bit chng trnh thc hin iu g?
----------------------------------------------------------------------------class AClass

35
Ngn Ng C#

Ngn Ng Lp Trnh C#

{
static void Main()
{
int x, y;
for( x = 0; x < 10; x++, System.Console.Write(\n));
for( y = 0 ; y < 10; y++, System.Console.WriteLine({0},y));
}
}

----------------------------------------------------------------------------Bi tp 4: Chng trnh sau c cha li. Nhp vo v sa nhng li


--------------------------------------------------------------------------------------------------------------------------------------------------------Bi tp 5: Sa li v bin dch chng trnh sau
----------------------------------------------------------------------------class Test
{
pubic static void Main()
{

Console.WriteLine(Xin chao);
Consoile.WriteLine(Tam biet);
}
}

----------------------------------------------------------------------------Bi tp 6: Sa li v bin dch chng trnh sau


----------------------------------------------------------------------------class Test
{
pubic void Main()
{
Console.WriteLine(Xin chao);
Consoile.WriteLine(Tam biet);
}
}

----------------------------------------------------------------------------Bi tp 7: Vit chng trnh xut ra bi th:


36
Ngn Ng C#

Ngn Ng Lp Trnh C#

Rm Thng Ging
Rm xun lng lng trng soi,
Sng xun nc ln mu tri thm xun.
Gia dng bn bc vic qun
Khuya v bt ngt trng ngn y thuyn.
H Ch Minh.

37
Ngn Ng C#

Ngn Ng Lp Trnh C#

Chng 3

NN TNG NGN NG C#
Kiu d liu

Kiu d liu xy dng sn

Chn kiu d liu

Chuyn i cc kiu d liu

Bin v hng
Gn gi tr xc nh cho bin
Hng
Kiu lit k
Kiu chui k t
nh danh

Biu thc
Khong trng
Cu lnh
Phn nhnh khng c iu kin
Phn nhnh c iu kin
Cu lnh lp

Ton t
Namespace
Cc ch dn bin dch
Cu hi & bi tp

38
Nn Tng Ngn Ng C#

Ngn Ng Lp Trnh C#

Trong chng trc chng ta tm hiu mt chng trnh C# n gin nht. Chng
trnh cha din t mt chng trnh vit bng ngn ng C#, c qu nhiu phn v
chi tit b qua. Do vy trong chng ny chng ta s i su vo tm hiu cu trc v c
php ca ngn ng C#.
Chng ny s tho lun v h thng kiu d liu, phn bit gia kiu d liu xy dng
sn (nh int, bool, string) vi kiu d liu do ngi dng nh ngha (lp hay cu trc do
ngi lp trnh to ra...). Mt s c bn khc v lp trnh nh to v s dng bin d liu hay
hng cng c cp cng vi cu trc lit k, chui, nh danh, biu thc v cu lnh.
Trong phn hai ca chng hng dn v minh ha vic s dng lnh phn nhnh if,
switch, while, do...while, for, v foreach. V cc ton t nh php gn, php ton logic,
php ton quan h, v ton hc...
Nh chng ta bit C# l mt ngn ng hng i tng rt mnh, v cng vic ca
ngi lp trnh l k tha to v khai thc cc i tng. Do vy nm vng v pht trin
tt ngi lp trnh cn phi i t nhng bc i du tin tc l i vo tm hiu nhng phn c
bn v ct li nht ca ngn ng.

Kiu d liu
C# l ngn ng lp trnh mnh v kiu d liu, mt ngn ng mnh v kiu d liu l phi
khai bo kiu ca mi i tng khi to (kiu s nguyn, s thc, kiu chui, kiu iu
khin...) v trnh bin dch s gip cho ngi lp trnh khng b li khi ch cho php mt loi
kiu d liu c th c gn cho cc kiu d liu khc. Kiu d liu ca mt i tng l mt
tn hiu trnh bin dch nhn bit kch thc ca mt i tng (kiu int c kch thc l 4
byte) v kh nng ca n (nh mt i tng button c th v, phn ng khi nhn,...).
Tng t nh C++ hay Java, C# chia thnh hai tp hp kiu d liu chnh: Kiu xy dng
sn (built- in) m ngn ng cung cp cho ngi lp trnh v kiu c ngi dng nh ngha
(user-defined) do ngi lp trnh to ra.
C# phn tp hp kiu d liu ny thnh hai loi: Kiu d liu gi tr (value) v kiu d
liu tham chiu (reference). Vic phn chi ny do s khc nhau khi lu kiu d liu gi tr v
kiu d liu tham chiu trong b nh. i vi mt kiu d liu gi tr th s c lu gi kch
thc tht trong b nh cp pht l stack. Trong khi th a ch ca kiu d liu tham
chiu th c lu trong stack nhng i tng tht s th lu trong b nh heap.
Nu chng ta c mt i tng c kch thc rt ln th vic lu gi chng trn b nh
heap rt c ch, trong chng 4 s trnh by nhng li ch v bt li khi lm vic vi kiu d
liu tham chiu, cn trong chng ny ch tp trung kiu d kiu c bn hay kiu xy dng
sn.
Ghi ch: Tt c cc kiu d liu xy dng sn l kiu d liu gi tr ngoi tr cc i
tng v chui. V tt c cc kiu do ngi dng nh ngha ngoi tr kiu cu trc u l
kiu d liu tham chiu.
39
Nn Tng Ngn Ng C#

Ngn Ng Lp Trnh C#

Ngoi ra C# cng h tr mt kiu con tr C++, nhng him khi c s dng, v ch khi no
lm vic vi nhng on m lnh khng c qun l (unmanaged code). M lnh khng
c qun l l cc lnh c vit bn ngoi nn .MS.NET, nh l cc i tng COM.

Kiu d liu xy dng sn


Ngn ng C# a ra cc kiu d liu xy dng sn rt hu dng, ph hp vi mt ngn
ng lp trnh hin i, mi kiu d liu c nh x n mt kiu d liu c h tr bi h
thng xc nhn ngn ng chung (Common Language Specification: CLS) trong MS.NET.
Vic nh x cc kiu d liu nguyn thu ca C# n cc kiu d liu ca .NET s m bo
cc i tng c to ra trong C# c th c s dng ng thi vi cc i tng c to
bi bt c ngn ng khc c bin dch bi .NET, nh VB.NET.
Mi kiu d liu c mt s xc nhn v kch thc khng thay i, khng ging nh
C++, int trong C# lun c kch thc l 4 byte bi v n c nh x t kiu Int32 trong .
NET.
Bng 3.1 sau s m t mt s cc kiu d liu c xy dng sn
Kiu C#
byte

S byte
1

Kiu .NET
Byte

2
1

Char

1
2

Sbyte

2
4

Unt16

Uint32

float

4
4

double

Double

char
bool
sbyte
short
ushort
int
uint

decimal

Boolean
Int16

Int32

Single

Decimal

M t
S nguyn dng khng du t 0-255
K t Unicode
Gi tr logic true/ false
S nguyn c du ( t -128 n 127)
S nguyn c du gi tr t -32768 n
32767.
S nguyn khng du 0 65.535
S nguyn c du 2.147.483.647 v
2.147.483.647
S nguyn khng du 0 4.294.967.295
Kiu du chm ng, gi tr xp x t 3,4E38 n 3,4E+38, vi 7 ch s c ngha..
Kiu du chm ng c chnh xc gp
i, gi tr xp x t 1,7E-308 n 1,7E+308,
vi 15,16 ch s c ngha.
C chnh xc n 28 con s v gi tr thp
phn, c dng trong tnh ton ti chnh,
kiu ny i hi phi c hu t m hay M
theo sau gi tr.

40
Nn Tng Ngn Ng C#

Ngn Ng Lp Trnh C#

long

Int64

Kiu s nguyn c du c gi tr trong


khong :
-9.223.370.036.854.775.808 n
9.223.372.036.854.775.807

ulong

S nguyn khng du t 0 n
0xffffffffffffffff
Bng 3.1 : M t cc kiu d liu xy dng sn.
Uint64

Ghi ch: Kiu gi tr logic ch c th nhn c gi tr l true hay false m thi. Mt gi


tr nguyn khng th gn vo mt bin kiu logic trong C# v khng c bt c chuyn i
ngm nh no. iu ny khc vi C/C++, cho php bin logic c gn gi tr nguyn, khi
gi tr nguyn 0 l false v cc gi tr cn li l true.

Chn kiu d liu


Thng thng chn mt kiu d liu nguyn s dng nh short, int hay long
thng da vo ln ca gi tr mun s dng. V d, mt bin ushort c th lu gi gi tr
t 0 n 65.535, trong khi bin ulong c th lu gi gi tr t 0 n 4.294.967.295, do ty
vo min gi tr ca phm vi s dng bin m chn cc kiu d liu thch hp nht. Kiu d
liu int thng c s dng nhiu nht trong lp trnh v vi kch thc 4 byte ca n cng
lu cc gi tr nguyn cn thit.
Kiu s nguyn c du thng c la chn s dng nhiu nht trong kiu s tr khi c l
do chnh ng s dng kiu d liu khng du.
Stack v Heap

41
Nn Tng Ngn Ng C#

Ngn Ng Lp Trnh C#

Stack l mt cu trc d liu lu tr thng tin dng xp chng tc l vo

sau ra trc (Last In First Out : LIFO), iu ny ging nh chng ta c mt


chng cc a, ta c xp cc a vo chng v khi ly ra th a no nm
trn cng s c lp ra trc, tc l a vo sau s c ly ra trc.
Trong C#, kiu gi tr nh kiu s nguyn c cp pht trn stack, y l
vng nh c thit lp lu cc gi tr, v vng nh ny c tham
chiu bi tn ca bin.
Kiu tham chiu nh cc i tng th c cp pht trn heap. Khi mt
i tng c cp pht trn heap th a ch ca n c tr v, v a ch
ny c gn n mt tham chiu.
Thnh thong c ch thu gom s hy i tng trong stack sau khi mt
vng trong stack c nh du l kt thc. Thng thng mt vng trong
stack c nh ngha bi mt hm. Do , nu chng ta khai bo mt
bin cc b trong mt hm l mt i tng th i tng ny s nh du
hy khi kt thc hm.
Nhng i tng trn heap s c thu gom sau khi mt tham chiu cui
cng n i tng c gi.
Cch tt nht khi s dng bin khng du l gi tr ca bin lun lun dng, bin ny
thng th hin mt thuc tnh no c min gi tr dng. V d khi cn khai bo mt bin
lu gi tui ca mt ngi th ta dng kiu byte (s nguyn t 0-255) v tui ca ngi
khng th no m c.
Kiu float, double, v decimal a ra nhiu mc khc nhau v kch thc cng nh
chnh xc.Vi thao tc trn cc phn s nh th kiu float l thch hp nht. Tuy nhin lu
rng trnh bin dch lun lun hiu bt c mt s thc no cng l mt s kiu double tr khi
chng ta khai bo r rng. gn mt s kiu float th s phi c k t f theo sau.
float soFloat = 24f;

Kiu d liu k t th hin cc k t Unicode, bao gm cc k t n gin, k t theo m


Unicode v cc k t thot khc c bao trong nhng du nhy n. V d, A l mt k t
n gin trong khi \u0041 l mt k t Unicode. K t thot l nhng k t c bit bao gm
hai k t lin tip trong k t du tin l du cho \. V d, \t l du tab. Bng 3.2 trnh
by cc k t c bit.

K t

ngha

Du nhy n

Du nhy kp

\\
\0

Du cho
K t null

\a

Alert
42

Nn Tng Ngn Ng C#

Ngn Ng Lp Trnh C#

\b

Backspace

\f

Sang trang form feed


Dng mi

\n

u dng
Tab ngang

\r
\t
\v

Tab dc
Bng 3.2 : Cc kiu k t c bit.

Chuyn i cc kiu d liu


Nhng i tng ca mt kiu d liu ny c th c chuyn sang nhng i tng ca
mt kiu d liu khc thng qua c ch chuyn i tng minh hay ngm nh. Chuyn i
nhm nh c thc hin mt cch t ng, trnh bin dch s thc hin cng vic ny. Cn
chuyn i tng minh din ra khi chng ta gn p mt gi tr cho kiu d liu khc.
Vic chuyn i gi tr ngm nh c thc hin mt cch t ng v m bo l khng
mt thng tin. V d, chng ta c th gn ngm nh mt s kiu short (2 byte) vo mt s
kiu int (4 byte) mt cch ngm nh. Sau khi gn hon ton khng mt d liu v bt c gi
tr no ca short cng thuc v int:
short x = 10;
int y = x; // chuyn i ngm nh

Tuy nhin, nu chng ta thc hin chuyn i ngc li, chc chn chng ta s b mt thng
tin. Nu gi tr ca s nguyn ln hn 32.767 th n s b ct khi chuyn i. Trnh bin
dch s khng thc hin vic chuyn i ngm nh t s kiu int sang s kiu short:
short x;
int y = 100;
x = y;

// Khng bin dch, li !!!

khng b li chng ta phi dng lnh gn tng minh, on m trn c vit li nh sau:
short x;
int y = 500;
x = (short) y;

// p kiu tng minh, trnh bin dch khng bo li

Bin v hng
Mt bin l mt vng lu tr vi mt kiu d liu. Trong v d trc c x, v y iu l
bin. Bin c th c gn gi tr v cng c th thay i gi tr khi thc hin cc lnh trong
chng trnh.
to mt bin chng ta phi khai bo kiu ca bin v gn cho bin mt tn duy nht. Bin
c th c khi to gi tr ngay khi c khai bo, hay n cng c th c gn mt gi tr
mi vo bt c lc no trong chng trnh. V d 3.1 sau minh ha s dng bin.

 V d 3.1: Khi to v gn gi tr n mt bin.


----------------------------------------------------------------------------43
Nn Tng Ngn Ng C#

Ngn Ng Lp Trnh C#

class MinhHoaC3
{
static void Main()
{
int bien1 = 9;
System.Console.WriteLine(Sau khi khoi tao: bien1 ={0}, bien1);
bien1 = 15;
System.Console.WriteLine(Sau khi gan: bien1 ={0}, bien1);
}
}

----------------------------------------------------------------------------Kt qu:
Sau khi khoi tao: bien1 = 9
Sau khi gan: bien1 = 15

----------------------------------------------------------------------------Ngay khi khai bo bin ta gn gi tr l 9 cho bin, khi xut bin ny th bin c gi tr l 9.
Thc hin php gn bin cho gi tr mi l 15 th bin s c gi tr l 15 v xut kt qu l 15.

Gn gi tr xc nh cho bin
C# i hi cc bin phi c khi to trc khi c s dng. kim tra lut ny
chng ta thay i dng lnh khi to bin bien1 trong v d 3.1 nh sau:
int bien1;

v gi nguyn phn cn li ta c v d 3.2:


 V d 3.2: S dng mt bin khng khi to.
----------------------------------------------------------------------------class MinhHoaC3
{
static void Main()
{
int bien1;
System.Console.WriteLine(Sau khi khoi tao: bien1 ={0}, bien1);
bien1 = 15;
System.Console.WriteLine(Sau khi gan: bien1 ={0}, bien1);
}
}

----------------------------------------------------------------------------Khi bin dch on chng trnh trn th trnh bin dch C# s thng bo mt li sau:
...error CS0165: Use of unassigned local variable bien1

44
Nn Tng Ngn Ng C#

Ngn Ng Lp Trnh C#

Vic s dng bin khi cha c khi to l khng hp l trong C#. V d 3.2 trn khng hp
l.
Tuy nhin khng nht thit lc no chng ta cng phi khi to bin. Nhng dng c th
bt buc phi gn cho chng mt gi tr trc khi c mt lnh no tham chiu n bin .
iu ny c gi l gn gi tr xc nh cho bin v C# bt buc phi thc hin iu ny.
V d 3.3 minh ha mt chng trnh ng.
 V d 3.3: Bin khng c khi to nhng sau c gn gi tr.
----------------------------------------------------------------------------class MinhHoaC3
{
static void Main()
{
int bien1;
bien1 = 9;
System.Console.WriteLine(Sau khi khoi tao: bien1 ={0}, bien1);
bien1 = 15;
System.Console.WriteLine(Sau khi gan: bien1 ={0}, bien1);
}
}

-----------------------------------------------------------------------------

Hng
Hng cng l mt bin nhng gi tr ca hng khng thay i. Bin l cng c rt mnh,
tuy nhin khi lm vic vi mt gi tr c nh ngha l khng thay i, ta phi m bo gi
tr ca n khng c thay i trong sut chng trnh. V d, khi lp mt chng trnh th
nghim ha hc lin quan n nhit si, hay nhit ng ca nc, chng trnh cn
khai bo hai bin l DoSoi v DoDong, nhng khng cho php gi tr ca hai bin ny b thay
i hay b gn. ngn nga vic gn gi tr khc, ta phi s dng bin kiu hng.
Hng c phn thnh ba loi: gi tr hng (literal), biu tng hng (symbolic constants),
kiu liu k (enumerations).
Gi tr hng: ta c mt cu lnh gn nh sau:
x = 100;

Gi tr 100 l gi tr hng. Gi tr ca 100 lun l 100. Ta khng th gn gi tr khc cho 100


c.
Biu tng hng: gn mt tn cho mt gi tr hng, to mt biu tng hng dng t kha
const v c php sau:
<const> <type> <tn hng> = <gi tr>;

45
Nn Tng Ngn Ng C#

Ngn Ng Lp Trnh C#

Mt biu tng hng phi c khi to khi khai bo, v ch khi to duy nht mt ln trong
sut chng trnh v khng c thay i. V d:
const int DoSoi = 100;

Trong khai bo trn, 32 l mt hng s v DoSoi l mt biu tng hng c kiu nguyn. V
d 3.4 minh ha vic s dng nhng biu tng hng.

 Vi d 3.4: S dng biu tng hng.


----------------------------------------------------------------------------class MinhHoaC3
{
static void Main()
{
const int DoSoi = 100;

// C

const int DoDong = 0;

// C

System.Console.WriteLine( Do dong cua nuoc {0}, DoDong );


System.Console.WriteLine( Do soi cua nuoc {0}, DoSoi );
}
}

----------------------------------------------------------------------------Kt qu:
Do dong cua nuoc 0
Do soi cua nuoc 100

----------------------------------------------------------------------------V d 3.4 to ra hai biu tng hng cha gi tr nguyn: DoSoi v DoDong, theo qui tc t
tn hng th tn hng thng c t theo c php Pascal, nhng iu ny khng i hi bi
ngn ng nn ta c th t ty .
Vic dng biu thc hng ny s lm cho chng trnh c vit tng thm phn ngha
cng vi s d hiu. Tht s chng ta c th dng hng s l 0 v 100 thay th cho hai biu
tng hng trn, nhng khi chng trnh khng c d hiu v khng c t nhin lm.
Trnh bin dch khng bao gi chp nhn mt lnh gn gi tr mi cho mt biu tng hng.
V d 3.4 trn c th c vit li nh sau
...
class MinhHoaC3
{
static void Main()
{
const int DoSoi = 100;

// C

const int DoDong = 0;

// C

System.Console.WriteLine( Do dong cua nuoc {0}, DoDong );

46
Nn Tng Ngn Ng C#

Ngn Ng Lp Trnh C#

System.Console.WriteLine( Do soi cua nuoc {0}, DoSoi );


DoSoi = 200;
}
}

Khi trnh bin dch s pht sinh mt li sau:


error CS0131: The left-hand side of an assignment must be a variable,
property or indexer.

Kiu lit k
Kiu lit k n gin l tp hp cc tn hng c gi tr khng thay i (thng c gi l
danh sch lit k).
Trong v d 3.4, c hai biu tng hng c quan h vi nhau:
const int DoDong = 0;
const int DoSoi = 100;

Do mc ch m rng ta mong mun thm mt s hng s khc vo danh sch trn, nh cc


hng sau:
const int DoNong = 60;
const int DoAm = 40;
const int DoNguoi = 20;

Cc biu tng hng trn iu c ngha quan h vi nhau, cng ni v nhit ca nc,
khi khai bo tng hng trn c v cng knh v khng c lin kt cht ch cho lm. Thay
vo C# cung cp kiu lit k gii quyt vn trn:
enum NhietDoNuoc
{
DoDong = 0,
DoNguoi = 20,
DoAm = 40,
DoNong = 60,
DoSoi = 100,

Mi kiu lit k c mt kiu d liu c s, kiu d liu c th l bt c kiu d liu nguyn


no nh int, short, long... tuy nhin kiu d lu ca lit k khng chp nhn kiu k t.
khai bo mt kiu lit k ta thc hin theo c php sau:
[thuc tnh] [b sung] enum <tn lit k> [:kiu c s] {danh sch cc thnh phn
lit k};

Thnh phn thuc tnh v b sung l t chn s c trnh by trong phn sau ca sch.
Trong phn ny chng ta s tp trung vo phn cn li ca khai bo. Mt kiu lit k bt u
vi t kha enum, tip sau l mt nh danh cho kiu lit k:
47
Nn Tng Ngn Ng C#

Ngn Ng Lp Trnh C#

enum NhietDoNuoc

Thnh phn kiu c s chnh l kiu khai bo cho cc mc trong kiu lit k. Nu b qua
thnh phn ny th trnh bin dch s gn gi tr mc nh l kiu nguyn int, tuy nhin chng
ta c th s dng bt c kiu nguyn no nh ushort hay long,..ngoi tr kiu k t. on v
d sau khai bo mt kiu lit k s dng kiu c s l s nguyn khng du uint:
enum KichThuoc :uint
{
Nho = 1,
Vua = 2,
Lon = 3,
}

Lu l khai bo mt kiu lit k phi kt thc bng mt danh sch lit k, danh sch lit k
ny phi c cc hng c gn, v mi thnh phn phi phn cch nhau du phy.
Ta vit li v d minh ha 3-4 nh sau.
 V d 3.5: S dng kiu lit k n gin chng trnh.
----------------------------------------------------------------------------class MinhHoaC3
{
// Khai bo kiu lit k
enum NhietDoNuoc
{
DoDong = 0,
DoNguoi = 20,
DoAm = 40,
DoNong = 60,
DoSoi = 100,

}
static void Main()
{
System.Console.WriteLine(
System.Console.WriteLine(
System.Console.WriteLine(
System.Console.WriteLine(
System.Console.WriteLine(

Nhiet
Nhiet
Nhiet
Nhiet
Nhiet

do
do
do
do
do

dong: {0}, NhietDoNuoc.DoDong);


nguoi: {0}, NhietDoNuoc.DoNguoi);
am: {0}, NhietDoNuoc.DoAm);
nong: {0}, NhietDoNuoc.DoNong);
soi: {0}, NhietDoNuoc.DoSoi);

}
}

----------------------------------------------------------------------------Kt qu:
48
Nn Tng Ngn Ng C#

Ngn Ng Lp Trnh C#

Nhiet do dong: 0
Nhiet do nguoi: 20
Nhiet do am: 40
Nhiet do nong: 60
Nhiet do soi: 100

----------------------------------------------------------------------------Mi thnh phn trong kiu lit k tng ng vi mt gi tr s, trong trng hp ny l mt


s nguyn. Nu chng ta khng khi to cho cc thnh phn ny th chng s nhn cc gi tr
tip theo vi thnh phn u tin l 0.
Ta xem th khai bo sau:
enum Thutu
{
ThuNhat,
ThuHai,
ThuBa = 10,
ThuTu
}

Khi gi tr ca ThuNhat l 0, gi tr ca ThuHai l 1, gi tr ca ThuBa l 10 v gi tr ca


ThuTu l 11.
Kiu lit k l mt kiu hnh thc do bt buc phi thc hin php chuyn i tng minh
vi cc kiu gi tr nguyn:
int x = (int) ThuTu.ThuNhat;

Kiu chui k t
Kiu d liu chui kh thn thin vi ngi lp trnh trong bt c ngn ng lp trnh no,
kiu d liu chui lu gi mt mng nhng k t.
khai bo mt chui chng ta s dng t kho string tng t nh cch to mt th hin
ca bt c i tng no:
string chuoi;

Mt hng chui c to bng cch t cc chui trong du nhy i:


Xin chao

y l cch chung khi to mt chui k t vi gi tr hng:


string chuoi = Xin chao

Kiu chui s c cp su trong chng 10.

nh danh
nh danh l tn m ngi lp trnh ch nh cho cc kiu d liu, cc phng thc, bin,
hng, hay i tng.... Mt nh danh phi bt u vi mt k t ch ci hay du gch di,
cc k t cn li phi l k t ch ci, ch s, du gch di.
49
Nn Tng Ngn Ng C#

Ngn Ng Lp Trnh C#

Theo qui c t tn ca Microsoft th ngh s dng c php lc (camel notation) bt


u bng k t thng t tn cho cc bin l c php Pascal (Pascal notation) vi k t
u tin hoa cho cch t tn hm v hu ht cc nh danh cn li. Hu nh Microsoft khng
cn dng c php Hungary nh iSoNguyen hay du gch di Bien_Nguyen t cc nh
danh.
Cc nh danh khng c trng vi cc t kho m C# a ra, do chng ta khng th to
cc bin c tn nh class hay int c. Ngoi ra, C# cng phn bit cc k t thng v k t
hoa v vy C# xem hai bin bienNguyen v bienguyen l hon ton khc nhau.

Biu thc
Nhng cu lnh m thc hin vic nh gi mt gi tr gi l biu thc. Mt php gn mt
gi tr cho mt bin cng l mt biu thc:
var1 = 24;

Trong cu lnh trn php nh gi hay nh lng chnh l php gn c gi tr l 24 cho bin
var1. Lu l ton t gn (=) khng phi l ton t so snh. Do vy khi s dng ton t ny

th bin bn tri s nhn gi tr ca phn bn phi. Cc ton t ca ngn ng C# nh php so


snh hay php gn s c trnh by chi tit trong mc ton t ca chng ny.
Do var1 = 24 l mt biu thc c nh gi tr l 24 nn biu thc ny c th c xem nh
phn bn phi ca mt biu thc gn khc:
var2 = var1 = 24;

Lnh ny s c thc hin t bn phi sang khi bin var1 s nhn c gi tr l 24 v


tip sau th var2 cng c nhn gi tr l 24. Do vy c hai bin u cng nhn mt gi
tr l 24. C th dng lnh trn khi to nhiu bin c cng mt gi tr nh:
a = b = c = d = 24;

Khong trng (whitespace)


Trong ngn ng C#, nhng khong trng, khong tab v cc dng c xem nh l
khong trng (whitespace), ging nh tn gi v ch xut hin nhng khong trng i din
cho cc k t . C# s b qua tt c cc khong trng , do vy chng ta c th vit nh
sau:
var1 = 24;

hay
var1

= 24 ;

v trnh bin dch C# s xem hai cu lnh trn l hon ton ging nhau.
Tuy nhin lu l khong trng trong mt chui s khng c b qua. Nu chng ta vit:
System.WriteLine(Xin chao!);

mi khong trng gia hai ch Xin v chao u c i x bnh thng nh cc k t


khc trong chui.
50
Nn Tng Ngn Ng C#

Ngn Ng Lp Trnh C#

Hu ht vic s dng khong trng nh mt s ty ca ngi lp trnh. iu ct yu l vic


s dng khong trng s lm cho chng trnh d nhn d c hn Cng nh khi ta vit mt
vn bn trong MS Word nu khng trnh by tt th s kh c v gy mt cm tnh cho
ngi xem. Cn i vi trnh bin dch th vic dng hay khng dng khong trng l khng
khc nhau.
Tuy nhin, cng cn lu khi s dng khong trng nh sau:
int x = 24;

tng t nh:
int x=24;

nhng khng ging nh:


intx=24;

Trnh bin dch nhn bit c cc khong trng hai bn ca php gn l ph v c th b


qua, nhng khong trng gia khai bo kiu v tn bin th khng phi ph hay thm m bt
buc phi c ti thiu mt khong trng. iu ny khng c g bt hp l, v khong trng
cho php trnh bin dch nhn bit c t kho int v khng th no nhn c intx.
Tng t nh C/C++, trong C# cu lnh c kt thc vi du chm phy ;. Do vy c th
mt cu lnh trn nhiu dng, v mt dng c th nhiu cu lnh nhng nht thit l hai cu
lnh phi cch nhau mt du chm phy.

Cu lnh (statement)
Trong C# mt ch dn lp trnh y c gi l cu lnh. Chng trnh bao gm nhiu
cu lnh tun t vi nhau. Mi cu lnh phi kt thc vi mt du chm phy, v d nh:
int x; // mt cu lnh
x = 32; // cu lnh khc
int y =x; // y cng l mt cu lnh

Nhng cu lnh ny s c x l theo th t. u tin trnh bin dch bt u v tr u


ca danh sch cc cu lnh v ln lt i tng cu lnh cho n lnh cui cng, tuy nhin ch
ng cho trng hp cc cu lnh tun t khng phn nhnh.
C hai loi cu lnh phn nhnh trong C# l : phn nhnh khng c iu kin (unconditional
branching statement) v phn nhnh c iu kin (conditional branching statement).
Ngoi ra cn c cc cu lnh lm cho mt s on chng trnh c thc hin nhiu ln, cc
cu lnh ny c gi l cu lnh lp hay vng lp. Bao gm cc lnh lp for, while, do, in,
v each s c cp ti trong mc tip theo.
Sau y chng ta s xem xt hai loi lnh phn nhnh ph bin nht trong lp trnh C#.

Phn nhnh khng c iu kin


Phn nhnh khng c iu kin c th to ra bng hai cch: gi mt hm v dng t kho
phn nhnh khng iu kin.
Gi hm
51
Nn Tng Ngn Ng C#

Ngn Ng Lp Trnh C#

Khi trnh bin dch x l n tn ca mt hm, th s ngng thc hin hm hin thi m bt
u phn nhnh d to mt gi hm mi. Sau khi hm va to thc hin xong v tr v mt
gi tr th trnh bin dch s tip tc thc hin dng lnh tip sau ca hm ban u. v d 3.6
minh ha cho vic phn nhnh khi gi hm.

 V d 3.6: Gi mt hm.
----------------------------------------------------------------------------using System;
class GoiHam
{
static void Main()
{
Console.WriteLine( Ham Main chuan bi goi ham Func()... );
Func();
Console.WriteLine( Tro lai ham Main() );
}
static void Func()
{
Console.WriteLine( ---->Toi la ham Func()...);
}
}

----------------------------------------------------------------------------Kt qu:
Ham Main chuan bi goi ham Func()...
---->Toi la ham Func()...
Tro lai ham Main()

----------------------------------------------------------------------------Lung chng trnh thc hin bt u t hm Main x l n dng lnh Func(), lnh Func()
thng c gi l mt li gi hm. Ti im ny lung chng trnh s r nhnh thc
hin hm va gi. Sau khi thc hin xong hm Func, th chng trnh quay li hm Main v
thc hin cu lnh ngay sau cu lnh gi hm Func.
T kho phn nhnh khng iu kin
thc hin phn nhnh ta gi mt trong cc t kha sau: goto, break, continue, return,
statementthrow. Vic trnh by cc t kha phn nhnh khng iu kin ny s c cp
trong chng tip theo. Trong phn ny ch cp chung khng i vo chi tit.
Phn nhnh c iu kin
Phn nhnh c iu kin c to bi cc lnh iu kin. Cc t kha ca cc lnh ny
nh : if, else, switch. S phn nhnh ch c thc hin khi biu thc iu kin phn nhnh
c xc nh l ng.
52
Nn Tng Ngn Ng C#

Ngn Ng Lp Trnh C#

Cu lnh if...else
Cu lnh phn nhnh if...else da trn mt iu kin. iu kin l mt biu thc s c
kim tra gi tr ngay khi bt u gp cu lnh . Nu iu kin c kim tra l ng, th cu
lnh hay mt khi cc cu lnh bn trong thn ca cu lnh if c thc hin.
Trong cu iu kin if...else th else l phn ty chn. Cc cu lnh bn trong thn ca else
ch c thc hin khi iu kin ca if l sai. Do vy khi cu lnh y if...else c dng
th ch c mt trong hai if hoc else c thc hin. Ta c c php cu iu kin if... else
sau:
if (biu thc iu kin)
<Khi lnh thc hin khi iu kin ng>
[else
<Khi lnh thc hin khi iu kin sai>]

Nu cc cu lnh trong thn ca if hay else m ln hn mt lnh th cc lnh ny phi c


bao trong mt khi lnh, tc l phi nm trong du khi { }:
if (biu thc iu kin)
{
<lnh 1>
<lnh 2>
....
}
[else
{
<lnh 1>
<lnh 2>
...
}]

Nh trnh by bn trn do else l phn ty chn nn c t trong du ngoc vung [...].


Minh ha 3.7 bn di cch s dng cu lnh if...else.

 V d 3.7: Dng cu lnh iu kin if...else.


----------------------------------------------------------------------------using System;
class ExIfElse
{
static void Main()
{
int var1 = 10;
int var2 = 20;
if ( var1 > var2)

53
Nn Tng Ngn Ng C#

Ngn Ng Lp Trnh C#

{
Console.WriteLine( var1: {0} > var2:{1}, var1, var2);
}
else
{
Console.WriteLine( var2: {0} > var1:{1}, var2, var1);
}
var1 = 30;
if ( var1 > var2)
{
var2 = var1++;
Console.WriteLine( Gan gia tri var1 cho var2);
Console.WriteLine( Tang bien var1 len mot );
Console.WritelLine( Var1 = {0}, var2 = {1}, var1, var2);
}
else
{
var1 = var2;
Console.WriteLine( Thiet lap gia tri var1 = var2 );
Console.WriteLine( var1 = {0}, var2 = {1}, var1, var2 );
}
}
}

----------------------------------------------------------------------------Kt qu:
Gan gia tri var1 cho var2
Tang bien var1 len mot
Var1 = 31, var2 = 30

----------------------------------------------------------------------------Trong v d 3.7 trn, cu lnh if u tin s kim tra xem gi tr ca var1 c ln hn gi tr


ca var2 khng. Biu thc iu kin ny s dng ton t quan h ln hn (>), cc ton t
khc nh nh hn (<), hay bng (==). Cc ton t ny thng xuyn c s dng trong lp
trnh v kt qu tr l gi tr ng hay sai.
Vic kim tra xc nh gi tr var1 ln hn var2 l sai (v var1 = 10 trong khi var2 = 20),
khi cc lnh trong else s c thc hin, v cc lnh ny in ra mn hnh:
var2: 20 > var1: 10

54
Nn Tng Ngn Ng C#

Ngn Ng Lp Trnh C#

Tip theo n cu lnh if th hai, sau khi thc hin lnh gn gi tr ca var1 = 30, lc ny
iu kin if ng nn cc cu lnh trong khi if s c thc hin v kt qu l in ra ba dng
sau:
Gan gia tri var1 cho var2
Tang bien var1 len mot
Var1 = 31, var2 = 30

Cu lnh if lng nhau


Cc lnh iu kin if c th lng nhau phc v cho vic x l cc cu iu kin phc
tp. Vic ny cng thng xuyn gp khi lp trnh. Gi s chng ta cn vit mt chng trnh
c yu cu xc nh tnh trng kt hn ca mt cng dn da vo cc thng tin nh tui, gii
tnh, v tnh trng hn nhn, da trn mt s thng tin nh sau:

Nu cng dn l nam th tui c th kt hn l 20 vi iu kin l cha c gia nh.


Nu cng dn l n th tui c th kt hn l 19 cng vi iu kin l cha c gia
nh.

Tt c cc cng dn c tui nh hn 19 iu khng c kt hn.


Da trn cc yu cu trn ta c th dng cc lnh if lng nhau thc hin. V d 3.8 sau s
minh ha cho vic thc hin cc yu cu trn.

 V d 3.8: Cc lnh if lng nhau.


----------------------------------------------------------------------------using System;
class TinhTrangKetHon
{
static void Main()
{
int tuoi;
bool coGiaDinh; // 0: cha c gia nh; 1: c gia nh
bool gioiTinh; // 0: gii tnh n; 1: gii tnh nam
tuoi = 24;
coGiaDinh = false; // cha c gia nh
gioiTinh = true; // nam

if ( tuoi >= 19)


{
if ( coGiaDinh == false)
{
if ( gioiTinh == false) // nu
Console.WriteLine( Nu co the ket hon);
else // nam

55
Nn Tng Ngn Ng C#

Ngn Ng Lp Trnh C#

if (tuoi >19) // phi ln hn 19 tuoi mi c kt hn


Console.WriteLine( Nam co the ket hon);
}
else // da co gia dinh
Console.WriteLine( Khong the ket hon nua do da ket hon);
}
else // tuoi < 19
Console.WriteLine( Khong du tuoi ket hon );
}
}

----------------------------------------------------------------------------Kt qu:
Nam co the ket hon

----------------------------------------------------------------------------Theo trnh t kim tra th cu lnh if u tin c thc hin, biu thc iu kin ng do
tui c gi tr l 24 ln hn 19. Khi khi lnh trong if s c thc thi. trong khi ny
li xut hin mt lnh if khc kim tra tnh trng xem ngi c gia nh cha, kt
qu iu kin if l ng v coGiaDinh = false nn biu thc so snh coGiaDinh == false s
tr v gi tr ng. Tip tc xt xem gii tnh ca ngi l nam hay n, v ch c nam trn
19 tui mi c kt hn. Kt qu kim tra l nam nn cu lnh if th ba c thc hin v
xut ra kt qu : Nam co the ket hon.
Cu lnh switch
Khi c qu nhiu iu kin chn thc hin th dng cu lnh if s rt ri rm v di
dng, Cc ngn ng lp trnh cp cao u cung cp mt dng cu lnh switch lit k cc gi
tr v ch thc hin cc gi tr thch hp. C# cng cung cp cu lnh nhy switch c c php
sau:
switch (biu thc iu kin)
{
case <gi tr>:
<Cc cu lnh thc hin>
<lnh nhy>
[default:
<Cc cu lnh thc hin mc nh>]
}

Cng tng t nh cu lnh if, biu thc so snh c t sau t kha switch, tuy nhin
gi tr so snh li c t sau mi cc t kha case. Gi tr sau t kha case l cc gi tr
hng s nguyn nh cp trong phn trc.

56
Nn Tng Ngn Ng C#

Ngn Ng Lp Trnh C#

Nu mt cu lnh case c thch hp tc l gi tr sau case bng vi gi tr ca biu thc


sau switch th cc cu lnh lin quan n cu lnh case ny s c thc thi. Tuy nhin
phi c mt cu lnh nhy nh break, goto iu khin nhy qua cc case khc.V nu
khng c cc lnh nhy ny th khi chng trnh s thc hin tt c cc case theo sau.
d hiu hn ta s xem xt v d 3.9 di y.

 V d 3.9: Cu lnh switch.


----------------------------------------------------------------------------using System;
class MinhHoaSwitch
{
static void Main()
{
const int mauDo = 0;
const int mauCam = 1;
const int mauVang = 2;
const int mauLuc = 3;
const int mauLam = 4;
const int mauCham = 5;
const int mauTim = 6;
int chonMau = mauLuc;

switch ( chonMau )
{
case mauDo:
Console.WriteLine( Ban cho mau do );
break;
case mauCam:
Console.WriteLine( Ban cho mau cam );
break;
case mauVang:
//Console.WriteLine( Ban chon mau vang);
case mauLuc:
Console.WriteLine( Ban chon mau luc);
break;
case mauLam:
Console.WriteLine( Ban chon mau lam);
goto case mauCham;
case mauCham:

57
Nn Tng Ngn Ng C#

Ngn Ng Lp Trnh C#

Console.WriteLine( Ban cho mau cham);


goto case mauTim;
case mauTim:
Console.WriteLine( Ban chon mau tim);
goto case mauLuc;
default:
Console.WriteLine( Ban khong chon mau nao het);
break;
}
Console.WriteLine( Xin cam on!);
}
}

----------------------------------------------------------------------------Trong v d 3.9 trn lit k by loi mu v dng cu lnh switch kim tra cc trng hp
chn mu. y chng ta th phn tch tg cu lnh case m khng quan tm n gi tr
bin chonMau.
Gi tr chonMau

Cu lnh case thc hin


case mauDo
case mauCam

Kt qu thc hin
Ban chon mau do
Ban chon mau cam

mauVang

case mauVang
case mauLuc

Ban chon mau luc

mauLuc

case mauLuc

Ban chon mau luc

mauLam

case
case
case
case

mauCham

case mauCham

Ban chon mau lam


Ban chon mau cham
Ban chon mau tim
Ban chon mau luc
Ban chon mau cham

mauDo
mauCam

mauLam
mauCham
mauTim
mauLuc

case mauTim
case mauLuc
mauTim

case mauTim
case mauLuc

Ban chon mau tim


Ban chon mau luc
Ban chon mau tim
Ban chon mau luc

Bng 3.3: M t cc trng hp thc hin cu lnh switch.


Trong on v d do gi tr ca bin chonMau = mauLuc nn khi vo lnh switch th case
mauLuc s c thc hin v kt qu nh sau:
----------------------------------------------------------------------------Kt qu v d 3.9
58
Nn Tng Ngn Ng C#

Ngn Ng Lp Trnh C#

Ban chon mau luc


Xin cam on!

----------------------------------------------------------------------------Ghi ch: i vi ngi lp trnh C/C++, trong C# chng ta khng th nhy xung mt
trng hp case tip theo nu cu lnh case hin ti khng rng. V vy chng ta phi vit
nh sau:
case 1:

// nhy xung

case 2:

Nh minh ha trn th trng hp x l case 1 l rng, tuy nhin chng ta khng th vit
nh sau:
case 1:
DoAnything();
// Trng hp ny khng th nhy xung case 2
case 2:

trong on chng trnh th hai trng hp case 1 c mt cu lnh nn khng th nhy


xung c. Nu mun trng hp case1 nhy qua case 2 th ta phi s dng cu lnh goto
mt cc tng minh:
case 1:
DoAnything();
goto case 2;
case 2:

Do vy khi thc hin xong cc cu lnh ca mt trng hp nu mun thc hin mt trng
hp case khc th ta dng cu lnh nhy goto vi nhn ca trng hp :
goto case <gi tr>

Khi gp lnh thot break th chng trnh thot khi switch v thc hin lnh tip sau khi
switch .
Nu khng c trng hp no thch hp v trong cu lnh switch c dng cu lnh defalut
th cc cu lnh ca trng hp default s c thc hin. Ta c th dng default cnh
bo mt li hay x l mt trng hp ngoi tt c cc trng hp case trong switch.
Trong v d minh ha cu lnh switch trc th gi tr kim tra cc trng hp thch hp
l cc hng s nguyn. Tuy nhin C# cn c kh nng cho php chng ta dng cu lnh
switch vi gi tr l mt chui, c th vit nh sau:
switch (chuoi1)
{
case mau do:
....
break;
case mau cam:

59
Nn Tng Ngn Ng C#

Ngn Ng Lp Trnh C#

...
break;
...
}

Cu lnh lp
C# cung cp mt b m rng cc cu lnh lp, bao gm cc cu lnh lp for, while v
do... while. Ngoi ra ngn ng C# cn b sung thm mt cu lnh lp foreach, lnh ny
mi i vi ngi lp trnh C/C++ nhng kh thn thin vi ngi lp trnh VB. Cui cng l
cc cu lnh nhy nh goto, break, continue, v return.
Cu lnh nhy goto
Lnh nhy goto l mt lnh nhy n gin, cho php chng trnh nhy v iu kin ti
mt v tr trong chng trnh thng qua tn nhn. Tuy nhin vic s dng lnh goto thng
lm mt i tnh cu trc thut ton, vic lm dng s dn n mt chng trnh ngun m gii
lp trnh gi l m n lin ri nh m bng bong vy. Hu ht cc ngi lp trnh c kinh
nghim u trnh dng lnh goto. Sau y l cch s dng lnh nhy goto:
To mt nhn
goto n nhn
Nhn l mt nh danh theo sau bi du hai chm (:). Thng thng mt lnh goto gn vi
mt iu kin no , v d 3.10 sau s minh ha cc s dng lnh nhy goto trong chng
trnh.

 V d 3.10: S dng goto.


----------------------------------------------------------------------------using System;
public class UsingGoto
{
public static int Main()
{
int i = 0;
lap:

// nhn

Console.WriteLine(i:{0},i);
i++;
if ( i < 10 )
goto lap; // nhy v nhn lap
return 0;
}
}

----------------------------------------------------------------------------60
Nn Tng Ngn Ng C#

Ngn Ng Lp Trnh C#

Kt qu:
i:0
i:1
i:2
i:3
i:4
i:5
i:6
i:7
i:8
i:9

----------------------------------------------------------------------------Nu chng ta v lu ca mt chng trnh c s dng nhiu lnh goto, th ta s thy kt


qu rt nhiu ng chng cho ln nhau, ging nh l cc si m vy. Chnh v vy nn
nhng on m chng trnh c dng lnh goto cn c gi l spaghetti code.
Vic trnh dng lnh nhy goto trong chng trnh hon ton thc hin c, c th dng
vng lp while thay th hon ton cc cu lnh goto.
Vng lp while
ngha ca vng lp while l: Trong khi iu kin ng th thc hin cc cng vic ny.
C php s dng vng lp while nh sau:
while (Biu thc)
<Cu lnh thc hin>

Biu thc ca vng lp while l iu kin cc lnh c thc hin, biu thc ny bt buc
phi tr v mt gi tr kiu bool l true/false. Nu c nhiu cu lnh cn c thc hin trong
vng lp while th phi t cc lnh ny trong khi lnh. V d 3.11 minh ha vic s dng
vng lp while.

 V d 3.11: S dng vng lp while.


----------------------------------------------------------------------------using System;
public class UsingWhile
{
public static int Main()
{
int i = 0;
while ( i < 10 )
{
Console.WriteLine( i: {0} ,i);
i++;

61
Nn Tng Ngn Ng C#

Ngn Ng Lp Trnh C#

}
return 0;
}
}

----------------------------------------------------------------------------Kt qu:
i:0
i:1
i:2
i:3
i:4
i:5
i:6
i:7
i:8
i:9

----------------------------------------------------------------------------on chng trnh 3.11 cng cho kt qu tng t nh chng trnh minh ha 3.10 dng
lnh goto. Tuy nhin chng trnh 3.11 r rng hn v c ngha t nhin hn. C th din
gii ngn ng t nhin on vng lp while nh sau: Trong khi i nh hn 10, th in ra gi
tr ca i v tng i ln mt n v.
Lu rng vng lp while s kim tra iu kin trc khi thc hin cc lnh bn trong, iu
ny m bo nu ngay t u iu kin sai th vng lp s khng bao gi thc hin. do vy
nu khi to bin i c gi tr l 11, th vng lp s khng c thc hin.
Vng lp do...while
i khi vng lp while khng tho mn yu cu trong tnh hung sau, chng ta mun chuyn
ng ngha ca while l chy trong khi iu kin ng thnh ng ngha khc nh lm iu
ny trong khi iu kin vn cn ng. Ni cch khc thc hin mt hnh ng, v sau khi
hnh ng c hon thnh th kim tra iu kin. C php s dng vng lp do...while nh
sau:
do
<Cu lnh thc hin>
while ( iu kin )

y c s khc bit quan trng gia vng lp while v vng lp do...while l khi dng
vng lp do...while th ti thiu s c mt ln cc cu lnh trong do...while c thc hin.
iu ny cng d hiu v ln u tin i vo vng lp do...while th iu kin cha c
kim tra.

 V d 3.12: Minh ho vic s dng vng lp do..while.


62
Nn Tng Ngn Ng C#

Ngn Ng Lp Trnh C#

----------------------------------------------------------------------------using System;
public class UsingDoWhile
{
public static int Main( )
{
int i = 11;
do
{
Console.WriteLine(i: {0},i);
i++;
} while ( i < 10 )
return 0;
}
}

----------------------------------------------------------------------------Kt qu:
i: 11

----------------------------------------------------------------------------Do khi to bin i gi tr l 11, nn iu kin ca while l sai, tuy nhin vng lp do...while
vn c thc hin mt ln.
Vng lp for
Vng lp for bao gm ba phn chnh:
Khi to bin m vng lp
Kim tra iu kin bin m, nu ng th s thc hin cc lnh bn trong vng for
Thay i bc lp.
C php s dng vng lp for nh sau:
for ([ phn khi to] ; [biu thc iu kin]; [bc lp])
<Cu lnh thc hin>

Vng lp for c minh ha trong v d sau:


 V d 3.13: S dng vng lp for.
----------------------------------------------------------------------------using System;
public class UsingFor
{
public static int Main()
{
for (int i = 0; i < 30; i++)

63
Nn Tng Ngn Ng C#

Ngn Ng Lp Trnh C#

{
if (i %10 ==0)
{
Console.WriteLine({0} ,i);
}
else
{
Console.Write({0} ,i);
}
}
return 0;
}
}

----------------------------------------------------------------------------Kt qu:
0
1 2 3 4 5 6 7 8 9 10
11 12 13 14 15 16 17 18 19 20
21 22 23 24 25 26 27 28 29

----------------------------------------------------------------------------Trong on chng trnh trn c s dng ton t chia ly d modulo, ton t ny s c


cp n phn sau. ngha lnh i%10 == 0 l kim tra xem i c phi l bi s ca 10 khng,
nu i l bi s ca 10 th s dng lnh WriteLine xut gi tr i v sau a cursor v u
dng sau. Cn ngc li ch cn xut gi tr ca i v khng xung dng.
u tin bin i c khi to gi tr ban u l 0, sau chng trnh s kim tra iu kin,
do 0 nh hn 30 nn iu kin ng, khi cc cu lnh bn trong vng lp for s c thc
hin. Sau khi thc hin xong th bin i s c tng thm mt n v (i++).
C mt iu lu l bin i do khai bao bn trong vng lp for nn ch c phm vi hot ng
bn trong vng lp. V d 3.14 sau s khng c bin dch v xut hin mt li.

 V d 3.14: Phm vi ca bin khai bo trong vng lp.


----------------------------------------------------------------------------using System;
public class UsingFor
{
public static int Main()
{
for (int i = 0; i < 30; i++)
{

64
Nn Tng Ngn Ng C#

Ngn Ng Lp Trnh C#

if (i %10 ==0)
{
Console.WriteLine({0} ,i);
}
else
{
Console.Write({0} ,i);
}
}
// Lnh sau sai do bin i ch c khai bo bn trong vng lp
Console.WriteLine( Ket qua cuoi cung cua i:{0},i);
return 0;
}
}

----------------------------------------------------------------------------Cu lnh lp foreach


Vng lp foreach cho php to vng lp thng qua mt tp hp hay mt mng. y
l mt cu lnh lp mi khng c trong ngn ng C/C++. Cu lnh foreach c c php
chung nh sau:
foreach ( <kiu tp hp> <tn truy cp thnh phn > in < tn tp hp>)
<Cc cu lnh thc hin>

Do lp da trn mt mng hay tp hp nn ton b vng lp s duyt qua tt c cc thnh


phn ca tp hp theo th t c sp. Khi duyt n phn t cui cng trong tp hp th
chng trnh s thot ra khi vng lp foreach.

 V d 3.15 minh ha vic s dng vng lp foreach.


----------------------------------------------------------------------------using System;
public class UsingForeach
{
public static int Main()
{
int[] intArray = {1,2,3,4,5,6,7,8,9,10};
foreach( int item in intArray)
{
Console.Write({0} , item);
}
return 0;
}

65
Nn Tng Ngn Ng C#

Ngn Ng Lp Trnh C#

----------------------------------------------------------------------------Kt qu:
1 2 3 4 5 6 7 8 9 10

----------------------------------------------------------------------------Cu lnh nhy break v continue


Khi ang thc hin cc lnh trong vng lp, c yu cu nh sau: khng thc hin cc
lnh cn li na m thot khi vng lp, hay khng thc hin cc cng vic cn li ca vng
lp hin ti m nhy qua vng lp tip theo. p ng yu cu trn C# cung cp hai lnh
nhy l break v continue thot khi vng lp.
Break khi c s dng s a chng trnh thot khi vng lp v tip tc thc hin cc
lnh tip ngay sau vng lp.
Continue ngng thc hin cc cng vic cn li ca vng lp hin thi v quay v u vng
lp thc hin bc lp tip theo
Hai lnh break v continue to ra nhiu im thot v lm cho chng trnh kh hiu cng
nh l kh duy tr. Do vy phi cn trng khi s dng cc lnh nhy ny.
V d 3.16 s c trnh by bn di minh ha cch s dng lnh continue v break.
on chng trnh m phng h thng x l tn hiu giao thng n gin. Tn hiu m phng
l cc k t ch hoa hay s c nhp vo t bn phm, s dng hm ReadLine ca lp
Console c mt chui k t t bn phm.
Thut ton ca chng trnh kh n gin: Khi nhn tn hiu 0 c ngha l mi vic bnh
thng, khng cn phi lm bt c cng vic g c, k c vic ghi li cc s kin. Trong
chng trnh ny n gin nn cc tn hiu c nhp t bn phm, cn trong ng dng tht
th tn hiu ny s c pht sinh theo cc mu tin thi gian trong c s d liu. Khi nhn
c tn hiu thot (m phng bi k t T) th ghi li tnh trng v kt thc x l. Cui
cng, bt c tn hiu no khc s pht ra mt thng bo, c th l thng bo n nhn vin
cnh st chng hn...Trng hp tn hiu l X th cng s pht ra mt thng bo nhng sau
vng lp x l cng kt thc.

 V d 3.16: S dng break v continue.


----------------------------------------------------------------------------using System;
public class TrafficSignal
{
public static int Main()
{
string signal = 0; // Khi to tn hiu
// bt u chu trnh x l tn hiu
while ( signal != X)

66
Nn Tng Ngn Ng C#

Ngn Ng Lp Trnh C#

{
//nhp tn hiu
Console.Write(Nhap vao mot tin hieu: );
signal = Console.ReadLine();
// xut tn hiu hin thi
Console.WriteLine(Tin hieu nhan duoc: {0}, signal);
// phn x l tn hiu
if (signal == T)
{
// Tn hiu thot c gi
// lu li s kin v thot
Console.WriteLine(Ngung xu ly! Thoat\n);
break;
}
if ( signal == 0)
{
// Tn hiu nhn c bnh thng
// Lu li s kin v tip tc
Console.WriteLine(Tat ca dieu tot!\n);
continue;
}
// Thc hin mt s hnh ng no
// v tip tc
Console.WriteLine(---bip bip bip\n);
}
return 0;
}
}

----------------------------------------------------------------------------Kt qu: sau khi nhp tun t cc tn hiu : 0, B, T


Nhap vao mot tin hieu: 0
Tin hieu nhan duoc: 0
Tat ca dieu tot!

Nhap vao mot tin hieu: B


Tin hieu nhan duoc: B
---bip bip bip

67
Nn Tng Ngn Ng C#

Ngn Ng Lp Trnh C#

Nhap vao mot tin hieu: T


Tin hieu nhan duoc: T
Ngung xu ly! Thoat

----------------------------------------------------------------------------im chnh yu ca on chng trnh trn l khi nhp vo tn hiu T th sau khi thc hin
mt s hnh ng cn thit chng trnh s thot ra khi vng lp v khng xut ra cu thng
bo bip bip bip. Ngc li khi nhn c tn hiu 0 th sau khi xut thng bo chng trnh s
quay v u vng lp thc hin tip tc v cng khng xut ra cu thng bo bip bip bip.

Ton t
Ton t c k hiu bng mt biu tng dng thc hin mt hnh ng. Cc kiu
d liu c bn ca C# nh kiu nguyn h tr rt nhiu cc ton t nh ton t gn, ton t
ton hc, logic....

Ton t gn
n lc ny ton t gn kh quen thuc vi chng ta, hu ht cc chng trnh minh
ha t u sch u s dng php gn. Ton t gn hay php gn lm cho ton hng bn
tri thay i gi tr bng vi gi tr ca ton hng bn phi. Ton t gn l ton t hai ngi.
y l ton t n gin nht thng dng nht v cng d s dng nht.

Ton t ton hc
Ngn ng C# cung cp nm ton t ton hc, bao gm bn ton t u cc php ton
c bn. Ton t cui cng l ton t chia nguyn ly phn d. Chng ta s tm hiu chi tit
cc php ton ny trong phn tip sau.
Cc php ton s hc c bn (+,-,*,/)
Cc php ton ny khng th thiu trong bt c ngn ng lp trnh no, C# cng
khng ngoi l, cc php ton s hc n gin nhng rt cn thit bao gm: php cng (+),
php tr (-), php nhn (*), php chia (/) nguyn v khng nguyn.
Khi chia hai s nguyn, th C# s b phn phn s, hay b phn d, tc l nu ta chia 8/3 th
s c kt qu l 2 v s b phn d l 2, do vy ly c phn d ny th C# cung cp
thm ton t ly d s c trnh by trong phn k tip.
Tuy nhin, khi chia cho s thc c kiu nh float, double, hay decimal th kt qu chia c
tr v l mt s thc.
Php ton chia ly d
tm phn d ca php chia nguyn, chng ta s dng ton t chia ly d (%). V
d, cu lnh sau 8%3 th kt qu tr v l 2 (y l phn d cn li ca php chia nguyn).
Tht s php ton chia ly d rt hu dng cho ngi lp trnh . Khi chng ta thc hin mt
php chia d n cho mt s khc, nu s ny l bi s ca n th kt qu ca php chia d l 0.
V d 20 % 5 = 0 v 20 l mt bi s ca 5. iu ny cho php chng ta ng dng trong

68
Nn Tng Ngn Ng C#

Ngn Ng Lp Trnh C#

vng lp, khi mun thc hin mt cng vic no cch khong n ln, ta ch cn kim tra
php chia d n, nu kt qu bng 0 th thc hin cng vic. Cch s dng ny p dng
trong v d minh ha s dng vng lp for bn trn. V d 3.17 sau minh ha s dng cc
php ton chia trn cc s nguyn, thc...

 V d 3.17: Php chia v php chia ly d.


----------------------------------------------------------------------------using System;
class Tester
{
public static void Main()
{
int i1, i2;
float f1, f2;
double d1, d2;
decimal dec1, dec2;
i1 = 17;
i2 = 4;
f1 = 17f;
f2 = 4f;
d1 = 17;
d2 = 4;
dec1 = 17;
dec2 = 4;
Console.WriteLine(Integer: \t{0}, i1/i2);
Console.WriteLine(Float: \t{0}, f1/f2);
Console.WriteLine(Double: \t{0}, d1/d2);
Console.WriteLine(Decimal: \t{0}, dec1/dec2);
Console.WriteLine(\nModulus: : \t{0}, i1%i2);
}
}

----------------------------------------------------------------------------Kt qu:
Integer: 4
float:

4.25

double:

4.25

decimal: 4.25

69
Nn Tng Ngn Ng C#

Ngn Ng Lp Trnh C#

Modulus: 1

-----------------------------------------------------------------------------

Ton t tng v gim


Khi s dng cc bin s ta thng c thao tc l cng mt gi tr vo bin, tr i mt
gi tr t bin , hay thc hin cc tnh ton thay i gi tr ca bin sau gn gi tr mi
va tnh ton cho chnh bin .
Tnh ton v gn tr li
Gi s chng ta c mt bin tn Luong lu gi tr lng ca mt ngi, bin Luong
ny c gi tr hin thi l 1.500.000, sau tng thm 200.000 ta c th vit nh sau:
Luong = Luong + 200.000;

Trong cu lnh trn php cng c thc hin trc, khi kt qu ca v phi l 1.700.000
v kt qu ny s c gn li cho bin Luong, cui cng Luong c gi tr l 1.700.000.
Chng ta c th thc hin vic thay i gi tr ri gn li cho bin vi bt k php ton s hc
no:
Luong = Luong * 2;
Luong = Luong 100.000;
...

Do vic tng hay gim gi tr ca mt bin rt thng xy ra trong khi tnh ton nn C# cung
cp cc php ton t gn (self- assignment). Bng sau lit k cc php ton t gn.
Ton t
+=

ngha
Cng thm gi tr ton hng bn phi
vo gi tr ton hng bn tri

-=

Ton hng bn tri c tr bt i mt

*=

lng bng gi tr ca ton hng bn


phi
Ton hng bn tri c nhn vi mt
lng bng gi tr ca ton hng bn
phi.

/=

%=

Ton hng bn tri c chia vi mt


lng bng gi tr ca ton hng bn
phi.
Ton hng bn tri c chia ly d vi
mt lng bng gi tr ca ton hng
bn phi.

Bng 3.4: M t cc php ton t gn.


Da trn cc php ton t gn trong bng ta c th thay th cc lnh tng gim lng nh sau:
70
Nn Tng Ngn Ng C#

Ngn Ng Lp Trnh C#

Luong += 200.000;
Luong *= 2;
Luong -= 100.000;

Kt qu ca lnh th nht l gi tr ca Luong s tng thm 200.000, lnh th hai s lm cho


gi tr Luong nhn i tc l tng gp 2 ln, v lnh cui cng s tr bt 100.000 ca Luong.
Do vic tng hay gim 1 rt ph bin trong lp trnh nn C# cung cp hai ton t c bit l
tng mt (++) hay gim mt (--).
Khi mun tng i mt gi tr ca bin m trong vng lp ta c th vit nh sau:
bienDem++;

Ton t tng gim tin t v tng gim hu t


Gi s mun kt hp cc php ton nh gia tng gi tr ca mt bin v gn gi tr ca
bin cho bin th hai, ta vit nh sau:
var1 = var2++;

Cu hi c t ra l gn gi tr trc khi cng hay gn gi tr sau khi cng. Hay ni cch


khc gi tr ban u ca bin var2 l 10, sau khi thc hin ta mun gi tr ca var1 l 10,
var2 l 11, hay var1 l 11, var2 cng 11?
gii quyt yu cu trn C# cung cp th t thc hin php ton tng/gim vi php ton
gn, th t ny c gi l tin t (prefix) hay hu t (postfix). Do ta c th vit:
var1 = var2++; // Hu t

Khi lnh ny c thc hin th php gn s c thc hin trc tin, sau mi n php
ton tng. Kt qu l var1 = 10 v var2 = 11. Cn i vi trng hp tin t:
var1 = ++var2;

Khi php tng s c thc hin trc tc l gi tr ca bin var2 s l 11 v cui cng
php gn c thc hin. Kt qu c hai bin var1 v var2 iu c gi tr l 11.
hiu r hn v hai php ton ny chng ta s xem v d minh ha 3.18 sau
 V d 3.18: Minh ho s dng ton t tng trc v tng sau khi gn.
----------------------------------------------------------------------------using System;
class Tester
{
static int Main()
{
int valueOne = 10;
int valueTwo;
valueTwo = valueOne++;
Console.WriteLine(Thuc hien tang sau: {0}, {1},
valueOne, valueTwo);
valueOne = 20;

71
Nn Tng Ngn Ng C#

Ngn Ng Lp Trnh C#

valueTwo = ++valueOne;
Console.WriteLine(Thuc hien tang truoc: {0}, {1},
valueOne, valueTwo);
return 0;
}
}

----------------------------------------------------------------------------Kt qu:
Thuc hien tang sau: 11, 10
Thuc hien tang truoc: 21, 21

-----------------------------------------------------------------------------

Ton t quan h
Nhng ton t quan h c dng so snh gia hai gi tr, v sau tr v kt qu
l mt gi tr logic kiu bool (true hay false). V d ton t so snh ln hn (>) tr v gi tr
l true nu gi tr bn tri ca ton t ln hn gi tr bn phi ca ton t. Do vy 5 > 2 tr
v mt gi tr l true, trong khi 2 > 5 tr v gi tr false.
Cc ton t quan h trong ngn ng C# c trnh by bng 3.4 bn di. Cc ton t trong
bng c minh ha vi hai bin l value1 v value2, trong value1 c gi tr l 100 v
value2 c gi tr l 50.
Tn ton t
So snh bng

K hiu
==

Biu thc so snh


value1 == 100
value1 == 50

Khng bng

!=

value2 != 100
value2 != 90

Ln hn

>

value1 > value2


value2 > value1

Ln hn hay bng
Nh hn

>=
<

Kt qu so snh
true
false
false
true
true
false

value2 >= 50

true

value1 < value2

false
true

value2 < value1

Nh hn hay bng
<=
value1 <= value2
false
Bng 3.4: Cc ton t so snh (gi s value1 = 100, v value2 = 50).
Nh trong bng 3.4 trn ta lu ton t so snh bng (==), ton t ny c k hiu bi hai
du bng (=) lin nhau v cng trn mt hng , khng c bt k khong trng no xut hin
gia chng. Trnh bin dch C# xem hai du ny nh mt ton t.

Ton t logic
72
Nn Tng Ngn Ng C#

Ngn Ng Lp Trnh C#

Trong cu lnh if m chng ta tm hiu trong phn trc, th khi iu kin l true
th biu thc bn trong if mi c thc hin. i khi chng ta mun kt hp nhiu iu kin
vi nhau nh: bt buc c hai hay nhiu iu kin phi ng hoc ch cn mt trong cc iu
kin ng l hoc khng c iu kin no ng...C# cung cp mt tp hp cc ton t
logic phc v cho ngi lp trnh.
Bng 3.5 lit k ba php ton logic, bng ny cng s dng hai bin minh ha l x, v y trong
x c gi tr l 5 v y c gi tr l 7.

Tn ton t

K hiu

and

&&

Biu thc logic


(x == 3) && (y ==

Gi tr

Logic

false

C hai iu kin
phi ng
Ch cn mt iu
kin ng
Biu thc trong
ngoc phi sai.

7)
or

||

(x == 3) || (y == 7)

true

not

! (x == 3 )

true

Bng 3.5: Cc ton t logic (gi s x = 5, y = 7).


Ton t and s kim tra c hai iu kin. Trong bng 3.5 trn c minh ha biu thc logic s
dng ton t and:
(x == 3) && (y == 7)

Ton b biu thc c xc nh l sai v c iu kin (x == 3) l sai.


Vi ton t or, th mt hay c hai iu kin ng th ng, biu thc s c gi tr l sai khi c
hai iu kin sai. Do vy ta xem biu thc minh ha ton t or:
(x == 3) || (y == 7)

Biu thc ny c xc nh gi tr l ng do c mt iu kin ng l (y == 7) l ng.


i vi ton t not, biu thc s c gi tr ng khi iu kin trong ngoc l sai, v ngc li,
do biu thc:
!( x == 3)

c gi tr l ng v iu kin trong ngoc tc l (x == 3) l sai.


Nh chng ta bit i vi php ton logic and th ch cn mt iu kin trong biu thc sai
l ton b biu thc l sai, do vy tht l d tha khi kim tra cc iu kin cn li mt khi c
mt iu kin sai. Gi s ta c on chng trnh sau:
int x = 8;
if ((x == 5) && (y == 10))

Khi biu thc if s ng khi c hai biu thc con l (x == 5) v (y == 10) ng. Tuy
nhin khi xt biu thc th nht do gi tr x l 8 nn biu thc (x == 5) l sai. Khi khng
cn thit xc nh gi tr ca biu thc cn li, tc l vi bt k gi tr no ca biu thc (y
== 10) th ton b biu thc iu kin if vn sai.

73
Nn Tng Ngn Ng C#

Ngn Ng Lp Trnh C#

Tng t vi biu thc logic or, khi xc nh c mt biu thc con ng th khng cn
phi xc nh cc biu thc con cn li, v ton t logic or ch cn mt iu kin ng l :
int x =8;
if ( (x == 8) || (y == 10))

Khi kim tra biu thc (x == 8) c gi tr l ng, th khng cn phi xc nh gi tr ca


biu thc (y == 10) na.
Ngn ng lp trnh C# s dng logic nh chng ta tho lun bn trn loi b cc tnh
ton so snh d tha v cng khng logic na!

u tin ton t
Trnh bin dch phi xc nh th t thc hin cc ton t trong trng hp mt biu
thc c nhiu php ton, gi s, c biu thc sau:
var1 = 5+7*3;

Biu thc trn c ba php ton thc hin bao gm (=, +,*). Ta th xt cc php ton theo
th t t tri sang phi, u tin l gn gi tr 5 cho bin var1, sau cng 7 vo 5 l 12 cui
cng l nhn vi 3, kt qu tr v l 36, iu ny tht s c vn , khng ng vi mc ch
yu cu ca chng ta. Do vy vic xy dng mt trnh t x l cc ton t l ht sc cn thit.
Cc lut v u tin x l s bo trnh bin dch bit c ton t no c thc hin trc
trong biu thc.Tng t nh trong php ton i s th php nhn c u tin thc hin
trc php ton cng, do vy 5+7*3 cho kt qu l 26 ng hn kt qu 36. V c hai php
ton cng v php ton nhn iu c u tin cao hn php gn. Nh vy trnh bin dch s
thc hin cc php ton ri sau thc hin php gn bc cui cng. Kt qu ng ca
cu lnh trn l bin var1 s nhn gi tr l 26.
Trong ngn ng C#, du ngoc c s dng thay i th t x l, iu ny cng ging
trong tnh ton i s. Khi mun kt qu 36 cho bin var1 c th vit:
var1 = (5+7) * 3;

Biu thc trong ngoc s c x l trc v sau khi c kt qu l 12 th php nhn c


thc hin.
Bng 3.6: Lit k th t u tin cc php ton trong C#.
STT
1

Loi ton t
Php ton c bn

Ton t
(x) x.y f(x) a[x] x++ xnew typeof
sizeof checked unchecked

2
3

Php nhn

*/%

4
5
6

Php cng
Dch bit
Quan h

+-

+ - ! ~ ++x x (T)x

<< >>
< > <= >= is

Th t
Tri
Tri
Tri
Tri
Tri
Tri
74

Nn Tng Ngn Ng C#

Ngn Ng Lp Trnh C#

So snh bng

Php
AND
Php
XOR

Phi

== !=

ton

logic &

Tri

ton

logic ^

Tri

10
11

Php ton logic OR


iu kin AND

12
13

iu kin OR
iu kin

||

14

Php gn

= *= /= %= += -= <<= >>=

Tri
Tri

&&

Tri
Phi

?:
&=

Phi

^= |=

Bng 3.6: Th t u tin cc ton t.


Cc php ton c lit k cng loi s c th t theo mc th th ca bng: th t tri tc l
u tin ca cc php ton t bn tri sang, th t phi th cc php ton c u tin t
bn phi qua tri. Cc ton t khc loi th c u tin t trn xung di, do vy cc ton
t loi c bn s c u tin cao nht v php ton gn s c u tin thp nht trong cc
ton t.

Ton t ba ngi
Hu ht cc ton t i hi c mt ton hng nh ton t (++, --) hay hai ton hng
nh (+,-,*,/,...). Tuy nhin, C# cn cung cp thm mt ton t c ba ton hng (?:). Ton t
ny c c php s dng nh sau:
<Biu thc iu kin > ? <Biu thc th 1> : <Biu thc th 2>

Ton t ny s xc nh gi tr ca mt biu thc iu kin, v biu thc iu kin ny phi


tr v mt gi tr kiu bool. Khi iu kin ng th <biu thc th 1> s c thc hin, cn
ngc li iu kin sai th <biu thc th 2> s c thc hin. C th din gii theo ngn
ng t nhin th ton t ny c ngha : Nu iu kin ng th lm cng vic th nht, cn
ngc li iu kin sai th lm cng vic th hai. Cch s dng ton t ba ngi ny c
minh ha trong v d 3.19 sau.

 V d 3.19: S dng ton t bao ngi.


----------------------------------------------------------------------------using System;
class Tester
{
public static int Main()
{
int value1;

75
Nn Tng Ngn Ng C#

Ngn Ng Lp Trnh C#

int value2;
int maxValue;
value1 = 10;
value2 = 20;
maxValue = value1 > value2 ? value1 : value2;
Console.WriteLine(Gia tri thu nhat {0}, gia tri thu hai {1},
gia tri lon nhat {2}, value1, value2, maxValue);
return 0;
}
}

----------------------------------------------------------------------------Kt qu:
Gia tri thu nhat 10, gia tri thu hai 20, gia tri lon nhat 20

----------------------------------------------------------------------------Trong v d minh ha trn ton t ba ngi c s dng kim tra xem gi tr ca value1
c ln hn gi tr ca value2, nu ng th tr v gi tr ca value1, tc l gn gi tr value1
cho bin maxValue, cn ngc li th gn gi tr value2 cho bin maxValue.

Namespace
Chng 2 tho lun vic s dng c tnh namespace trong ngn ng C#, nhm
trnh s xung t gia vic s dng cc th vin khc nhau t cc nh cung cp. Ngoi ra,
namespace c xem nh l tp hp cc lp i tng, v cung cp duy nht cc nh danh
cho cc kiu d liu v c t trong mt cu trc phn cp. Vic s dng namespace trong
khi lp trnh l mt thi quen tt, bi v cng vic ny chnh l cch lu cc m ngun s
dng v sau. Ngoi th vin namespace do MS.NET v cc hng th ba cung cp, ta c th
to ring cho mnh cc namespace. C# a ra t kha using khai bo s dng namespace
trong chng trnh:
using < Tn namespace >

to mt namespace dng c php sau:


namespace <Tn namespace>
{
< nh ngha lp A>
< nh ngha lp B >
.....
}

on v d 3.20 minh ha vic to mt namespace.


 V d 3.20: To mt namespace.
----------------------------------------------------------------------------76
Nn Tng Ngn Ng C#

Ngn Ng Lp Trnh C#

namespace MyLib
{
using System;
public class Tester
{
public static int Main()
{
for (int i =0; i < 10; i++)
{
Console.WriteLine( i: {0}, i);
}
return 0;
}
}
}

----------------------------------------------------------------------------V d trn to ra mt namespace c tn l MyLib, bn trong namespace ny cha mt lp c


tn l Tester. C# cho php trong mt namespace c th to mt namespace khc lng bn
trong v khng gii hn mc phn cp ny, vic phn cp ny c minh ha trong v d
3.21.
 V d 3.21: To cc namespace lng nhau.
----------------------------------------------------------------------------namespace MyLib
{
namespace Demo
{
using System;
public class Tester
{
public static int Main()
{
for (int i =0; i < 10; i++)
{
Console.WriteLine( i: {0}, i);
}
return 0;
}
}

77
Nn Tng Ngn Ng C#

Ngn Ng Lp Trnh C#

}
}

----------------------------------------------------------------------------Lp Tester trong v d 3.21 c t trong namespace Demo do c th to mt lp Tester


khc bn ngoi namespace Demo hay bn ngoi namespace MyLib m khng c bt c s
tranh cp hay xung t no. truy cp lp Tester dng c php sau:
MyLib.Demo.Tester

Trong mt namespace mt lp c th gi mt lp khc thuc cc cp namespace khc nhau,


v d tip sau minh ha vic gi mt hm thuc mt lp trong namespace khc.

 V d 3.22: Gi mt namespace thnh vin.


----------------------------------------------------------------------------using System;
namespace MyLib
{
namespace Demo1
{
class Example1
{
public static void Show1()
{
Console.WriteLine(Lop Example1);
}
}
}
namespace Demo2
{
public class Tester
{
public static int Main()
{
Demo1.Example1.Show1();
Demo1.Example2.Show2();
return 0;
}
}
}
}
// Lp Example2 c cng namespace MyLib.Demo1 vi

78
Nn Tng Ngn Ng C#

Ngn Ng Lp Trnh C#

//lp Example1 nhng hai khai bo khng cng mt khi.


namespace MyLib.Demo1
{
class Example2
{
public static void Show2()
{
Console.WriteLine(Lop Example2);
}
}
}

----------------------------------------------------------------------------Kt qu:
Lop Exemple1
Lop Exemple2

----------------------------------------------------------------------------V d 3.22 trn c hai im cn lu l cch gi mt namespace thnh vin v cch khai bo
cc namspace. Nh chng ta thy trong namespace MyLib c hai namespace con cng cp l
Demo1 v Demo2, hm Main ca Demo2 s c chng trnh thc hin, v trong hm Main
ny c gi hai hm thnh vin tnh ca hai lp Example1 v Example2 ca namespace
Demo1.
V d trn cng a ra cch khai bo khc cc lp trong namespace. Hai lp Example1 v
Example2 iu cng thuc mt namespace MyLib.Demo1, tuy nhin Example2 c khai bo
mt khi ring l bng cch s dng khai bo:
namespace MyLib.Demo1
{
class Example2
{
....
}
}

Vic khai bo ring l ny c th cho php trn nhiu tp tin ngun khc nhau, min sao m
bo khai bo ng tn namspace th chng vn thuc v cng mt namespace. Cc ch dn

bin dch
i vi cc v d minh ha trong cc phn trc, khi bin dch th ton b chng
trnh s c bin dch. Tuy nhin, c yu cu thc t l chng ta ch mun mt phn trong

79
Nn Tng Ngn Ng C#

Ngn Ng Lp Trnh C#

chng trnh c bin dch c lp, v d nh khi debug chng trnh hoc xy dng cc
ng dng...
Trc khi mt m ngun c bin dch, mt chng trnh khc c gi l chng trnh
tin x l s thc hin trc v chun b cc on m ngun bin dch. Chng trnh tin
x l ny s tm trong m ngun cc k hiu ch dn bin dch c bit, tt c cc ch dn bin
dch ny u c bt u vi du ro (#). Cc ch dn cho php chng ta nh ngha cc nh
danh v kim tra cc s tn ti ca cc nh danh .

nh ngha nh danh
Cu lnh tin x l sau:
#define DEBUG

Lnh trn nh ngha mt nh danh tin x l c tn l DEBUG. Mc d nhng ch th tin x


l khc c th c t bt c u trong chng trnh, nhng vi ch th nh ngha nh
danh th phi t trc tt c cc lnh khc, bao gm c cu lnh using.
kim tra mt nh danh c nh ngha th ta dng c php #if <nh danh>. Do ta
c th vit nh sau:
#define DEBUG
//...Cc on m ngun bnh thng, khng b tc ng bi trnh tin x l
...
#if DEBUG
// Cc on m ngun trong khi if debug c bin dch
#else
// Cc on m ngun khng nh ngha debug v khng c bin dch
#endif
//...Cc on m ngun bnh thng, khng b tc ng bi trnh tin x l

Khi chng trnh tin x l thc hin, chng s tm thy cu lnh #define DEBUG v lu li
nh danh DEBUG ny. Tip theo trnh tin x l ny s b qua tt c cc on m bnh
thng khc ca C# v tm cc khi #if, #else, v #endif.
Cu lnh #if s kim tra nh danh DEBUG, do nh danh ny c nh ngha, nn on
m ngun gia khi #if n #else s c bin dch vo chng trnh. Cn on m ngun
gia #else v #endif s khng c bin dch. Tc l on m ngun ny s khng c
thc hin hay xut hin bn trong m hp ng ca chng trnh.
Trng hp cu lnh #if sai tc l khng c nh ngha mt nh danh DEBUG trong chng
trnh, khi on m ngun gia khi #if v #else s khng c a vo chng trnh
bin dch m ngc li on m ngun gia khi #else v #endif s c bin dch.
Lu : Tt c cc on m ngun bn ngoi #if v #endif th khng b tc ng bi trnh
tin x l v tt c cc m ny u c a vo bin dch.
80
Nn Tng Ngn Ng C#

Ngn Ng Lp Trnh C#

Khng nh ngha nh danh


S dng ch th tin x l #undef xc nh trng thi ca mt nh danh l khng
c nh ngha. Nh chng ta bit trnh tin x l s thc hin t trn xung di, do vy
mt nh danh c khai bo bn trn vi ch th #define s c hiu qu n khi mt gi
cu lnh #undef nh danh hay n cui chng trnh:
#define DEBUG
#if DEBUG
// on code ny c bin dch
#endif
....
#undef DEBUG
....
#if DEBUG
// on code ny khng c bin dch
#endif
.....
#if u tin ng do DEBUG c nh ngha, cn #if th hai sai khng c bin dch v
DEBUG c nh ngha li l #undef.

Ngoi ra cn c ch th #elif v #else cung cp cc ch dn phc tp hn. Ch dn #elif cho


php s dng logic else-if. Ta c th din gii mt ch dn nh sau: Nu DEBUG th lm
cng vic 1, ngc li nu TEST th lm cng vic 2, nu sai tt c th lm trng hp 3:
....
#if DEBUG
// on code ny c bin dch nu DEBUG c nh ngha
#elif TEST
//on code ny c bin dch nu DEBUG khng c nh ngha
// v TEST c nh ngha
#else
//on code ny c bin dch nu c DEBUG v
//TEST khng c nh ngha.
#endif
....

Trong v d trn th ch th tin x l #if u tin s kim tra nh danh DEBUG, nu nh


danh DEBUG c nh ngha th on m ngun gia #if v #elif s c bin dch, v
tt c cc phn cn li cho n ch th #endif u khng c bin dch. Nu DEBUG khng
c nh ngha th #elif s kim tra nh danh TEST, on m gia #elif v #else s c
81
Nn Tng Ngn Ng C#

Ngn Ng Lp Trnh C#

thc thi khi TEST c nh ngha. Cui cng nu c hai DEBUG v TEST u khng c
nh ngha th cc on m ngun gia #else v #endif s c bin dch. Cu hi v tr

li
Cu hi 1: S khc nhau gia da trn thnh phn (Component-Based) v hng i tng
(Object- Oriented)?
Tr li 1: Pht trin da trn thnh phn c th c xem nh l m rng ca lp trnh
hng i tng. Mt thnh phn l mt khi m ngun ring c th thc hin mt nhim v
c bit. Lp trnh da trn thnh phn bao gm vic to nhiu cc thnh phn t hot ng
c th c dng li. Sau chng ta c th lin kt chng li xy dng cc ng dng.
Cu hi 2: Nhng ngn ng no khc c xem nh l hng i tng?
Tr li 2: Cc ngn ng nh l C++, Java, SmallTalk, Visual Basic.NET cng c th c
s dng cho lp trnh hng i tng. Cn rt nhiu nhng ngn ng khc nhng khng
c ph bin lm.
Cu hi 3: Ti sao trong kiu s khng nn khai bo kiu d liu ln thay v dng kiu d
liu nh hn?
Tr li 3: Mc d iu c th xem l kh hp l, nhng tht s khng hiu qu lm. Chng ta
khng nn s dng nhiu ti nguyn b nh hn mc cn thit. Khi va lng ph b nh
li va hn ch tc ca chng trnh.
Cu hi 4: Chuyn g xy ra nu ta gn gi tr m vo bin kiu khng du?
Tr li 4: Chng ta s nhn c li ca trnh bin dch ni rng khng th gn gi tr m
cho bin khng du trong trng hp ta gn gi tr hng m. Cn nu trong trng hp kt
qu l m c tnh trong biu thc khi chy chng trnh th chng ta s nhn c li d
liu. Vic kim tra v x l li d liu s c trnh by trong cc phn sau.
Cu hi 5: Nhng ngn ng no khc h tr Common Type System (CTS) trong Common
Language Runtime (CLR)?
Tr li 5: Microsoft Visual Basic (Version 7), Visual C++.NET cng h tr CTS. Thm vo
l mt s phin bn ca ngn ng khc cng c chuyn vo CTS. Bao gm Python,
COBOL, Perl, Java. Chng ta c th xem trn trang web ca Microsoft bit thm chi tit.
Cu hi 6: C phi cn nhng cu lnh iu khin khc?
Tr li 6: ng, cc cu lnh ny nh sau: throw, try, catch v finally. Chng ta s c hc
trong chng x l ngoi l.
Cu hi 7: C th s dng chui vi cu lnh switch?
Tr li 7: Hon ton c, chng ta s dng bin gi tr chui trong switch ri sau
dng gi tr chui trong cu lnh case. Lu l chui l nhng k t n gin nm gia hai
du ngoc nhy.

Cu hi thm
Cu hi 1: C bao nhiu cch khai bo comment trong ngn ng C#, cho bit chi tit?
82
Nn Tng Ngn Ng C#

Ngn Ng Lp Trnh C#

Cu hi 2: Nhng t theo sau t no l t kha trong C#: field, cast, as, object, throw,
football, do, get, set, basketball.
Cu hi 3: Nhng khi nim chnh ca ngn ng lp trnh hng i tng?
Cu hi 4: S khc nhau gia hai lnh Write v WriteLine?
Cu hi 5: C# chia lm my kiu d liu chnh? Nu ta to mt lp tn myClass th lp ny
c xp vo kiu d liu no?
Cu hi 6: Kiu chui trong C# l kiu d liu no?
Cu hi 7: D liu ca bin kiu d liu tham chiu c lu u trong b nh?
Cu hi 8: S khc nhau gia lp v cu trc trong C#? Khi no th dng cu trc tt hn l
dng class?
Cu hi 8: S khc nhau gia kiu unsigned v signed trong kiu s nguyn?
Cu hi 9: Kiu d liu no nh nht c th lu tr c gi tr 45?
Cu hi 10: S ln nht, v nh nht ca kiu int l s no?
Cu hi 11: C bao nhiu bit trong mt byte?
Cu hi 12: Kiu d liu no trong .NET tng ng vi kiu int trong C#?
Cu hi 13: Nhng t kha no lm thay i lung ca chng trnh?
Cu hi 14: Kt qu ca 15%4 l bao nhiu?
Cu hi 15: S khc nhau gia chuyn i tng minh v chuyn i ngm nh?
Cu hi 16: C th chuyn t mt gi tr long sang gi tr int hay khng?
Cu hi 17: S ln ti thiu cc lnh trong while c thc hin?
Cu hi 18: S ln ti thiu cc lnh trong do while c thc hin?
Cu hi 19: Lnh no dng thot ra khi vng lp?
Cu hi 20: Lnh no dng qua vng lp k tip?
Cu hi 21: Khi no dng bin v khi no dng hng?
Cu hi 22: Cho bit gi tr CanhCut trong kiu lit k sau:
enum LoaiChim
{
HaiAu,
BoiCa,
DaiBang = 50,
CanhCut
}

Cu hi 23: Cho bit cc lnh phn nhnh trong C#?

Bi tp
Bi tp 1: Nhp vo, bin dch v chy chng trnh. Hy cho bit chng trnh lm iu
g?
----------------------------------------------------------------------------83
Nn Tng Ngn Ng C#

Ngn Ng Lp Trnh C#

class BaiTap3_1
{
public static void Main()
{
int x = 0;
for(x = 1; x < 10; x++)
{
System.Console.Write({0:03}, x);
}
}
}

----------------------------------------------------------------------------Bi tp 2: Tm li ca chng trnh sau? sa li v bin dch chng trnh.


----------------------------------------------------------------------------class BaiTap3_2
{
public static void Main()
{
for(int i=0; i < 10 ; i++)
System.Console.WriteLine(so :{1}, i);
}
}

----------------------------------------------------------------------------Bi tp 3: Tm li ca chng trnh sau. Sa li v bin dch li chng trnh.


----------------------------------------------------------------------------using System;
class BaiTap3_3
{
public static void Main()
{
double myDouble;
decimal myDecimal;
myDouble = 3.14;
myDecimal = 3.14;
Console.WriteLine(My Double: {0}, myDouble);
Console.WriteLine(My Decimal: {0}, myDecimal);
}
}

84
Nn Tng Ngn Ng C#

Ngn Ng Lp Trnh C#

----------------------------------------------------------------------------Bi tp 4: Tm li ca chng trnh sau. Sa li v bin dch li chng trnh.


----------------------------------------------------------------------------class BaiTap3_4
{
static void Main()
{
int value;
if (value > 100);
System.Console.WriteLine(Number is greater than 100);
}
}

----------------------------------------------------------------------------Bi tp 5: Vit chng trnh hin th ra mn hnh 3 kiu sau:


*
**
***
****
*****
******
a)

$$$$$$
$$$$$
$$$$
$$$
$$
$
b)

*
***
*****
*******
*********
***********
c)

Bi tp 6: Vit chng trnh hin ra trn mn hnh.

85
Nn Tng Ngn Ng C#

Ngn Ng Lp Trnh C#

1
232
34543
4567654
567898765
67890109876
7890123210987
890123454321098
90123456765432109
0123456789876543210
Bi tp 7: Vit chng trnh in k t s (0..9) v k t ch (a..z) vi m k t tng ng ca
tng k t
V d:
0 : 48
1 : 49
....
Bi tp 8: Vit chng trnh gii phng trnh bc nht, cho php ngi dng nhp vo gi
tr a, b.
Bi tp 9: Vit chng trnh gii phng trnh bc hai, cho php ngi dng nhp vo gi tr
a, b, c.
Bi tp 10: Vit chng trnh tnh chu vi v din tch ca cc hnh sau: ng trn, hnh ch
nht, hnh thang, tam gic.

86
Nn Tng Ngn Ng C#

Ngn Ng Lp Trnh C#

Chng 4

XY DNG LP - I TNG
nh ngha lp

Thuc tnh truy cp

Tham s ca phng thc

To i tng

B khi dng

Khi to bin thnh vin

B khi dng sao chp

T kha this

S dng cc thnh vin static

Gi phng thc static

S dng b khi dng static

S dng b khi dng private

S dng thuc tnh static

Hy i tng

Truyn tham s

Np chng phng thc

ng gi d liu vi thnh phn thuc tnh

Thuc tnh ch c

Cu hi & bi tp

Chng 3 tho lun rt nhiu kiu d liu c bn ca ngn ng C#, nh int, long and
char. Tuy nhin tri tim v linh hn ca C# l kh nng to ra nhng kiu d liu mi, phc
87
Xy Dng Lp - i Tng

Ngn Ng Lp Trnh C#

tp. Ngi lp trnh to ra cc kiu d liu mi bng cch xy dng cc lp i tng v


cng chnh l cc vn chng ta cn tho lun trong chng ny.
y l kh nng to ra nhng kiu d liu mi, mt c tnh quan trng ca ngn
ng lp trnh hng i tng. Chng ta c th xy dng nhng kiu d liu mi trong ngn
ng C# bng cch khai bo v nh ngha nhng lp. Ngoi ra ta cng c th nh ngha cc
kiu d liu vi nhng giao din (interface) s c bn trong Chng 8 sau. Th hin ca
mt lp c gi l nhng i tng (object). Nhng i tng ny c to trong b nh
khi chng trnh c thc hin.
S khc nhau gia mt lp v mt i tng cng ging nh s khc nhau gia khi
nim gia loi mo v mt con mo Mun ang nm bn chn ca ta. Chng ta khng th
ng chm hay a gin vi khi nim mo nhng c th thc hin iu c vi mo
Mun, n l mt thc th sng ng, ch khng tru tng nh khi nim h loi mo.
Mt h mo m t nhng con mo c cc c tnh: c trng lng, c chiu cao, mu
mt, mu lng,...chng cng c hnh ng nh l n ng, leo tro,...mt con mo, v d nh
mo Mun chng hn, n cng c trng lng xc nh l 5 kg, chiu cao 15 cm, mu mt en,
lng en...N cng c nhng kh nng nh n ng leo tro,..
Li ch to ln ca nhng lp trong ngn ng lp trnh l kh nng ng gi cc thuc
tnh v tnh cht ca mt thc th trong mt khi n, t c ngha, t kh nng duy tr . V d
khi chng ta mun sp ni dung nhng th hin hay i tng ca lp iu khin ListBox trn
Windows, ch cn gi cc i tng ny th chng s t sp xp, cn vic chng lm ra sao
th ta khng quan tm, v cng ch cn bit by nhiu thi.
ng gi cng vi a hnh (polymorphism) v k tha (inheritance) l cc thuc tnh
chnh yu ca bt k mt ngn ng lp trnh hng i tng no.
Chng 4 ny s trnh by cc c tnh ca ngn ng lp trnh C# xy dng cc lp
i tng. Thnh phn ca mt lp, cc hnh vi v cc thuc tnh, c xem nh l thnh
vin ca lp (class member). Tip theo chng cng trnh ny khi nim v phng thc
(method) c dng nh ngha hnh vi ca mt lp, v trng thi ca cc bin thnh vin
hot ng trong mt lp. Mt c tnh mi m ngn ng C# a ra xy dng lp l khi
nim thuc tnh (property), thnh phn thuc tnh ny hot ng ging nh cch phng thc
to mt lp, nhng bn cht ca phng thc ny l to mt lp giao din cho bn ngoi
tng tc vi bin thnh vin mt cch gin tip, ta s bn su vn ny trong chng.

nh ngha lp
nh ngha mt kiu d liu mi hay mt lp u tin phi khai bo ri sau mi
nh ngha cc thuc tnh v phng thc ca kiu d liu . Khai bo mt lp bng cch s
dng t kho class. C php y ca khai bo mt lp nh sau:
[Thuc tnh] [B sung truy cp] class <nh danh lp> [: Lp c s]
{

88
Xy Dng Lp - i Tng

Ngn Ng Lp Trnh C#

<Phn thn ca lp: bao gm nh ngha cc thuc tnh v


phng thc hnh ng >
}

Thnh phn thuc tnh ca i tng s c trnh by chi tit trong chng sau, cn thnh
phn b sung truy cp cng s c trnh by tip ngay mc di. nh danh lp chnh l tn
ca lp do ngi xy dng chng trnh to ra. Lp c s l lp m i tng s k tha
pht trin ta s bn sau. Tt c cc thnh vin ca lp c nh ngha bn trong thn ca lp,
phn thn ny s c bao bc bi hai du ({}).
Ghi ch: Trong ngn ng C# phn kt thc ca lp khng c u chm phy ging nh
khai bo lp trong ngn ng C/C++. Tuy nhin nu ngi lp trnh thm vo th trnh bin
dch C# vn chp nhn m khng a ra cnh bo li.
Trong C#, mi chuyn u xy ra trong mt lp. Nh cc v d m chng ta tm hiu trong
chng 3, cc hm iu c a vo trong mt lp, k c hm u vo ca chng trnh
(hm Main()):
public class Tester
{
public static int Main()
{
//....
}
}

iu cn ni y l chng ta cha to bt c th hin no ca lp, tc l to i tng cho


lp Tester. iu g khc nhau gia mt lp v th hin ca lp? tr li cho cu hi ny
chng ta bt u xem xt s khc nhau gia kiu d liu int v mt bin kiu int . Ta c vit
nh sau:
int var1 = 10;

tuy nhin ta khng th vit c


int = 10;

Ta khng th gn gi tr cho mt kiu d liu, thay vo ta ch c gn d liu cho mt


i tng ca kiu d lu , trong trng hp trn i tng l bin var1.
Khi chng ta to mt lp mi, chnh l vic nh ngha cc thuc tnh v hnh vi ca tt c
cc i tng ca lp. Gi s chng ta ang lp trnh to cc iu khin trong cc ng
dng trn Windows, cc iu khin ny gip cho ngi dng tng tc tt vi Windows, nh
l ListBox, TextBox, ComboBox,...Mt trong nhng iu khin thng dng l ListBox, iu
khin ny cung cp mt danh sch lit k cc mc chn v cho php ngi dng chn cc
mc tin trong .
ListBox ny cng c cc thuc tnh khc nhau nhu: chiu cao, b dy, v tr, v mu sc th
hin v cc hnh vi ca chng nh: chng c th thm bi mc tin, sp xp,...
89
Xy Dng Lp - i Tng

Ngn Ng Lp Trnh C#

Ngn ng lp trnh hng i tng cho php chng ta to kiu d liu mi l lp ListBox,
lp ny bao bc cc thuc tnh cng nh kh nng nh: cc thuc tnh height, width,
location, color, cc phng thc hay hnh vi nh Add(), Remove(), Sort(),...
Chng ta khng th gn d liu cho kiu ListBox, thay vo u tin ta phi to mt i
tng cho lp :
ListBox myListBox;

Mt khi chng ta to mt th hin ca lp ListBox th ta c th gn d liu cho th hin .


Tuy nhin on lnh trn cha th to i tng trong b nh c, ta s bn tip. By gi ta
s tm hiu cch to mt lp v to cc th hin thng qua v d minh ha 4.1. V d ny to
mt lp c chc nng hiu th thi gian trong mt ngy. Lp ny c hnh vi th hin ngy,
thng, nm, gi, pht, giy hin hnh. lm c iu trn th lp ny c 6 thuc tnh hay
cn gi l bin thnh vin, cng vi mt phng thc nh sau:

 V d 4.1: To mt lp Thoigian n gin nh sau.


----------------------------------------------------------------------------using System;
public class ThoiGian
{
public void ThoiGianHienHanh()
{
Console.WriteLine(Hien thi thoi gian hien hanh);
}
// Cc bin thnh vin
int Nam;
int Thang;
int Ngay;
int Gio;
int Phut;
int Giay;

}
public class Tester
{
static void Main()
{
ThoiGian t = new ThoiGian();
t.ThoiGianHienHanh();
}
}

90
Xy Dng Lp - i Tng

Ngn Ng Lp Trnh C#

----------------------------------------------------------------------------Kt qu:
Hien thi thoi gian hien hanh

----------------------------------------------------------------------------Lp ThoiGian ch c mt phng thc chnh l hm ThoiGianHienHanh(), phn thn ca


phng thc ny c nh ngha bn trong ca lp ThoiGian. iu ny khc vi ngn ng
C++, C# khng i hi phi khai bo trc khi nh ngha mt phng thc, v cng khng
h tr vic khai bo phng thc trong mt tp tin v sau nh ngha mt tp tin khc.
C# khng c cc tp tin tiu , do vy tt c cc phng thc c nh ngha hon ton bn
trong ca lp. Phn cui ca nh ngha lp l phn khai bo cc bin thnh vin: Nam,
Thang, Ngay, Gio, Phut, va Giay.
Sau khi nh ngha xong lp ThoiGian, th tip theo l phn nh ngha lp Tester, lp ny c
cha mt hm kh thn thin vi chng ta l hm Main(). Bn trong hm Main c mt th
hin ca lp ThoiGian c to ra v gn gi tr cho i tng t. Bi v t l th hin ca i
tng ThoiGian, nn hm Main() c th s dng phng thc ca t:
t.ThoiGianHienHanh();

Thuc tnh truy cp


Thuc tnh truy cp quyt nh kh nng cc phng thc ca lp bao gm vic cc phng
thc ca lp khc c th nhn thy v s dng cc bin thnh vin hay nhng phng thc
bn trong lp. Bng 4.1 tm tt cc thuc tnh truy cp ca mt lp trong C#.
Thuc tnh
public

Gii hn truy cp
Khng hn ch. Nhng thnh vin c nh du
public c th c dng bi bt k cc phng thc ca
lp bao gm nhng lp khc.

protected

Thnh vin trong mt lp A c nh du l private


th ch c truy cp bi cc phng thc ca lp A.
Thnh vin trong lp A c nh du l protected
th ch c cc phng thc bn trong lp A v nhng
phng thc dn xut t lp A truy cp.

internal

Thnh vin trong lp A c nh du l internal th

private

protected internal

c truy cp bi nhng phng thc ca bt c lp


no trong cng khi hp ng vi A.
Thnh vin trong lp A c nh du l protected
internal c truy cp bi cc phng thc ca lp A,
cc phng thc ca lp dn xut ca A, v bt c lp
no trong cng khi hp ng ca A.
91

Xy Dng Lp - i Tng

Ngn Ng Lp Trnh C#

Bng 4.1: Thuc tnh truy cp.


Mong mun chung l thit k cc bin thnh vin ca lp thuc tnh private. Khi ch c
phng thc thnh vin ca lp truy cp c gi tr ca bin. C# xem thuc tnh private l
mc nh nn trong v d 4.1 ta khng khai bo thuc tnh truy cp cho 6 bin nn mc nh
chng l private:
// Cc bin thnh vin private
int Nam;
int Thang;
int Ngay;
int Gio;
int Phut;
int Giay;

Do lp Tester v phng thc thnh vin ThoiGianHienHanh ca lp ThoiGian c khai


bo l public nn bt k lp no cng c th truy cp c.
Ghi ch: Thi quen lp trnh tt l khai bo tng minh cc thuc tnh truy cp ca bin
thnh vin hay cc phng thc trong mt lp. Mc d chng ta bit chc chn rng cc
thnh vin ca lp l c khai bo private mc nh. Vic khai bo tng minh ny s lm
cho chng trnh d hiu, r rng v t nhin hn.

Tham s ca phng thc


Trong cc ngn ng lp trnh th tham s v i mc c xem l nh nhau, cng tng
t khi ang ni v ngn ng hng i tng th ta gi mt hm l mt phng thc hay
hnh vi. Tt c cc tn ny iu tng ng vi nhau.
Mt phng thc c th ly bt k s lng tham s no, Cc tham s ny theo sau bi
tn ca phng thc v c bao bc bn trong du ngoc trn (). Mi tham s phi khai bo
km vi kiu d liu. v d ta c mt khai bo nh ngha mt phng thc c tn l Method,
phng thc khng tr v gi tr no c (khai bo gi tr tr v l void), v c hai tham s l
mt kiu int v button:
void Method( int param1, button param2)
{
//...
}

Bn trong thn ca phng thc, cc tham s ny c xem nh nhng bin cc b, ging


nh l ta khai bo bin bn trong phng thc v khi to gi tr bng gi tr ca tham s
truyn vo. V d 4.2 minh ha vic truyn tham s vo mt phng thc, trong trng hp
ny th hai tham s ca kiu l int v float.

 V d 4.2: Truyn tham s cho phng thc.


----------------------------------------------------------------------------92
Xy Dng Lp - i Tng

Ngn Ng Lp Trnh C#

using System;
public class Class1
{
public void SomeMethod(int p1, float p2)
{
Console.WriteLine(Ham nhan duoc hai tham so: {0} va {1},
p1,p2);
}
}
public class Tester
{
static void Main()
{
int var1 = 5;
float var2 = 10.5f;
Class1 c = new Class1();
c.SomeMethod( var1, var2 );
}
}

----------------------------------------------------------------------------Kt qu:
Ham nhan duoc hai tham so: 5 va 10.5

----------------------------------------------------------------------------Phng thc SomeMethod s ly hai tham s int v float ri hin th chng ta mn hnh bng
vic dng hm Console.WriteLine(). Nhng tham s ny c tn l p1 v p2 c xem nh l
bin cc b bn trong ca phng thc.
Trong phng thc gi Main, c hai bin cc b c to ra l var1 v var2. Khi hai bin ny
c truyn cho phng thc SomeMethod th chng c nh x thnh hai tham s p1 v
p2 theo th t danh sch bin a vo.

To i tng
Trong Chng 3 c cp n s khc nhau gia kiu d liu gi tr v kiu d liu tham
chiu. Nhng kiu d liu chun ca C# nh int, char, float, l nhng kiu d liu gi tr,
v cc bin c to ra t cc kiu d liu ny c lu trn stack. Tuy nhin, vi cc i
tng kiu d liu tham chiu th c to ra trn heap, s dng t kha new to mt i
tng:
ThoiGian t = new ThoiGian();

93
Xy Dng Lp - i Tng

Ngn Ng Lp Trnh C#

t tht s khng cha gi tr ca i tng ThoiGian, n ch cha a ch ca i tng c


to ra trn heap, do vy t ch cha tham chiu n mt i tng m thi.

B khi dng
Th xem li v d minh ha 4.1, cu lnh to mt i tng cho lp ThoiGian tng t nh
vic gi thc hin mt phng thc:
ThoiGian t = new ThoiGian();

ng nh vy, mt phng thc s c gi thc hin khi chng ta to mt i tng.


Phng thc ny c gi l b khi dng (constructor). Cc phng thc ny c nh
ngha khi xy dng lp, nu ta khng to ra th CLR s thay mt chng ta m to phng thc
khi dng mt cch mc nh. Chc nng ca b khi dng l to ra i tng c xc nh
bi mt lp v t trng thi ny hp l. Trc khi b khi dng c thc hin th i tng
cha c cp pht trong b nh. Sau khi b khi dng thc hin hon thnh th b nh s
lu gi mt th hin hp l ca lp va khai bo.
Lp ThoiGian trong v d 4.1 khng nh ngha b khi dng. Do khng nh ngha nn trnh
bin dch s cung cp mt b khi dng cho chng ta. Phng thc khi dng mc nh c
to ra cho mt i tng s khng thc hin bt c hnh ng no, tc l bn trong thn ca
phng thc rng. Cc bin thnh vin c khi to cc gi tr tm thng nh thuc tnh
nguyn c gi tr l 0 v chui th khi to rng,..Bng 4.2 sau tm tt cc gi tr mc nh
c gn cho cc kiu d liu c bn.
Kiu d liu

Gi tr mc nh

int, long, byte,

bool

false

char

\0 (null)

enum

reference

null

Bng 4.2: Gi tr mc nh ca kiu d liu c bn.


Thng thng, khi mun nh ngha mt phng thc khi dng ring ta phi cung cp cc
tham s hm khi dng c th khi to cc gi tr khc ngoi gi tr mc nh cho cc i
tng. Quay li v d 4.1 gi s ta mun truyn thi gian hin hnh: nm, thng, ngy,
i tng c ngha hn.
nh ngha mt b khi dng ring ta phi khai bo mt phng thc c tn ging nh tn
lp khai bo. Phng thc khi dng khng c gi tr tr v v c khai bo l public.
Nu phng thc khi dng ny c truyn tham s th phi khai bo danh sch tham s
ging nh khai bo vi bt k phng thc no trong mt lp. V d 4.3 c vit li t v d
4.1 v thm mt b khi dng ring, phng phc khi dng ny s nhn mt tham s l mt
i tng kiu DateTime do C# cung cp.
94
Xy Dng Lp - i Tng

Ngn Ng Lp Trnh C#

 V d 4.3: nh ngha mt b khi dng.


----------------------------------------------------------------------------using System;
public class ThoiGian
{
public void ThoiGianHienHanh()
{
Console.WriteLine( Thoi gian hien hanh la : {0}/{1}/{2}
{3}:{4}:{5}, Ngay, Thang, Nam, Gio, Phut, Giay);
}
// Hm khi dng
public ThoiGian( System.DateTime dt )
{
Nam = dt.Year;
Thang = dt.Month;
Ngay = dt.Day;
Gio = dt.Hour;
Phut = dt.Minute;
Giay = dt.Second;
}
// Bin thnh vin private
int Nam;
int Thang;
int Ngay;
int Gio;
int Phut;
int Giay;
}
public class Tester
{
static void Main()
{
System.DateTime currentTime = System.DateTime.Now;
ThoiGian t = new ThoiGian( currentTime );
t.ThoiGianHienHanh();
}
}

----------------------------------------------------------------------------95
Xy Dng Lp - i Tng

Ngn Ng Lp Trnh C#

Kt qu:
Thoi gian hien hanh la: 5/6/2002

9:10:20

----------------------------------------------------------------------------Trong v d trn phng thc khi dng ly mt i tng DateTime v khi to tt c cc


bin thnh vin da trn gi tr ca i tng ny. Khi phng thc ny thc hin xong, mt
i tng ThoiGian c to ra v cc bin ca i tng cng c khi to. Hm
ThoiGianHienHanh c gi trong hm Main() s hin th gi tr thi gian lc i tng c
to ra.
Chng ta th b mt s lnh khi to trong phng thc khi dng v cho thc hin chng
trnh li th cc bin khng c khi to s c gi tr mc nh l 0, do l bin nguyn. Mt
bin thnh vin kiu nguyn s c thit lp gi tr l 0 nu chng ta khng gn n trong
phng thc khi dng. Ch rng kiu d liu gi tr khng th khng c khi to, nu ta
khng khi to th trnh bin dch s cung cp cc gi tr mc nh theo bng 4.2.
Ngoi ra trong chng trnh 4.3 trn c s dng i tng ca lp DateTime, lp DateTime
ny c cung cp bi th vin System, lp ny cng cung cp cc bin thnh vin public
nh: Year, Month, Day, Hour, Minute, v Second tng t nh lp ThoiGian ca chng ta.
Thm vo l lp ny c a ra mt phng thc thnh vin tnh tn l Now, phng thc
Now s tr v mt tham chiu n mt th hin ca mt i tng DateTime c khi to
vi thi gian hin hnh.
Theo nh trn khi lnh :
System.DataTime currentTime = System.DateTime.Now();

c thc hin th phng thc tnh Now() s to ra mt i tng DateTime trn b nh


heap v tr v mt tham chiu v tham chiu ny c gn cho bin i tng currentTime.
Sau khi i tng currentTime c to th cu lnh tip theo s thc hin vic truyn i
tng currentTime cho phng thc khi dng to mt i tng ThoiGian:
ThoiGian t = new ThoiGian( currentTime );

Bn trong phng thc khi dng ny tham s dt s tham chiu n i tng DateTime l
i tng va to m currentTime cng tham chiu. Ni cch khc lc ny tham s dt v
currentTime cng tham chiu n mt i tng DateTime trong b nh. Nh vy phng

thc khi dng ThoiGian c th truy cp c cc bin thnh vin public ca i tng
DateTime c to trong hm Main().
C mt s nhn mnh y l i tng DateTime c truyn cho b dng ThoiGian chnh
l i tng c to trong hm Main v l kiu d liu tham chiu. Do vy khi thc hin
truyn tham s l mt kiu d liu tham chiu th con tr c nh x qua ch hon ton
khng c mt i tng no c sao chp li.

96
Xy Dng Lp - i Tng

Ngn Ng Lp Trnh C#

Khi to bin thnh vin


Cc bin thnh vin c th c khi to trc tip khi khai bo trong qu trnh khi to, thay
v phi thc hin vic khi to cc bin trong b khi dng. thc hin vic khi to ny
rt n gin l vic s dng php gn gi tr cho mt bin:
private int Giay = 30;

// Khi to

Vic khi to bin thnh vin s rt c ngha, v khi xc nh gi tr khi to nh vy th


bin s khng nhn gi tr mc nh m trnh bin dch cung cp. Khi nu cc bin ny
khng c gn li trong cc phng thc khi dng th n s c gi tr m ta khi to. V
d 4.4 minh ha vic khi to bin thnh vin khi khai bo. Trong v d ny s c hai b
dng ngoi b dng mc nh m trnh bin dch cung cp, mt b dng thc hin vic gn
gi tr cho tt c cc bin thnh vin, cn b dng th hai th cng tng t nhng s khng
gn gi tr cho bin Giay.

 V d 4.4: Minh ho s dng khi to bin thnh vin.


----------------------------------------------------------------------------public class ThoiGian
{
public void ThoiGianHienHanh()
{
System.DateTime now = System.DateTime.Now;
System.Console.WriteLine(\n Hien tai: \t {0}/{1}/{2} {3}:{4}:{5},
now.Day, now.Month, now.Year, now.Hour, now.Minute, now.Second);
System.Console.WriteLine( Thoi Gian:\t {0}/{1}/{2} {3}:{4}:{5},
Ngay, Thang, Nam, Gio, Phut, Giay);
}
public ThoiGian( System.DateTime dt)
{
Nam = dt.Year;
Thang = dt.Month;
Ngay = dt.Day;
Gio = dt.Hour;
Phut = dt.Minute;
Giay = dt.Second;

// c gn cho bin thnh vin Giay

}
public ThoiGian(int Year, int Month, int Date, int Hour, int Minute)
{
Nam = Year;
Thang = Month;
Ngay = Date;
Xy Dng Lp - i Tng

97

Ngn Ng Lp Trnh C#

Gio = Hour;
Phut = Minute;
}
private
private
private
private
private

int
int
int
int
int

Nam;
Thang;
Ngay;
Gio;
Phut;

private int Giay = 30 ; // bin c khi to.

}
public class Tester
{
static void Main()
{
System.DateTime currentTime = System.DateTime.Now;
ThoiGian t1 = new ThoiGian( currentTime );
t1.ThoiGianHienHanh();
ThoiGian t2 = new ThoiGian(2001,7,3,10,5);
t2.ThoiGianHienHanh();
}
}

----------------------------------------------------------------------------Kt qu:
Hien tai:

5/6/2002

10:15:5

Thoi Gian:

5/6/2002

10:15:5

Hien tai:

5/6/2002

10:15:5

Thoi Gian:

3/7/2001

10:5:30

----------------------------------------------------------------------------Nu khng khi to gi tr ca bin thnh vin th b khi dng mc nh s khi to gi tr l


0 mc nh cho bin thnh vin c kiu nguyn. Tuy nhin, trong trng hp ny bin thnh
vin Giay c khi to gi tr 30:
Giay = 30;

// Khi to

Trong trng hp b khi to th hai khng truyn gi tr cho bin Giay nn bin ny vn ly
gi tr m ta khi to ban u l 30:
ThoiGian t2 = new ThoiGian(2001, 7, 3, 10, 5);
t2.ThoiGianHienHanh();

98
Xy Dng Lp - i Tng

Ngn Ng Lp Trnh C#

Ngc li, nu mt gi tr c gn cho bin Giay nh trong b khi to th nht th gi tr


mi ny s c chng ln gi tr khi to.
Trong v d trn ln u tin to i tng ThoiGian do ta truyn vo i tng DateTime
nn hm khi dng th nht c thc hin, hm ny s gn gi tr 5 cho bin Giay. Cn khi
to i tng ThoiGian th hai, hm khi dng th hai c thc hin, hm ny khng gn
gi tr cho bin Giay nn bin ny vn cn lu gi li gi tr 30 khi khi to ban u.

B khi dng sao chp


B khi dng sao chp thc hin vic to mt i tng mi bng cch sao chp tt c cc
bin t mt i tng c v cng mt kiu d liu. V d chng ta mun a mt i
tng ThoiGian vo b khi dng lp ThoiGian to mt i tng ThoiGian mi c cng
gi tr vi i tng ThoiGian c. Hai i tng ny hon ton khc nhau v ch ging nhau
gi tr bin thnh vin sao khi khi dng.
Ngn ng C# khng cung cp b khi dng sao chp, do chng ta phi t to ra. Vic sao
chp cc thnh phn t mt i tng ban u cho mt i tng mi nh sau:
public ThoiGian( ThoiGian tg)
{
Nam = tg.Nam;
Thang = tg.Thang;
Ngay = tg.Ngay;
Gio = tg.Gio;
Phut = tg.Phut;
Giay = tg.Giay;
}

Khi ta c th sao chp t mt i tng ThoiGian hin hu nh sau:


ThoiGian t2 = new ThoiGian( t1 );

Trong t1 l i tng ThoiGian tn ti, sau khi lnh trn thc hin xong th i tng
t2 c to ra nh bn sao ca i tng t1.

T kha this
T kha this c dng tham chiu n th hin hin hnh ca mt i tng. Tham
chiu this ny c xem l con tr n n tt cc phng thc khng c thuc tnh tnh trong
mt lp. Mi phng thc c th tham chiu n nhng phng thc khc v cc bin thnh
vin thng qua tham chiu this ny.
Tham chiu this ny c s dng thng xuyn theo ba cch:
S dng khi cc bin thnh vin b che lp bi tham s a vo, nh trng hp sau:
public void SetYear( int Nam)
{
this.Nam = Nam;

99
Xy Dng Lp - i Tng

Ngn Ng Lp Trnh C#

Nh trong on m trn phng thc SetYear s thit lp gi tr ca bin thnh vin Nam, tuy
nhin do tham s a vo c tn l Nam, trng vi bin thnh vin, nn ta phi dng tham
chiu this xc nh r cc bin thnh vin v tham s c truyn vo. Khi this.Nam
ch n bin thnh vin ca i tng, trong khi Nam ch n tham s.
S dng tham chiu this truyn i tng hin hnh vo mt tham s ca mt phng
thc ca i tng khc:
public void Method1( OtherClass otherObject )
{
// S dng tham chiu this truyn tham s l bn
// thn i tng ang thc hin.
otherObject.SetObject( this );
}

Nh trn cho thy khi cn truyn mt tham s l chnh bn thn ca i tng ang thc hin
th ta bt buc phi dng tham chiu this truyn.
Cc th ba s dng tham chiu this l mng ch mc (indexer), phn ny s c trnh
by chi tit trong chng 9.

S dng cc thnh vin tnh (static member)


Nhng thuc tnh v phng thc trong mt lp c th l nhng thnh vin th hin
(instance members) hay nhng thnh vin tnh (static members). Nhng thnh vin th hin
hay thnh vin ca i tng lin quan n th hin ca mt kiu d liu. Trong khi thnh
vin tnh c xem nh mt phn ca lp. Chng ta c th truy cp n thnh vin tnh ca
mt lp thng qua tn lp c khai bo. V d chng ta c mt lp tn l Button v c
hai th hin ca lp tn l btnUpdate v btnDelete. V gi s lp Button ny c mt phng
thc tnh l Show(). truy cp phng thc tnh ny ta vit :
Button.Show();

ng hn l vit:
btnUpdate.Show();

Ghi ch: Trong ngn ng C# khng cho php truy cp n cc phng thc tnh v cc
bin thnh vin tnh thng qua mt th hin, nu chng ta c lm iu th trnh bin dch
C# s bo li, iu ny khc vi ngn ng C++.
Trong mt s ngn ng th c s phn chia gia phng thc ca lp v cc phng thc
khc (ton cc) tn ti bn ngoi khng ph thuc bt c mt lp no. Tuy nhin, iu ny
khng cho php trong C#, ngn ng C# khng cho php to cc phng thc bn ngoi ca
lp, nhng ta c th to c cc phng thc ging nh vy bng cch to cc phng thc
tnh bn trong mt lp.

100
Xy Dng Lp - i Tng

You might also like