Professional Documents
Culture Documents
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
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
Bin v hng............................................................................................ 44
Gn gi tr xc nh cho bin................................................................... 45
Hng......................................................................................................... 46
Kiu lit k............................................................................................... 47
2
Ngn Ng Lp Trnh C#
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
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
Ngn Ng Lp Trnh C#
a hnh..................................................................................................... 133
Kiu a hnh............................................................................................. 133
Phng thc a hnh................................................................................ 133
T kha new v override......................................................................... 137
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
Ngn Ng Lp Trnh C#
B ch mc............................................................................................... 232
B ch mc v php gn........................................................................... 236
S dng kiu ch s khc......................................................................... 237
Ngn Ng Lp Trnh C#
S kin..................................................................................................... 324
C ch publishing- subscribing................................................................324
S kin v y quyn................................................................................. 325
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
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
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.
Ngn Ng Lp Trnh C#
Ngn Ng Lp Trnh C#
13
Microsoft .NET
Ngn Ng Lp Trnh C#
Ngn Ng Lp Trnh C#
15
Microsoft .NET
Ngn Ng Lp Trnh C#
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#
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 mnh m
C# l ngn ng t t kha
C# l ngn ng module ha
C# s l ngn ng ph bin
Cu hi & bi tp
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++.
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 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
C# s l mt ngn ng ph bin
20
Ngn Ng C#
Ngn Ng Lp Trnh C#
21
Ngn Ng C#
Ngn Ng Lp Trnh C#
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#
----------------------------------------------------------------------------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.
Ngn Ng Lp Trnh C#
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
Ngn Ng Lp Trnh C#
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 */.
----------------------------------------------------------------------------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,
Ngn Ng Lp Trnh C#
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.
----------------------------------------------------------------------------27
Ngn Ng C#
Ngn Ng Lp Trnh C#
Kt qu:
Chao Mung
Ngn Ng Lp Trnh C#
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()
{
.......
}
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>
30
Ngn Ng C#
Ngn Ng Lp Trnh C#
31
Ngn Ng C#
Ngn Ng Lp Trnh C#
Ngn Ng Lp Trnh C#
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
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#
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#
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));
}
}
Console.WriteLine(Xin chao);
Consoile.WriteLine(Tam biet);
}
}
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
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.
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
ulong
S nguyn khng du t 0 n
0xffffffffffffffff
Bng 3.1 : M t cc kiu d liu xy dng sn.
Uint64
41
Nn Tng Ngn Ng C#
Ngn Ng Lp Trnh C#
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
\n
u dng
Tab ngang
\r
\t
\v
Tab dc
Bng 3.2 : Cc kiu k t c bit.
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 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;
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.
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;
----------------------------------------------------------------------------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;
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.
// C
// C
----------------------------------------------------------------------------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
// C
46
Nn Tng Ngn Ng C#
Ngn Ng Lp Trnh C#
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;
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,
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
}
}
----------------------------------------------------------------------------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
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;
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#
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
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!);
Ngn Ng Lp Trnh C#
tng t nh:
int x=24;
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
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>]
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
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
55
Nn Tng Ngn Ng C#
Ngn Ng Lp Trnh C#
----------------------------------------------------------------------------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#
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#
----------------------------------------------------------------------------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
Kt qu thc hin
Ban chon mau do
Ban chon mau cam
mauVang
case mauVang
case mauLuc
mauLuc
case mauLuc
mauLam
case
case
case
case
mauCham
case mauCham
mauDo
mauCam
mauLam
mauCham
mauTim
mauLuc
case mauTim
case mauLuc
mauTim
case mauTim
case mauLuc
Ngn Ng Lp Trnh C#
----------------------------------------------------------------------------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:
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.
// 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
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.
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.
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>
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
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;
}
}
65
Nn Tng Ngn Ng C#
Ngn Ng Lp Trnh C#
----------------------------------------------------------------------------Kt qu:
1 2 3 4 5 6 7 8 9 10
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;
}
}
67
Nn Tng Ngn Ng C#
Ngn Ng Lp Trnh C#
----------------------------------------------------------------------------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...
----------------------------------------------------------------------------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
-----------------------------------------------------------------------------
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
-=
*=
/=
%=
Ngn Ng Lp Trnh C#
Luong += 200.000;
Luong *= 2;
Luong -= 100.000;
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
==
Khng bng
!=
value2 != 100
value2 != 90
Ln hn
>
Ln hn hay bng
Nh hn
>=
<
Kt qu so snh
true
false
false
true
true
false
value2 >= 50
true
false
true
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
&&
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
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))
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;
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
12
13
iu kin OR
iu kin
||
14
Php gn
= *= /= %= += -= <<= >>=
Tri
Tri
&&
Tri
Phi
?:
&=
Phi
^= |=
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>
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 >
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;
}
}
}
77
Nn Tng Ngn Ng C#
Ngn Ng Lp Trnh C#
}
}
78
Nn Tng Ngn Ng C#
Ngn Ng Lp Trnh C#
----------------------------------------------------------------------------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
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#
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
}
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);
}
}
}
84
Nn Tng Ngn Ng C#
Ngn Ng Lp Trnh C#
$$$$$$
$$$$$
$$$$
$$$
$$
$
b)
*
***
*****
*******
*********
***********
c)
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
To i tng
B khi dng
T kha this
Hy i tng
Truyn tham s
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#
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#
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()
{
//....
}
}
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;
}
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
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
internal
private
protected internal
Xy Dng Lp - i Tng
Ngn Ng Lp Trnh C#
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#
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();
Gi tr mc nh
bool
false
char
\0 (null)
enum
reference
null
Ngn Ng Lp Trnh C#
----------------------------------------------------------------------------95
Xy Dng Lp - i Tng
Ngn Ng Lp Trnh C#
Kt qu:
Thoi gian hien hanh la: 5/6/2002
9:10:20
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
}
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;
}
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
// 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#
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.
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