chuong1_c# voi kien truc dot_net.pdf

Upload: tam-phuong-nguyen

Post on 01-Mar-2016

27 views

Category:

Documents


0 download

TRANSCRIPT

  • Chng 1: C# v kin trc .NET Tng quan: Ti mun nhn mnh rng ng bao gi xem xt ngn ng C# mt cch tch bit, n lun ng hnh vi "B khung .NET". C# l mt trnh bin dch hng .NET, ngha l tt c cc m ca C# lun lun chy trn trn mi trng .NET Framework. iu dn n 2 h qu sau:

    l Cu trc v cc lp lun C# c phn nh cc phng php lun ca .NET ngm bn di.

    l Trong nhiu trng hp, cc c trng ca C# thm ch c quyt nh da vo cc c trng ca .NET, hoc th vin lp c s ca .NET.

    Chnh bi tm quan trng ca .NET, nn cc bn cn phi bit s qua v .NET trc khi i vo ngn ng C#. y cng chnh l mc ch ca chng ny.

    Chng ta s tm hiu xem chuyn g s xy ra khi m ca cc ngn ng hng .NET (bao gm C#) c bin dch v thc thi. y l mt lnh vc rng, chng ta s tm hiu k hn v Microsoft Intermediate Language (MS-IL), ngn ng trung gian trong .NET m ca cc ngn ng khc u phi c bin dch v ngn ng ny trc khi thc thi. C th chng ta s tm hiu xem cch thc m MS-IL vi phn dng chung Common Type System (CTS) v Common Language Specification (CLS) c th cung cp cho chng ta s tng hot gia cc ngn ng hng .NET. Chng ta cng s trnh by cc ngn ng bit .NET khc bao gm VB v C++.

    Sau chng ta s xem xt cc c trng khc ca .NET, bao gm cc assembly, cc namespace, v th vin lp c bn ca .NET. Chng ta s kt thc chng ny bng vic lit k vn tt v cc loi ng dng m chng ta c th to ra trong C#.

    Mi quan h gia C# v .NET C# l mt ngn ng lp trnh mi, v c bit n vi hai li cho:

    l N c thit k ring dng cho Microsoft's .NET Framework (Mt nn kh mnh cho s pht trin, trin khai, hin thc v phn phi cc ng dng)

    l N l mt ngn ng hon ton hng i tng c thit k da trn kinh nghim ca cc ngn ng hng i tng khc.

    Mt iu quan trng cn nh C# l mt ngn ng c lp. N c thit k c th sinh ra m ch trong mi trng .NET, n khng phi l mt phn ca .NET bi vy c mt vi c trng c h tr bi .NET nhng C# khng h tr v bn cng ng ngc nhin khi c nhng c trng C# h tr m .NET khng h tr (chng hn nh qu ti ton t)

    Previous Next

    Page 1 of 22Chapter 1

    16/8/2009file://C:\Documents and Settings\Hoang Son\Local Settings\Temp\~hhA670.htm

  • to c nhng ng dng mang tnh hiu qu cao, chng ta s xem qua v hot ng ca .NET

    Common Language Runtime Trung tm ca .NET framework l mi trng thi gian chy, gi l Common Language Runtime (CLR) hoc .NET runtime. M ca cc iu khin trong CLR thng l m c qun.

    Tuy nhiu, trc khi c thc thi bi CLR, m c pht trin trong C# (hoc cc ngn ng khc) cn phi c bin dch.Qu trnh bin dch trong .NET xy ra theo hai bc:

    1. Dch m ngun thnh Microsoft Intermediate Language (MS-IL)

    2. Dch IL thnh m nn c th bi CLR

    Mi nhn c v hi di dng. Nhng tht s, mt tin trnh dch hai mc l rt cn thit, bi v trng thi ca Microsoft Intermediate Language (m c qun) l cha kha cung cp nhiu li ch trong .NET.

    Cc li ch ca m c qun Microsoft Intermediate Language (thng c vit tt l"Intermediate Language", hay "IL") tng t nh tng v m Java byte, n l mt ngn ng cp thp vi nhng c php n gin (da trn c s m s hn l text), chnh iu ny s lm cho qu trnh dch sang m my nhanh hn. Hiu k cc c php ny s mang li nhng li ch ng k.

    c lp nn

    Trc tin, n c ngha l cc file cha m lnh c th chy trn bt k nn no, vo thi gian chy trnh bin dch cui s hot ng v m c th chy trn mt nn c th. Ni cch khc vic dch m ngun sang Intermediate Language cho php c lp nn trong .NET, n ging nh cch dch m ngun sang Java byte code cung cp s c lp nn trong Java.

    Bn cng nn bit rng s c lp nn ca .NET ch l trn l thuyt bi v ti thi im ny, .NET ch c sn trong Windows. Tuy nhin vic chuyn .NET sang nhng nn khc ang c kho st t m (xem v d Mono project, mt s c gng to mt thc thi m ngun m trong .NET, ti a ch http://www.go-mono.com/).

    S ci tin trong thc thi

    Mc d chng ta so snh vi Jave, IL tht s c mt cht kh quan hn Java. IL lun l trnh bin dch Just-In-Time, ngc li Java byte code th thng l thng dch. Mt trong nhng bt li ca Java l vo lc thc thi qu trnh dch t java byte code sang m my tn nhiu ti nguyn.

    Thay v phi dch ton b ng dng mt ln, trnh bin dch JIT s bin dch tng phn m khi n c gi. Khi m c dch ri, m kt qu s c gi li cho ti khi thot khi ng dng, chnh v th n khng phi bin dch li trong ln chy k tip. Microsoft qu quyt rng cch x l ny c hiu lc cao hn l dch ton b ng dng, bi v c trng hp mt khi lng ln m ca ng dng khng bao gi c s dng trong thi gian chy. Khi s dng trnh bin dch JIT , cc on m ny s khng bao gi

    Previous Next Previous Next

    Page 2 of 22Chapter 1

    16/8/2009file://C:\Documents and Settings\Hoang Son\Local Settings\Temp\~hhA670.htm

  • c dch.

    Chnh v th chng ta hi vng rng m IL s thc thi nhanh nh l m my. Microsof cam kt chng ta s c mt thay i ln trong thc thi. Li l gii l, l ln dch cui cng trong thi gian chy, trnh bin dch JIT s bit chnh xc loi vi x l m chng trnh s chy. C ngha l n c th ti u m thi hnh cui cng bng cch tham chiu n cc c trng ca tng cc b lnh ng vi cc loi vi x l .

    Cc trnh bin dch truyn thng u c ti u m, nhng chng ch c th ti u c lp khng quan tm n loi vi x l m chng trnh s chy. Bi v trnh bin dch truyn thng bin dch ton b ng dng sang m my trc khi thc thi. C ngha l trnh bin dch khng h bit loi vi x l m chng trnh s c chy, chng hn n c th l mt vi x l tng thch x86 hoc mt vi x l Alpha. Visual Studio 6, ti u cho cho mt my tng thch Pentium, bi vy m m n sinh ra khng em li li ch g i vi cc c trng phn cng ca vi x l Pentium III. Trong khi , trnh bin dch JIT c th thc hin ti u ging nh Visual Studio 6, ngoi ra n cn c th ti u cho cc loi vi x l c th m m chng trnh s chy.

    Tng hot gia cc ngn ng

    Chng ta bit cch thc IL cho php c lp nn, trnh bin dch JIT c th ci thin qu trnh thc thi. Tuy nhin, IL cng lm cho tng hot gia cc ngn ng tr nn d dng hn. Bn c th bin dch IL t mt ngn, v m ny sau c th tng hot vi IL c bin dch bi mt ngn ng khc.

    By gi chc bn ang t hi rng nhng ngn ng no c th tng tc vi C# trong .NET, hy xem qua cc ngn ng bit .NET ph bin sau.

    VB.NET

    Visual Basic c tn trang li c th tng thch vi cng ngh .NET. T vic pht trin Visual Basic trong nhng nm gn y cho thy rng trong cc phin bn trc, Visual Basic 6, n khng tng thch vi lp trnh .NET. V d, n t nng vn tch hp COM, v n ch a ra cc s kin pht trin, hu ht m nn khng c sn trong m ngun. Khng nhng th, n khng thc s h tr tnh tha k v cc kiu d liu chun ca Visual Basic khng tng thch vi .NET.

    Visual Basic ang c hon thin trong Visual Basic .NET, cng ng ngc nhin khi s thay i ny xy ra trn mt din rng. V phng din thc hnh bn c th xem VB.NET nh l mt ngn ng mi. M VB 6 khng khng th c bin dch trong nh m VB.NET. S chuyn i t lp trnh VB 6 sang VB.NET yu cu mt s thay i ln v m. Tuy nhin hu ht cc s thay i ny c th c thc hin mt cch t ng bi Visual Studio .NET (s ci tin ca VS cho vic s dng .NET). Nu bn c gng c mt n VB 6 trong Visual Studio .NET, n s ci tin n ca bn, c ngha l n s vit li m ngun VB 6 thnh m ngun VB.NET. iu c ngha l vic ny s gp rc ri khi bn ct ngang, bn s phi kim tra li m VB.NET mi chc rng n ca bn vn chy ng.

    Mt hiu ng ph l khng cn kh nng bin dch .NET sang m thc thi. VB.NET ch bin dch sang IL, ging nh C#. Nu nh bn mun tip tc m ha trong VB 6, bn c th lm nh vy, nhng khi m thc thi qu di n s l i .NET Framework, v bn cn phi gi li Visual Studio 6 ci ng thi phi hon ton tin vo mi trng pht trin trong Visual Studio.

    Managed C++

    Vo lc trong Visual C++ 6, C++ c mt khi lng ln cc m rng ca Microsoft trong Windows. Vi Visual C++ .NET, cc m rng ny c tng thm cho vic h tr .NET framework. C

    Page 3 of 22Chapter 1

    16/8/2009file://C:\Documents and Settings\Hoang Son\Local Settings\Temp\~hhA670.htm

  • ngha l m ngun C++ s vn tip tc c dch sang m my khng c g khc bit. Cng c ngha l n s chy c lp trong mi trng .NET. Nu bn khng mun m C++ ca bn chy trong mi trng .NET Framework, bn c th n gin t dng lnh sau vo u m ngun ca bn:

    #using

    Bn cng c th b qua c /clr trong trnh bin dch, c ny cho bit rng bn mun bin dch sang m c qun, v n s pht ra IL thay v m my. C mt iu th v trong C++ khi bn bin dch sang m c qun, trnh bin dch c th pht ra cc IL c nhng cc m my. iu ny c ngha l bn c th pha trn kiu c qun v kiu khng qun trong m C++. Bng cch m C++:

    class MyClass {

    nh ngha cho mt lp trong C++ , trong khi m:

    __gc class MyClass {

    s cho bn mt lp c qun, ging nh vic bn vit mt lp trong C# hay VB.NET. Tht vy, mt thun li ca managed C++ so vi C# l bn c th gi cc lp khng qun C++ t m c qun C++ b qua tng thch COM.

    Trnh bin dch s pht ra mt li nu bn c gng dng nhng c trng m m c qun ca .NET khng h tr trong (v d, khun mu hay a tha k). Bn cng s nhn ra rng bn s phi dng cc c trng khng thun C++ (chng hn t kho __gc trong v d trn) khi s dng cc lp c qun.

    Bi v trong VC++ cho php gii phng b nh th cng di dng mt con tr, trnh bin dch C++ khng th pht ra m cho kiu b nh an ton CLR. Nu ng dng ca bn tht s cn phi nhn dng kiu b nh an ton CLR, bn cn phi vit m ngun trong cc ngn ng khc (nh C# hay VB.NET).

    J++ and J#

    J++ vn c h tr cho ch v mc ch tng thch trc y. Microsoft khng cn pht trin bt k nn tng no h tr vic bin dch sang my Java o. Thay v , Microsoft pht trin hai cng ngh tch bit Java/J++ pht trin bn di ngn c JUMP (Java User Migration Path) v "JUMP trong .NET".

    Cng ngh u tin l Visual J#. V bn cht n c thm vo Visual Studio.NET cho php bn vit v bin dch m J++. S khc bit l thay v bin dch sang mt Java Virtual Machine, J# s bin dch sang IL, v vy n s hot ng nh l mt ngn ng ca .NET. Ngi dng J# s c th c hng cc thun li ca cc c tnh ca VS.NET. Microsoft tin rng ngi dng J++ s nhanh chng nhn ra iu nu h thch lm vic trong vi .NET.

    S la chn th hai l cng c t ng h tr vic chuyn m J++ sang m C#. S ging nhau gia J++ v C# lm cho vic chuyn i ny tr nn d dng hn.

    Khng ging nh J# cng khng nh cc cng c chuyn i ngn ng c sn nh l mt phn ca .NET hay trong Visual Studio. NET, thay v th n c cung cp ring. bit thm thng tin lin h http://msdn.microsoft.com/visualj/.

    Scripting languages

    Page 4 of 22Chapter 1

    16/8/2009file://C:\Documents and Settings\Hoang Son\Local Settings\Temp\~hhA670.htm

  • Scripting languages u vn cn tn ti, d rng v mt tng qut, tm quan trng ca chng gim st cng vi s ra i ca .NET. JScript, c ci tin ln JScript.NET. ASP.NET (mt ci tin t ASP dnh cho .NET, gii thch sau) cc trang c th c vit bng JScript.NET, v by gi n c th chy trn JScript.NET nh l mt ngn ng bin dch hn l mt ngn ng thng dch v n c th to ra cc m kiu m JScript.NET mnh hn. Vi ASP.NET khng c l do g dng scripting languages trn cac trang web server-side. VBA vn c s dng nh l mt ngn ng cho Microsoft Office v Visual Studio macros.

    COM and COM+

    COM v COM+ khng l cng ngh chnh ca .NET, bi v cc thnh phn c bn ca chng khng th dch sang IL (mc d vn c th lm iu khi t chc thnh phn COM bng m C++). Tuy nhin COM+ vn cn l mt cng c quan trng, t khi c tnh ca n c nhn ln trong .NET. Ngoi ra, thnh phn COM vn cn lm vic v .NET kt hp chc ch cc c trng tng hot COM m c qun c th gi n COM v ngc li (s c bn thm chng 17).

    Assemblies Mt assembly l mt n v lun l cha m c bin dch sang .NET. Chng ta s bn k v cc assemblie trong chng 8, y chng ta s ni s v n.

    Mt assembly l mt t m t y , v n ging mt n v lun l hn l mt n v vt l, iu c ngha l n c th cha trong nhiu file (tht vy cc assemblie ng c lu trong b nh khng phi trong file). Nu mt assembly c lu trong nhiu file, th s c mt file chnh cha cc con tr v cc m t v cc file khc ca assembly.

    Ch rng, cu trc assembly c dng chung cho c m thi hnh v m th vin. S khc bit duy nht l assembly thi hnh cha li vo chng trnh chnh trong khi assembly th vin th khng c.

    Mt im quan trng trong cc assembly l chng cha metadata dng m t cc kiu v phng thc c nh ngha trong m tng ng. Mt assembly, tt nhin cng ch assembly metadata dng m t chnh assembly . Assembly metadata ny, cha mt vng c hiu nh l manifest, cho php kim tra phin bn v tnh trng ca assembly.

    ildasm, mt tin ch c sn ca Windows, c th dng nghin cu ni dung ca mt assembly, bao gm manifest metadata. Chng ta s ly vi d v ildasm trong chng 8.

    Tht vy mt assembly cha metadata ca chng trnh ngha l cc ng dng hoc cc assembly khc c th gi m trong mt assembly m khng cn tham chiu n Registry, hoc mt d liu ngun khc,. Mt im quan trng trong cch lm ca COM c, cc GUID ca cc thnh phn v giao din interfaces khng th t c t Registry.

    Vic dn tri d liu thnh 3 nh v khc nhau ng ngha vi vic to ra mi nguy him trong ng b ho, n ngn khng cho cc thnh phn khc s dng. Vi assemblies, s khng cn nhng mi nguy him nh vy, bi v tt cc cc metadata c lu trong b lnh thi hnh ca chng trnh. Ch rng d cho cc assemblie c lu thnh mt vi file, chng vn khng gy vn g v ng b ho d liu. l v nh vo file assembly chnh, file ny cha ng dn, cc thng tin chi tit, m bm, v ni

    Previous Next

    Page 5 of 22Chapter 1

    16/8/2009file://C:\Documents and Settings\Hoang Son\Local Settings\Temp\~hhA670.htm

  • dung ca cc file khc, iu c ngha l nu mt file b thay th, hay b ph hoi, n s c tm ra v s khng cho load.

    Assemblies bao gm 2 loi: cc shared v private assembly.

    Private Assemblies Private assemblies l kiu n gin nht. N cha phn mm v ch c dng cho phn mm . Vi phn m t ny bn c th cha ng cc private assemblie hng cung cp cho mt ng dng kiu thc thi v mt s th vin, cc th vin ny cha m s c thi hnh bi ng dng .

    H thng m bo rng private assemblies s khng c dng bi phn mm khc, bi v mt ng dng ch c th load private assemblies trong cng folder vi chng trnh chnh hoc l trong mt th mc con ca n.

    Chng ta khng th tin cy rng tt c cc phn mm lun c ci t trong th mc ca n, ngha l s khng bao gi c chuyn mt gi phn mm ghi , sa cha hoc v tnh load mt private assemblies dnh rin cho mt gi khc. Vy lm sao cc Private assemblie ch c dng bi gi phn mm m n m t? Cn c mt c ch bo v, sao cho khi mt sn phm thng mi khc ci ln mt phin bn assembly mi (cha k n cc chng trnh c thit k ph hoi), th s khng c chuyn tranh chp tn. Nu c s trng tn trong cc assembly, u khng quan trng v cc ng dng ch c th nhn thy mt b cc assembly.

    Bi v mt private assembly l mt t nh ngha trn vn, tin trnh x l cc k n gin. Bn n gin thay th cc file thch hp vo th mc thhc hp trong file h thng (Khng cn phi ng k trong registry). Tin trnh ny c gi l zero impact (xcopy) installation.

    Shared Assemblies Shared assemblies c dnh cho ccc th vin cng cng c th dng cho bt k ng dng no. Bi v bt k ng dng no cng c th truy xut mt shared assembly, cn phi c cc c ch bo v cc ri ro sau:

    l Tranh chp tn, khi mt cng ty to ra cc shared assembly trng tn vi cc shared assembly sn c ca bn. V mt l thuyt m ca bn c th truy xut vo c hai assembly ny song y c th l mt vn phc tp.

    l Li ca mt assembly c th b ghi bi mt phin bn khc ca cng same assembly - mt phin bn mi khng tng thch vi nhng g sn c.

    Gii php cho nhng vn trn l t cc shared assembly trong mt cy th mc t bit ca h thng, c th xem nh l assembly cache ton cc. Khng ging nh cc private assembly, n khng n gin l copy assembly sang mt th mc thch hp - n cn c ci t r rng vo cache. Tin trnh ny c th c thc thi bi mt s tin ch ca .NET, bao gm lun qu trnh kim tra trn assembly, tng t nh ci t mt th mc trong assembly cache m bo tnh ton vn ca assembly.

    trnh tranh chp tn, shared assemblies a ra mt c qun l da trn mt kha mt m chnh. Tn ny c gi l strong name, c bo m v tnh c nht, v phi c trch dn bi ng dng mun tham chiu n mt shared assembly.

    Page 6 of 22Chapter 1

    16/8/2009file://C:\Documents and Settings\Hoang Son\Local Settings\Temp\~hhA670.htm

  • Vn v tng thch vi li do ghi mt assembly c nh a ch theo thng tn phin bn trong assembly manifest, v cho php ci t song song.

    Reflection T khi cc assembly c lu di dng metadata, bao gm chi tit v tt c cc kiu v thnh vin ca nhng kiu ny, th n c th c truy xut c cc metadata programmatically. bit chi tit hn, xin hy xem reflection - m qu c th xem xt cc m qun khc, hoc xem xt chnh n, nhn ra cc thng tin v m. Bn c th dng cc attribute, c th s dng phng thc trong lc chy iu ny tt hn l trong lc bin dch.

    Tm hiu v Intermediate Language Nh chng ta bit, Intermediate Language hot ng nh l bn cht ca .NET Framework. L lp trnh vin C#, chng ta nn bit rng m C# s lun c dch sang Intermediate Language trc khi n c thc thi (tht vy, trnh bin dch C# ch dch sang m c qun). Chng ta hy cng khm ph cc tnh nng chnh ca IL, bt k ngn ng no hng .NET cng s h tr cc c tnh chnh ca IL.

    Sau y l nhng c tnh chnh ca Intermediate Language:

    l Hng i tng v dng interfaces

    l S tch bit gia kiu gi tr v kiu tham chiu

    l nh kiu mnh

    l Qun li thng qua cc ngoi l

    l S dng cc thuc tnh

    By gi chng ta s cng khm ph cc c tnh trn.

    H tr hng i tng v dng giao din Ngn ng c lp nn ca .NET c mt vi gii hn ring. C th trong lc thc thi IL chc chn s thc thi mt cch thc lp trnh ring, v cc ngn ng khc phi ch n vic tng thch vi cch thc lp trnh ny. IL c Microsoft pht trin nh l mt ngn ng hng i tng c in h tr y tha k n gia cc lp.

    Bn cnh lp trnh hng i tng n, Intermediate Language cn nu ra tng v interfaces (giao din), ci c tch hp trong Windows vi giao din COM. .NET n khng ging nh giao din COM; chng khng cn phi h tr bt k mt kin trc COM no (v d, chng khng xut pht t IUnknown, v chng cng khng lin quan g n cc GUID). Tuy nhin chng c th dng chung cc giao din COM.

    Page 7 of 22Chapter 1

    16/8/2009file://C:\Documents and Settings\Hoang Son\Local Settings\Temp\~hhA670.htm

  • Hng i tng v thc thi cho ngn ng

    By chng ta s tm hiu v hot ng ca .NET ngha l hot ng bin dch sang m Intermediate Language, iu ni ln rng bn cn phi lp trnh theo cch thc hng i tng truyn thng. Khng nhng th chng cn cung cp cho chng ta kh nng chuyn giao ngn ng. Sau cng, C++ v Java c hai u dng nhng bin th ca hng i tng, d vy chng vn cn c quan tm c th thc thi cho. Chng ta cn tm hiu mt cht v thc thi cho ngn ng.

    Trc tin chng ta cn hiu chnh xc thc thi ngn ng cho l g. Sau cng, COM cho php cc thnh phn c vit bi cc ngn ng khc nhau c th thc thi cho. COM, l mt nh phn chun, cho php cc thnh phn c th hiu nhau v c th gi cc phng thc cng nh thuc tnh ln nhau m khng cn quan tm n ngn ng to ra chng. lm c iu mi i tng phi c kh nng giao tip vi thi gian chy ca COM, v phi c kh nng truy cp thng qua mt giao din. Cc thnh phn ch c th giao tip vi nhau trong thi gian chy COM. D rng cc thnh phn ca COM c th giao tip vi nhau bt chp ngn ng to ra chng, tuy nhin COM khng h tr hot ng tha k, chnh v th n nh mt cc thun li ca lp trnh hng i tng.

    Mt vn xy ra khi by li l cc thnh thnh phn phi c by li trong ngn ng to chng, v bn khng th by li tng bc trn cc ngn ng khc nhau. Vy thc thi cho ngn ng c hiu nh l cc lp c to ra trong mt ngn ng c th giao tip ln nhau vi cc lp c to ra trong cc ngn ng khc. C th l:

    l Mt lp c to ra trong mt ngn ng c th tha k t mt lp c vit trong mt ngn ng khc.

    l Mt lp c th cha th hin ca mt lp khc khng quan tm n ngn ng to ra hai lp .

    l Mt i tng c th gi trc tip phng thc ca mt i tng khc c vit bi mt ngn ng khc.

    l Cc i tng (hoc cc tham chiu n cc i tng) c th c truyn qua li gia cc hm

    l Bn c kh nng by li tng bc chng trnh ngun gia cc ngn khc nhau

    Tht bt ng v nhng g m .NET v thc thi ngn ng cho lm c. Tin ch by li tng c gii thiu nh l kh nng ca Visual Studio .NET IDE hn l CLR.

    S khc bit gia kiu d liu gi tr v kiu d liu tham chiu

    Nh bt k ngn ng lp trnh no, IL cung cp mt s tin nh ngha v cc kiu d liu nguyn thy. Mt c trng ca Intermediate Language l phn bit rch ri gia kiu d liu gi tr v kiu d liu tham chiu. Kiu gi tr l cc bin c dng lu trc tip gi tr, trong khi kiu tham chiu l cc bin cha a ch ca d liu.

    Trong C++, kiu tham chiu c th coi nh l mt con tr, trong khi Visual Basic, kiu tham chiu c th coi l cc i tng, trong VB 6 lun truy cp thng qua tham chiu. Intermediate Language cng ch r v cch thc lu tr d liu: v nh mt kiu tham chiu lun c lu trong vng managed heap ca b nh, trong khi kiu gi tr li c lu trong stack (tuy nhin nu kiu d liu c khai bo l mt trng ca kiu tham chiu, chng vn c lu heap). Chng ta s bn v stack v heap trong chng 3.

    Page 8 of 22Chapter 1

    16/8/2009file://C:\Documents and Settings\Hoang Son\Local Settings\Temp\~hhA670.htm

  • nh kiu mnh

    Mt im mnh trong IL l nh kiu mnh. Ngha l tt c cc biu u c nh du r rng v chuyn bit v kiu d liu (IL khng cn h tr kiu Variant cho Visual Basic v ngn ng kch bn). C th l IL khng cho php cc hot ng tr v cc kiu d liu khng r rng.

    Trong trng hp l ngi pht trin VB c l bn s rt lo lng v kiu, bi v khi dng kiu d liu Variant VB t ng p kiu gip bn. Cn l ngi pht trin C++, c l bn s dng cc casting pointer gia cc kiu. Lp trnh theo cch ny c th l mt lp trnh mnh, tuy nhin n ph v tnh an ton kiu. T by gi, n ch cn h tr trong nhng trng hp c bit trong mt s ngn ng c kh nng bin dch sang m c qun. Tht vy, cc con tr (khng phi l tham chiu) ch cn cho php trong cc khi m c bit trong C#, trong VB khng c (mc d n cho php trong C++). Nu dng con tr trong m ngun n s khng chuyn thnh m c qun v s khng c kim tra bi CLR.

    Bn cng nn bit rng trong mt s ngn ng bit .NET, chng hn nh VB.NET, vn cho php m h kiu, tuy nhin ch c th lm c nh th lm c nh vy th trnh bin dch xc nh kiu bo v kiu trc khi pht ra IL.

    Mc d, kiu bo v lc u c th sinh ra nhiu cn tr trong lp trnh nhng trong nhiu trng hp kiu bo v s mang li nhiu li ch to ln trong cc dch v c cung cp bi .NET. Chng hn cc dch v sau:

    l Language Interoperability

    l Garbage Collection

    l Security

    l Application Domains

    Hy tm hiu xem ti sao kiu d liu mnh li l mt trong nhng c tnh quan trng ca .NET.

    Tm quan trng ca Strong Data Typing i vi Language Interoperability

    Mt kha cnh quan trong ca strong data typing l nu mt lp xut thn hoc cha mt lp khc th n cn phi bit tt c cc kiu dng trong cc lp . Tht vy, n tng cc chng ngi ln trong vic thc thi ngn ng cho cc h thng khng h tr trc y. Thng tin ny khng c sn trong cc file thi hnh v DLL chun.

    Gi s rng mt phng thc trong VB.NET c nh ngha l s tr v mt Integer, mt trong nhng kiu d liu chun ca VB.NET. C# khng c kiu d liu c tn nh vy. Chng ta ch c th dng phng thc ny tr v mt kiu ca C# nt trnh bin dch bit cch nh x kiu VB.NET's Integer n mt trong nhng kiu c nh ngha trong C#. Vy .NET lm vic nh th no?

    Common Type System (CTS)

    Vn v kiu d liu ny c .NET gii quyt bng cch dng Common Type System (CTS). CTS nh ngha cc kiu d liu tin nh v c sn trong IL, v th tt cc cc ngn ng hng .NET framework s sinh ra m cui trn c s cc kiu d liu ny.

    Page 9 of 22Chapter 1

    16/8/2009file://C:\Documents and Settings\Hoang Son\Local Settings\Temp\~hhA670.htm

  • Trong v d trn, VB.NET's Integer thc t l mt 32-bit signed integer, c nh x t kiu Int32 trong IL. N phi c bin dch thnh m IL. Bi v trnh bin dch C# cng bit kiu d liu ny nn khng c vn g c. cp m ngun, C# gi Int32 l int, v vy khi bin dch hm VB.NET n gin tr v mt kiu int.

    CTS khng ch n thun l cc kiu d liu n gin, doesn't merely specify primitive data types, m n cn cho php chng ta t nh ngha kiu ca ring mnh.

    Cc kiu c trnh by trong bng di y:

    Chng ta khng th lit k tt c cc kiu gi tr y, bi v chng s c bn k trong chng 2. Trong C#, mi kiu c sn c nhn dng bi trnh bin dch nh x n mt kiu IL ci sn. iu ny cng ng cho c VB.NET.

    Common Language Specification (CLS)

    Common Language Specification hot ng cng vi Common Type System bo m thc thi ngn ng cho. CLS l mt b con chun m tt c cc trnh bin dch hng .NET u phi h tr. u c ngha l cc trnh bin dch u s h tr tt c nhng g c nh ngha trong CLS.

    Ch : Cc bn c th vit cc m non-CLS, tuy nhin nhng m ny khng m bo vic thc thi ngn ng cho.

    IL l mt ngn ng phn bit loi k t. Nhng nh pht trin khi lm vic vi cc ngn ng phn bit loi k t c kh nng to nn s mm do khi t tn bin. VB.NET, li khng phi l ngn ng phn bit loi k t. CLS x l vic ny bng cc ra hiu cho CLS rng m khng cho php hai tn ch khc

    Kiu Gii thch Type Kiu c bn dng m t cc kiu khc Value Type Kiu c bn dng m t cc kiu gi tr. Reference Types Kiu c bn dng mt t cc kiu tham tr. Built-in Value Types Bao gm cc kiu gi tr nguyn thy chun, nh cc kiu s, kiu

    lun l, kiu k t. Enumerations B cc gi tr lit kSets of enumerated values. User-defined Value Types Kiu c nh ngha trong m ngun nh l mt kiu gi tr. Trong

    C# n c l struct. Interface Types Cc giao din. Pointer Types Cc con tr. Self-describing Types Kiu d liu c qun. Arrays Cc kiu cha mng cc i tng. Class Types Cc kiu t m t nhng khng phi l mng. Delegates Kiu c thit k tham chiu n cc phng thc. User-defined Reference Types Kiu c nh ngha trong m ngun v c lu nh l kiu tham

    chiu. Trong C#, n c ngha l mt lp. Boxed Value Types Mt kiu gi tr c bc thnh mt kiu tham chiu v th n c th

    c lu trong heap.

    Page 10 of 22Chapter 1

    16/8/2009file://C:\Documents and Settings\Hoang Son\Local Settings\Temp\~hhA670.htm

  • nhau v mt loi k t. Bi vy, m VB.NET c th hot ng trong CLS.

    CLS hot ng theo hai nh hng. Trc tin n l mt trnh bin dch ring khng h tr y cc c trng ca .NET iu ny khuyn khch s pht trin ca cc ngn bit .NET khc. Th hai, n bo m rng nu bn hn ch cc lp ca bn trong nhng c tnh ca CLS, th n bo m rng cc m dng trong nhng ngn ng khc c th dng cc lp ny.

    Nt p ca tng ny l vic gii hn trong nhng c tnh ca CLS ch nn p dng cho nhng thnh phn public v protected ca cc lp v ch dng cho cc lp public. Trong cc thnh phn thc thi ca cc lp ca bn, bn c th vit cc m non-CLS nu mun, bi cc ngn ng khc khng bao gi c th truy cp vo nhng phn ny.

    Chng ta khng i vo chi tit ca CLS y. V mt tng qut CLS khng nh hng nhiu n m C# ca bn v n khng c nhiu c tnh khc CLS.

    Garbage Collection

    Garbage collector l mt thnh phn qun l b nh ca .NET, n l mt p n cho vic thu hi b nh ca cc chng trnh thc thi. T trc n gi c hai cng ngh c s dng cho vic hu b nh trong Windows, nhng tin trnh ny c yu cu t h thng:

    l ng dng t lm iu ny mt cch th cng.

    l To mt b m tham chiu n i tng.

    Vic m ng dng chu trch nhim thu hi vng nh l mt cng ngh dng mc thp, hoc nhng ngn ng thc thi cp cao nh C++. N mang tnh hiu qu cao, n c thun li l ti nguyn s c gii phng ngay khi khng cn cn thit. Mt bt li ln l n thng xuyn sinh li. M ngun lun phi ch r cho h thng bit khi n khng cn dng b nh na . D dng nhn ra rng kt qu c th dn n r r b nh.

    Mc d cc mi trng pht trin hin i c cung cp mt s cng c gip trong vic pht hin s r r b nh, nhng rt kh theo vt, bi v n khng c hiu lc cho n khi c mt khi lng ln b nh b r r: Windows buc phi ngng cc tin trnh x l. Ti thi im ny my tnh chm i thy r mt s tr gi cho cc yu cu b nh.

    Vic duy tr mt b m cc tham chiu l mt n hu trong COM. tng ny cho rng mi thnh phn COM cha mt b m xem c bao nhiu ng dng ang cha tham chiu n n. Khi b m ny xung n zero, Thnh phn c th t hy n v gii phng vng nh cng nh cc ti nguyn tng ng. Vn y l n vn l thuc vo s thng bo ca cc ng dng khi chng khng cn dng n cc thnh phn ny na. Trong mt vi trng hp, n c kh nng to ra mt vn nghim trng hn l s kiu r r C++ thng thng, bi v i tng COM c th nm trong mt tin trnh ca ring n, iu ny c ngha l n s khng bao gi c hy bi h thng (ch t trong r r kiu C++, h thng c th ginh li ton b vng nh khi tin trnh kt thc).

    Thi gian chy .NET hon ton ph thuc vo garbage collector instead. y l mt chng trnh h tr vic thu dn b nh. Trong tng ny tt c cc yu cu b nh u c cp pht trn heap (iu ny ng cho tt c cc ngn ng, trong .NET, CLR cha n trong vng heap c qun cho tt c cc ng dng .NET s dng). Thnh thong .NET s kim tra xem vng heap c qun c tr nn y cha n tin hnh thu dn, v n gi y l tin trnh thu gm rc. Trnh thu dn rc s kim tra cc tham chiu t m ca bn, v d cc tham chiu t m ca bn n cc i tng c lu trn heap c nhn dng,

    Page 11 of 22Chapter 1

    16/8/2009file://C:\Documents and Settings\Hoang Son\Local Settings\Temp\~hhA670.htm

  • n c ngha l i tng vn cn tham chiu, cc i tng khng cn tham chiu na s b hu.

    Trnh thu gom rc hot ng trong .NET bi v Intermediate Language c thit k lm iu . Phi tun th cc nguyn tc sau, th nht bn ch c th tham chiu n mt i tng c sn bng cch sao chp cac tham chiu c sn, th hai Intermediate Language bo v kiu, iu ny c ngha l cc tham chiu n cc i tng c sn lun cha ng thng tn nhn dng chnh xc ca i tng .

    C++ C th khng s dng trnh thu gom mt cch my mc, bi v C++ cho php cc con tr t do p kiu.

    Mt iu c bit qun trng l tnh khng nh trc ca trnh thu gom rc. Hay ni cch khc, bn khng th bo m c khi no trnh thu gm rc s c gi; n s c gi khi CLR cm thy cn (nu bn khng thc hin li gi tng minh).

    Bo mt

    .NET tht s xut sc trong vic b sung c ch bo mt ca Windows bi v n h tr code-based security trong khi Windows ch tht s h tr Role-based security.

    Role-based security l c s xc nh ti khon ca cc tin trnh ang thc thi, hay ni cch khc ai s hu cc tin trnh ang thc thi. Code-based security l mt c ch khc xc nh xem nhng m no v c bao nhiu m l ng tin. Cm n s bo v kiu mnh ca IL, v nh n m CLR c th kim tra m trc khi chy trong mt ch bo v c a ra.NET cng h tr mt c ch nhng m no c php phi tra trong mt c ch bo mt no .

    Mt iu quan trng l code-based security c th lm gim nguy c lin quan n vic chy cc on m c xut x khng r rng (chng hn nh m m bn downloaded t Internet). Mt v d, nu m c chy di quyn administrator, n c th s dng code-based security khai bo rng m khng cn cho php thc thi trong nhng kiu m quyn administrator h tr nh: khng th c hoc vit ln cc bin mi trng, c hoc vit ln registry, khng truy cp vo cc c trng trong .NET.

    Security s c bn k hn trong chng 23.

    Application Domains

    Application domains l mt cch tn quan trng trong .NET v n c thit k c th d dng x li cc vn khi chy cc ng dng cn s bit lp vi cc ng dng khc nhng vn c th thng tin vi cc ng dng khc. Mt v d c in l mt ng dng web server application, n phi phn hi li vi mt s lng cc yu cu t cc trnh duyt. Chc chn rng s tn ti cng lc nhiu thnh phn c kh nng phn hi phc v cho cc yu cu .

    Trc thi .NET, s la chn gia cho php cc th hin c th dng trong mt tin trnh, ci m s mang li s ri ro c th lm gim an ton ca trang web, hay l cho php cc th hin chy trn cc tin trnh bit lp, ci m s mang li s gia tng s thc thi.

    Gi y, l s bit lp m thng qua cc tin trnh. Khi bn kch khi mt ng dng mi, n s chy trong ng cnh ca tint trnh. Cc tin trnh Windows c lp nhau thng qua vng a ch. Trong tng ny mi tin trnh s c sn 4 gigabytes b nh o cha d liu v m thc thi (4GB l dnh cho h thng 32-bit; h thng 64-bit c th nhiu hn). Windows gin tip thc hin c ch m rng nh x b nh o ny vi b nh vt l tht hay a. Mi tin trnh s c s nh x khc nhau, sao cho cc vng nh vt l tht s khng trng lp nhau. N c minh ha bi s sau:

    Page 12 of 22Chapter 1

    16/8/2009file://C:\Documents and Settings\Hoang Son\Local Settings\Temp\~hhA670.htm

  • Mt cch tng quat, bt k tin trnh no cng ch c th truy cp n b nh thng qua m a ch o c th - cc tin trnh khng th truy xut trc tip b nh vt l. Nh vy n n gin l khng cho php mt tin trnh c th truy xut n vng nh c cp cho mt tin trnh khc. N cung cp mt c ch bo m rng nhng ng x ti ca m khng th lm hng bt k th g bn ngoi vng a ch ca n. (ch rng trong Windows 9x, nhng c ch bo v ny khng c thu o nh trong NT/2000/XP, v th v mt l thuyt cc ng dng c kh nng ph hy Windows do vit ln vng nh khng thch hp).

    Cc tin trnh khng ch phc v nh l cch to nn s tch bit gia cc th hin khc nhau. Trong h thng Windows NT/2000, n cn lm n v gn cc giy php v c quyn bo mt. Mi tin trnh c mt k hiu bo mt ring, bo cho Windows bit chnh xc cc thc thi m tin trnh cho php.

    C hai phng php ny u c kh nng bo mt tt nhng li sinh ra mt bt li ln l thc thi. Thng thng cc tin trnh s hot ng chung vi nhau, bi vy cn phi c s truyn thng gia chng. V d nh u mt tin trnh gi mt thnh phn COM kh thi, v bi v c yu cu chy trong tin trnh ca chng. Ging nh cch m COM vn lm. Khi cc tin trnh khng th dng chung b nh, mt tin trnh phc tp c s dng sao chp d liu gia cc tin trnh. N s gy tr ngi lin n vn thc thi. Nu bn mun cc thnh phn c th lm vic vi nhau m khng mun nh hng n vn thc thi, cch duy nht l s dng DLL-based components v mi th s hot ng trong cng mt vng ch (y l mt vic mo him v cc thnh phn ng x ti s lm hng tt c mi th).

    Application domains c thit k nh l mt thnh phn ring bit khng gy nh hng n vn thc thi trong lc cc tin trnh trao i d liu. tng ny cho rng mt tin trnh c chia thnh mt s cc application domains. Mi application domain s tr li cho mt ng dng n, v cc lot thc thi s hot ng nh l mt application domain c lp:

    Page 13 of 22Chapter 1

    16/8/2009file://C:\Documents and Settings\Hoang Son\Local Settings\Temp\~hhA670.htm

  • Nu cc thc thi cng s dng chung mt vng nh, r rng chng c th dng chung d liu, bi v trn l thuyt chng c th truy xut trc tip d liu ca nhau. Tuy nhin ch l nguyn tc, CLR s bo m rng iu ny s khng xy ra trong thc t bng cch kim tra k lng m trong mi ng dng, chc rng chng khng lc ra khi vng d liu ca chng. Trc tin hu nh cc tr bp qu ng s b loi b, sau ng dng c th hot ng v khng phi kch hot n.

    Tht s, n hon ton c th lm c iu ny v s nh kiu mnh ca IL. Trong nhiu trng hp, nu m tht s dng kiu khng qun chng hn nh cc con tr, kiu d liu ang dng s bo m vng nh s c truy cp hp l. v d, kiu mng .NET s tin hnh kim tra v bo m rng cc thao tc trn mng u nm trong phm vi cho php. Nu mt thc thi cn trao i thng tin vi cc thc thi chy trong cc application domain khc chng phi gi dch v iu khin t xa ca .NET.

    M c kim tra xem c truy cp d liu ngoi application domain khng c gi l memory type-safe. Nh vy m ny c th hot ng cng vi m c bo v cc application domains khc nhau trong cng mt tin trnh.

    By li thng qua cc ngoi l

    .NET c thit k n gin ho qu trnh by li thng qua cc ngoi l. Nhng nh pht trin C++ nn bit rng, bi v IL l h thng nh kiu mnh, n khng thc thi cc mi kt hp bt li thng qua cc ngoi l trong IL, y l cch c a ra trong C++. Tt nhin khi finally cng c h tr trong .NET v C#.

    Chng ta s bn k v ngoi l trong chng 4. S qua mt cht, tng y l mt vng m c thit k nh l cc th tc qun ngoi l, mi on m c th gii quyt mt iu kin li ring (v d, mt file khng c tm thy, hoc khng c php thc thi mt s lnh). Nhng iu kin ny c th c nh ngha k hoc s qua tu bn. Cu trc ngoi l bo m rng khi mt iu kin sinh li xy ra, ngay lp tc lun thi hnh s nhy n th tc qun ngoi l.

    C cu qun ngoi l to iu kin thun li truyn cho mt i tng thng tin chnh xc v cc iu kin sinh ngoi l v mt th tc qun ngoi l. i tng ny c th bao gm mt thng ip thch hp cho ngi dng v chi tit v ni pht sinh ngoi l.

    Hu ht cc c cu qun ngoi l, bao gm c iu khin ca chng trnh s treo khi mt ngoi l c pht sinh, c qun bi ngn ng bc cao (C#, VB.NET, C++), v khng mt lnh IL no h tr vic . V d C#, qun s kin thng qua cc khi m try{}, catch{}, finally{}, chng ta s bn sau trong

    Page 14 of 22Chapter 1

    16/8/2009file://C:\Documents and Settings\Hoang Son\Local Settings\Temp\~hhA670.htm

  • chng 4.

    Nhng g m .NET lm l cung cp c s cho php cc trnh bin dch hng .NET h tr vic qun ngoi l. C th n cung cp mt b cc lp .NET c th miu t cc ngoi l, v thc thi ngn ng cho cho php truyn cc i tng ngoi l cho cc m qun ngoi l, bt chp m qun ngoi l c vit trong ngn ng no. S c lp ngn ng ny khng c h tr trong vic qun ngoi l ca C++ ln Jave, mc d n vn tn ti gii hn trong c cu COM cho vic qun li: bao gm vic tr v m li trong cc phng thc v truyn cc i tng li. Tht vy cc ngoi l c qun mt cch nht qun trong cc ngn ng khc nhau n ng vai tr quyt nh trong pht trin a ngn ng.

    Dng cc thuc tnh

    Attributes l mt c trng thn thuc vi nhng nh pht trin C++ vit cc thnh phn COM (thng qua vic s dng Microsoft's COM Interface Definition Language (IDL)) d vy n khng thn thin vi nhng nh pht trin Visual Basic hay Java. Attribute cung cp thng tin m rng lin quan n cc mc trong chng trnh c th c s dng bi trnh bin dch.

    Attributes c h tr trong .NET - v v th gi y n c h tr trong C++, C#, v VB.NET. Mt ci mi l cc attribute trong .NET l mt c ch cho php bn c th nh ngha cc attribute ca ring bn trong m ngun. Cc attribute t nh ngha ny c th thay th cho cc siu d liu ca cc phng thc v kiu d liu tng ng. .Do tnh c lp ngn ng ca .NET m cc attribute c th c nh ngha trong mt ngn ng v c th c bng m cc ngn ng khc.

    Attributes s c bn trong chng 5 ca cun sch ny.

    Cc lp .NET Framework C l mt trong nhng li ch ln nht ca vit m c qun, t nht l i vi mt nh pht trin, l bn c th s dng th vin lp c s ca .NET.

    Th vin lp c s ca .NET l mt tp hp ln cc lp m c qun c vit bi Microsoft, nhng lp ny cho php bn thao tc rt nhiu cc tc v sn c trong Windows. Bn c th to cc lp ca mnh t cc lp c sn trong th vin lp c s ca .NET da trn c ch tha k n.

    Th vin lp c s ca .NET rt trc quan v rt d s dng. V d, to mt tin trnh mi, bn n gin gi phng thc Start() ca lp Thread. disable mt TextBox, bn t thuc tnh Enabled ca i tng TextBox l false. Th vin ny c thit k d xi nh l Visual Basic v Java. Tt nhin l n d s dng hn cc lp ca C++: cc v bc ngoi cc hm API th nh GetDIBits(), RegisterWndClassEx(), v IsEqualIID().

    Mt khc, nhng nh pht trin C++ lun d dng truy cp n cc API, ngc li nhng nh pht trin Visual Basic v Java b gii hn trong nhng thao tc h thng c bn m ngn ng tng ngn ng cung cp sn. Ci mi ca th vin lp c s .NET l kt hp tnh n gin ca cc th vin Visual Basic v Java vi hu ht cc c tnh trong cc hm Windows API. C nhiu c tnh ca Windows khng sn c trong cc lp ca th vin .NET, trong trng hp bn cn phi gi cc hm API, nhng c tnh ny thng l cc c tnh l, t s dng. Nhng c tnh thng dng u c h tr y trong th vin lp ca .NET. V nu bn mun gi mt hm API, .NET gi l "platform-invoke", c ch

    Page 15 of 22Chapter 1

    16/8/2009file://C:\Documents and Settings\Hoang Son\Local Settings\Temp\~hhA670.htm

  • ny lun bo m tnh ng n ca kiu d liu, v vy thao tc ny khng kh hn vic gi trc tip t m C++, n c h tr cho c C#, C++, v VB.NET.

    WinCV, mt tin ch Windows-based, bn c th dng tham kho cc lp, cu trc, giao din, kiu lit k trong th vin .NET base class. Chng ta s tm hiu WinCV trong chng 6.

    D rng ch ca chng 5 bn v cc lp c s, nhng thc t, chng ti ch ni v cc c php ca ngn ng C#, ch yu quyn sch ny ch cho cc bn v cch dng cc lp khc nhau trong th vin .NET base class. Mt cch tng qut .NET base classes bao gm cc vn :

    l Cc c tnh li cung cp bi IL (ch yu l v cc kiu d liu trong CTS, Chng 5)

    l H tr Windows GUI v controls (Chng 7)

    l Web Forms (ASP.NET, 16)

    l Data Access (ADO.NET, 10)

    l Directory Access (Chng 13)

    l File system v registry access (Chng 12)

    l Networking v web browsing (Chng 20)

    l .NET attributes v reflection (Chng 5)

    l Truy xut vo h iu hnh Windows (cc bin mi trng vv..., Chng 23)

    l COM interoperability (18)

    Mt cch tnh c, hu ht cc th vin lp c s ca .NET c vit bng C#!

    Cc Namespace Namespace l cch m .NET dng chng li s xung t tn gia cc lp. Chng hn nh trng hp bn c mt lp m t khch hng gi l lp Customer, v sau mt ngi khc cng c mt lp ging nh vy.

    Mt namespace khng ch l mt nhm cc kiu d liu, m n lm cho tn ca tt c cc kiu d liu trong cng mt khng gian tn s c tip u ng l tn ca namespace . N cng cho php mt khng gian tn nm trong mt khng gian tn khc. V d, hu ht cc h tr chung ca cc th vin lp c s .NET u nm trong mt khng gian tn gi l System. Lp c s Array nm trong khng gian tn ny c tn y l System.Array.

    .NET yu cu tt c cc kiu u phi c nh ngha trong mt khng gian tn, v d bn c th t lp Customer ca bn trong mt khng gian tn gi l YourCompanyName. Lp ny s c tn y l YourCompanyName.Customer.

    Nu mt namespace khng c khai bo r rng, cc kiu s c t vo mt namespace

    Page 16 of 22Chapter 1

    16/8/2009file://C:\Documents and Settings\Hoang Son\Local Settings\Temp\~hhA670.htm

  • ton cc khng tn.

    Microsoft khuyn rng cc h tr ca bn nn t vo mt namespace t nht l 2 cp, cp mt l tn ca cng ty ca bn, cp hai l tn ca cng ngh hoc l phn mm ca gi sn phm , chng hn nh YourCompanyName.SalesServices.Customer. Lm nh vy trong hu ht cc trng hp m bo rng, cc lp trong ng dng ca bn khng xung t tn vi cc lp ca cc t chc khc.

    Chng ta s xem xt thm v namespace chng 2.

    To cc ng dng .NET bng C# C# c th dng to cc ng dng console: cc ng dng thun vn bn chy trn DOS window. Hu nh bn ch to cc ng dng console khi cn kim tra cc th vin lp, hoc cho cc tin trnh daemon Unix/Linux. Tt nhin, bn cng c th dng C# to cc ng dng dng cho cc cng ngh tng thch .NET. Trong phn ny, chng ta xem qua v cc kiu ng dng khc nhau c th to ra bng C#.

    To cc ng dng ASP.NET ASP l mt cng ngh ca Microsoft dng to cc trang web c ni dung ng. Mt trang ASP thc cht l mt file HTML c nhng cc khi server-side VBScript hay JavaScript. Khi mt trnh duyt khch yu cu mt trang ASP page, web server s sinh ra m HTML, x l cc server-side script khi chng n. Thng th cc script s truy cp vo mt c s d liu ly d liu, v biu din trn trang HTML. ASP l cch n gin nht to cc ng dng browser-based.

    ASP tt nhin cng c mt vi hn ch. Trc tin, cc trang ASP thnh thong tr nn rt chm bi v m server-side c thng dch thay v c bin dch. Th hai, cc file ASP kh bo tr bi v chng khng c cu trc; m server-side ASP v HTML c trn ln vi nhau. Th ba, ASP i khi kho pht trin bi n khng quan tm n by li v kim tra kiu. C th, nu bn dng VBScript v mun by li trn cc trang ca bn, bn phi dung cu lnh On Error Resume Next, v cho php tt c cc thnh phn gi thng qua mt Err.Number chc rng tt c u tt.

    ASP.NET l mt phin bn mi ca ASP ci tin rt nhiu cc thiu xt ca n. N khng ch thay th ASP; hn th, cc trang ASP.NET c th sng chung vi cc ng dng ASP trn cng mt my ch. Tt nhin bn c th lp trnh ASP.NET vi C#!

    Mt d cc chng (14-16) s bn k v ASP.NET, nhng chng ta cng ni qua mt vi c tnh quan trng ca n.

    Cc c tnh ca ASP.NET Trc tin, v c l l quan trng nht, cc trang ASP.NET l cc trang c cu trc. C ngha l mi trang l thc t l mt lp c tha k t lp .NET System.Web.UI.Page, v c th ghi mt tp cc phng thc s dng trong thi gian sng ca trang web (bn hy tng tng rng nhn s kin ny nh l anh em b con vi cc s kin OnApplication_Start v OnSession_Start trong file global.asa ca ASP c.) Bi v bn c th chuyn cc thao tc ca mt trang thnh cc s kin sng ngha hn, chnh v th m cc tramg ASP.NET d hiu hn.

    Page 17 of 22Chapter 1

    16/8/2009file://C:\Documents and Settings\Hoang Son\Local Settings\Temp\~hhA670.htm

  • Mt im mnh khc l cc trang ASP.NET c th c to trong VS.NET, cng chung mi trng vi cc thnh phn lun l v d liu s c dng trong cc trang web ny. Mt nhm n VS.NET, hoc solution, cha tt c cc file lin quan n mt ng dng. Hn th na bn c th by li cc trang ASP ca bn ngay trong trnh thit k; trc y, tht l kh khn c th cu hnh InterDev v cc n web server thc hin by li.

    R rng, c tnh ASP.NET's code-behind gip cc bn c th d dng cu trc mt trang web. ASP.NET cho php bn tch bit cc chc nng server-side ca trang thnh mt lp, bin dch lp thnh mt DLL, v t DLL vo mt th mc bn di phn HTML. Mt code-behind chi phi nh ca mt trang web tng ng vi file DLL ca n. Khi mt trnh duyt yu cu trang, web server pht ra cc s kin trong lp ca page's code-behind DLL.

    Cui cng khng km phn quan trng, ASP.NET tht s ng ch vi kh nng tng cng s thc thi. Ngc li vi cc trang ASP c thng dch cho mi yu cu, web server lu gi li cc trang ASP.NET sau qu trnh bin dch. Ngha l cc yu cu sau ca mt trang ASP.NET s thc thi nhanh hn trang u tin.

    ASP.NET d to cc trang hn bi v n c chiu bi trnh duyt, bnc c th s dng mt mi trng mng intranet. Theo kinh nghim truyn thng th mt ng dng form-based thng l tt hn mt user interface, nhng cng kh bo tr hn v n chy trn nhiu my khc nhau.

    Vi s ra i ca Internet Explorer 5 v s thc thi m h ca Navigator 6, tt nhin cc c tnh ca ng dng form-based b che m. IE 5's h tr nht qun v mnh mconsistent cho DHTML cho php cc nh lp trnh to cc ng dng web-based p l ln hn. Tt nhin, cc ng dng ny bt buc phi theo chun ca IE v khng c h tr bi Navigator. Trong nhiu lnh vc cng nghip, chun ny tr nn ph bin.

    Web Forms

    d dng cho vic to cc trang c cu truc, Visual Studio .NET cung cp Web Forms. Chng cho php bn to cc trang ASP.NET sinh ng nh cch m VB 6 hay C++ Builder windows lm; n cch khc, bng cch ko cc controls t toolbox vo form, sau sp xp cho p, in m qun l s kin thch hp vo control . Khi bn dung C# to cc Web Form, bn ang to mt lp C# c tha k t lp Page base, v mt trang ASP c ch nh nh l code-behind. Tt nhin, khng bt buc phi dng C# to mt Web Form; bn c th dng VB.NET hoc mt ngn ng bit .NET khc.

    In the past, the difficulty of web development has discouraged some teams from attempting it. To succeed in web development, you had to know so many different technologies, such as VBScript, ASP, DHTML, JavaScript, and so on. By applying the Form concepts to web pages, Web Forms promise to make web development easier. Only time will tell, however, how successful Web Forms and Web Controls (which we'll look at next) will be at insulating the developer from the complexities of web design.

    Web Controls

    Cc control thng c c tr trn mt Web Form khng phi l cc ActiveX control. Hn na, chng l XML tags trong ASP namespace v browser c th chuyn sang HTML v client-side script khi mt trang c yu cu. c bit hn, web server c th cc iu khin server-side control theo nhiu cch khc nhau, sinh ra s bin i ph hp vi cc yu cu ca cc web browser ring bit. iu ny c ngha l s d dng vit cc giao din ngi dng tinh vi cho cc trang web, ng bn tm n vn tng thch trnh duyt web bi v Web Forms s lm iu cho bn.

    Page 18 of 22Chapter 1

    16/8/2009file://C:\Documents and Settings\Hoang Son\Local Settings\Temp\~hhA670.htm

  • Bnc c th dng C# hay VB.NET m rng hp cng c Web Form. Vic to mt server-side control mi n gin l thc thi lp .NET System.Web.UI.WebControls.WebControl.

    Web Services

    Ngy nay, cc trang HTML l nguyn nhn ca hu ht cc xung t trn World Wide Web. Vi XML, cc my vi tnh c mt nh dng device-independent dng cho vic truyn thng vi cc my khc trn mng Web. Trong tng li, cc my tnh c th s dng Web v XML trao i thng tin hn l dng cc line chuyn dng v theo nhng nh dng ring nh EDI (Electronic Data Interchange). Cc Web Service c thit k cho mt web hng dch v, trong cc my tnh xa cung cp cho nhau cc thng tin ng c th phn tch v ti nh dng, trc khi trao li cho ngi dng. Mt Web Service l cch n gin nht mt my tnh c th cung cp thng tin cho cc my tnh khc trn Web di nh dng XML.

    V mt k thut, mt Web Service trong .NET l mt trang ASP.NET theo nh dng XML thay v theo nh dng HTML yu cu cc client. Cc trang ny c mt code-behind DLL cha mt lp xut pht t lp WebService. VS.NET IDE cung cp mt c ch tin cho vic pht trin Web Service.

    C hai l do chnh mt t chc chn Web Services. L do th nht l bi v chng ng tin cy trn HTTP, Web Services c th dng cc mng c sn (the Web) nh mt mi trng cho vic truyn thng. Mt l do khc l bi v cc Web Service dng XML, mt nh dng d liu t m t, mang tnh ph bin, v c lp nn.

    To cc Windows Form Mc d C# v .NET c thit k pht trin web, nhng chng vn h tr mnh m cho ci gi l ng dng "fat client", cc ng dng c th c ci t trn mt my ngi dng cui. H tr ny gi l Windows Forms.

    Mt Windows Form l cu tr li ca .NET cho VB 6 Form. Dng thit k mt giao din window sinh ng, bn ch n gin ko cc control t vo trn Windows Form. xc nh cch x ca window, bn vit cc th tc qun l s kin cho form controls. Mt n Windows Form c dch thnh mt EXE phi c ci t trong mt mi trng my tnh ngi dng cui. Ging nh cc kiu n .NET khc, n Windows Form c h tr cho c VB.NET v C#. Chng ta s ni k v Windows Forms trong chng 7.

    Windows Controls

    Mc d Web Forms v Windows Forms c pht trin theo cng mt cch, bn dng cc loi khc nhau ca controls nh v chng. Web Forms dng Web Controls, v Windows Forms dng Windows Controls.

    Mt Windows Control l mt ActiveX control. ng sau s thc thi ca mt Window control, l s bin dich sang mt DLL c th ci t trn my khch. Tht vy, .NET SDK cung cp mt tin ch dng to mt v bc cho cc ActiveX control, v th chng c th c t trong Windows Forms. Ging trng hp ny cc Web Control, Windows Control c to thnh t mt lp khc System.Windows.Forms.Control.

    Windows Services

    Page 19 of 22Chapter 1

    16/8/2009file://C:\Documents and Settings\Hoang Son\Local Settings\Temp\~hhA670.htm

  • Mt Windows Service l mt chng trnh c thit k chy trn nn Windows NT/2000/XP (khng h tr trn Windows 9x). Cc dch v ny rt hu ch khi bn mun mt chng trnh c th chy lin tc v sn sng p ng cc s kin m khng cn ngi dng phi khi ng. V d nh mt World Wide Web Service trn cc web server lun lng nghe cc yu cu t trnh khch.

    Tht d dng vit cc dch v trong C#. Vi th vin lp c s .NET Framework sn c trong khng gian tn System.ServiceProcess namespace chuyn dng t chc cc tc v boilerplate kt hp vi cc dch v, ngoi ra, Visual Studio .NET cho php bn to mt n C# Windows Service, vi cc m ngun c bn ban u. Chng ta s khm cch vit mt C# Windows Services trong chng 22.

    Vai tr ca C# trong .NET Enterprise Architecture C# yu cu phi c .NET runtime, trong mt vi nm ti hu ht cc my khch c bit l cc my bn s c ci .NET. Vo lc , vic ci t cc ng dng C# s ging nh vic ti phn phi cc thnh phn .NET. S c nhiu ng dng C# c ci t trong mi trng thng mi. Tht vy, C# c coi nh l mt c hi ni bt cho cc t chc c th to nhng ng dng mnh m, nhng ng dn client-server n-lp.

    Khi kt ni vi ADO.NET, C# c kh nng truy cp cc c s d liu tng qut v nhanh chng nh c s d liu SQL Server v Oracle. Cc datasets tr li c th d dng thao tc thng qua cc i tng ca ADO.NET, v t ng tr v kiu XML truyn thng trn mt mng intranet vn phng.

    Mt database schema c to ra cho mt n, C# thng minh thc thi cc lp i tng truy xut d liu c th chn, cp nht, xo truy cp n mt bn d liu khc.

    to mt ng dng vi C#, bn nht nh s n to mt th vin lp cc i tng truy xut d liu v cc i tng thng mi. Trong khi pht trin, bn c th dng Console projects kim tra cc phng thc ca cc lp ca bn. Mt iu th v trong lp trnh Console l n c th t ng chy cc file BAT kim tra mt nhm cc m lnh.

    Ch rng, C# v .NET s nh hng n cch thc ng cc gi vt l cho vic dng li cc lp. Trong qu kh, rt nhiu nh pht trin c nhi nht cc lp vo mt thnh phn vt l n bi v vic lm ny gip cho vic pht trin d dng hn, nu xy ra mt li nhn dng phin bn, bn s bit n xy ra u. Bi v vic pht trin cc thnh phn .NET thng mi n gin l thao tc copy cc file vo mt s th mc, by gicc nh pht trin ng gi cc lp ca h vo nhiu gi logic, cc thnh phn ring bit m khng phi lo lng v vic xung t "DLL Hell".

    Cui cng khng km phn quan trng, cc trang ASP.NET c vit bng C# to thnh cc giao din ngi dng thng minh hn. Bi v cc trang ASP.NET c bin dch nn chng s chy nhanh hn. Cng bi chng c th by li trong VS.NET IDE nn chng mnh m hn. Do chng h tr y cc c tnh ca ngn ng nh kt ni sm, tha k, nn cc trang ASP.NET c vit trong C# gn gng v d bo tr.

    Cc nh pht trin c th hoi nghi v s thi phng qua mc v cng ngh v ngn ng mi, v min cng dng cc nn n gin bi v chng tng t ra hu ch. Nu bn l mt nh pht trin thng mi cho mt b phn IT, hoc nu ban l nh cung cp cc dch v ng dng thng qua World Wide Web, chng ti bo m rng C# v .NET a ra khng di bn li ch ln, thm ch mt vi c tnh m Web Services v server-side controls khng gii quyt c:

    Page 20 of 22Chapter 1

    16/8/2009file://C:\Documents and Settings\Hoang Son\Local Settings\Temp\~hhA670.htm

  • l Xung t gia cc Component him khi xy ra v vic pht trin tr nn d dng hn, do cc phin bn khc nhau ca cng mt thnh phn c th chy song song nhau trn cng mt my m khng gy ra xung t

    l M ASP ca bn s khng cn hn dn na

    l Bn s c tha k rt nhiu chc nng tuyt vi ca cc .NET base class

    l i vi cc ng dng yu cu mt giao din Windows Forms, C# s l cch d nht to cc ng dng loi ny

    Windows Forms c mt vi im xung hng trong mt vi nm tr li y do s pht trin ca WebForms v cc ng dng Internet-based. Tuy nhin, nu s t cc ng nghip ca bn thng tho JavaScript, ASP, hoc cc cng ngh c lin quan, th Windows Forms vn l mt s la chn to mt giao din d dng v nhanh chng. Nn nh rng cn tch bit m ca bn cho cc logic giao din ngi dng tch bit vi cc logic thng mi v cc m truy cp d liu. Lm nh th s cho php bn di tr ng dng ca bn vo trnh duyt ti mt vi thi im trong tng lai nu cn thit. D vy, Windows Forms vn s cn ln t user interface trong cc ng dng gia nh v cc sn phm thng mi nh trong mt thi gian di na.

    Tm tt Chng ta kho st nhiu vn trong chng ny, chng ta s tm li cc vn quan trng trong .NET Framework v mi quan h ca n vi C#. Chng ti trnh by cch m tt c cc ngn ng hng .NET c bin dch thnh Intermediate Language trc khi c bin dch v thc thi bi Common Language Runtime. Chng ti cng trnh by vai tr ca cc c tnh sau trong .NET trong qu trnh bin dch v thc thi:

    l Cc Assembly v th vin lp c s ca .NET

    l Cc thnh phn COM

    l Qu trnh bin dch JIT

    l Cc Application domain

    l Garbage Collection

    Lu i sau cho ta mt ci nhn v vi tr ca cc c tnh ny trong qu trnh bin dch v thc thi:

    Page 21 of 22Chapter 1

    16/8/2009file://C:\Documents and Settings\Hoang Son\Local Settings\Temp\~hhA670.htm

  • Chng ti cng trnh by nhng c trng ca IL, c th l nh ngha kiu mnh v hng i tng. Chng ti ch thch cc c tnh ny nh hng n cc cc ngn ng hng .NET khc, bao gm C#. Chng ti cng ch thich cch m nh ngh kiu mnh c th h tr tng hot ngn ng cho, cng nh cc dch v CLR chng hn nh trnh thu gom rc v bo mt.

    phn cui ca chng ti ni v cch to cc ng dng C# da trn cc cng ngh ca .NET trong c ASP.NET.

    Gi y chng ta c ci nn, chng ti s ch ra cch vit m trong C#.

    Page 22 of 22Chapter 1

    16/8/2009file://C:\Documents and Settings\Hoang Son\Local Settings\Temp\~hhA670.htm