Sinhvienit.net 57669587 c Dhkh Hue

download Sinhvienit.net 57669587 c Dhkh Hue

of 189

description

f

Transcript of Sinhvienit.net 57669587 c Dhkh Hue

  • Gio trnh Visual Studio .NET

    1

    I HC HU I HC KHOA HC

    KHOA CNG NGH THNG TIN

    GIO TRNH C# V NG DNG

    NGUYN HONG H NGUYN VN TRUNG

    HU - 2008

  • Gio trnh Visual Studio .NET

    2

    CCHHNNGG 11 TTNNGG QQUUAANN VV ..NNEETT FFRRAAMMEEWWOORRKK

    1.1 Tng quan v kin trc ca .NET Framework .NET Framework c thit k nh l mi trng tch hp n gin ha vic pht trin v thc thi cc ng dng trn Internet, trn desktop di dng Windows Forms, hoc thm ch l trn c cc thit b di ng (vi Compact Framework). Cc mc tiu chnh m .NET framework hng n l:

    - Cung cp mt mi trng hng i tng nht qun cho nhiu loi ng dng - Cung cp mt mi trng gim ti thiu s xung t phin bn (DLL Hell

    a ngc DLL) tng lm iu ng cc lp trnh vin Windows (COM), v n gin ha qu trnh trin khai/ci t.

    - Cung cp mt mi trng linh ng, da trn cc chun c chng nhn c th cha trn bt c h iu hnh no. C# v mt phn chnh ca mi trng thc thi .NET, CLI (Common Language Infrastructure H tng ngn ng chung) c chun ha bi ECMA.

    - cung cp mt mi trng qun l c, trong m c d dng xc thc thc thi an ton.

    Kin trc ca .NET Framework c thit k thnh 2 phn: CLR (Common Language Runtime Khi thc thi ngn ng chung) v FCL (Framework Class Library Th vin lp khung) nh hnh di

    Hnh 1.1 Kin trc .NET Framework

  • Gio trnh Visual Studio .NET

    3

    CLR, phn ci t CLI ca Microsoft, lm nhim v qun l s thc thi m lnh v tt c cc tc v lin quan n n: bin dch, qun l b nh, bo mt, qun l tuyn on, v thc thi an ton kiu. M lnh thc thi trong CLR c gi l m c qun l (managed code), phn bit vi m khng c qun l (unmanaged code), l m lnh khng ci t nhng yu cu thc thi trong CLR chng hn nh COM hoc cc thnh phn da trn Windows API.

    FCL l th vin kiu d liu c th ti s dng (gm cc class, structure, ) dnh cho cc ng dng thc thi trong .NET. Tt c cc ngn ng h tr .NET Framework u s dng th vin lp dng chung ny.

    1.2 Mi trng thc thi ngn ng chung CLR (Common Language Runtime) CLR (Common Languge Runtime Mi trng thc thi ngn ng chung) qun l

    ton b vng i ca mt ng dng: n np cc lp c lin quan, qun l s thc thi ca cc lp, v m bo qun l b nh mt cch t ng. Ngoi ra, CLR cn h tr tch hp gia cc ngn ng cho php m lnh c sinh ra bi cc ngn ng khc nhau c th tng tc vi nhau mt cch lin mch.

    1.2.1 Bin dch m lnh .NET Trnh bin dch tng thch vi CLR s sinh m thc thi cho mi trng thc thi

    ch khng phi l m thc thi cho CPU c th. M thc thi ny c bit n qua tn gi CIL (Common Intermediate Language Ngn ng trung gian chung), hay MSIL (Microsoft Intermediate Language Ngn ng trung gian ca Microsoft); l ngn ng kiu assembler c ng gi trong cc file EXE hoc DLL. Cc file ny khng phi thuc dng file c th thc thi nh thng thng, chng cn trnh bin dch JIT (Just-in-Time) ca mi trng thc thi chuyn i IL cha trong n sang dng m lnh c th ca my khi ng dng thc s thc thi.

    Qu trnh bin dch, thc thi mt chng trnh trong .NET framework c th tm tt nh sau:

    - Chng trnh ngun trc ht s c bin dch v ng gi thnh mt khi gi l assembly. Khi ny s cha cc m lnh ngn ng trung gian v cc metadata m t thng tin cn thit cho s hot ng ca khi.

    - Mi khi c yu cu thc thi assembly ni trn, CLR s chuyn i m lnh ngn ng trung gian trong assembly thnh m lnh tng thch vi CPU c th trc

  • Gio trnh Visual Studio .NET

    4

    khi c th thc thi.

    Hnh 1.2 Chc nng ca CLR

    Nh vy, lp trnh vin c th s dng bt c ngn ng no pht trin ng dng trn .NET framework, min l ngn ng c h tr .NET framework. iu c bit l, do s dng chung h thng kiu d liu, nn tnh nng lin thng gia cc ngn ng trn .NET framework l rt cao.

    1.2.2 H thng kiu d liu chung CTS (Common Type System) CTS cung cp mt tp c s cc kiu d liu cho mi ngn ng hot ng trn .NET platform. Ngoi ra, n c t cch khai bo v to cc kiu d liu ty bin, cch qun l vng i ca mt th hin ca nhng kiu d liu ny. Hnh di y m t cch t chc CTS ca .NET

  • Gio trnh Visual Studio .NET

    5

    Hnh 1.3 Cc kiu d liu c s ca CTS

    Mi kiu d liu trong .NET u c k tha t kiu d liu System.Object. Cc kiu d liu c chia lm hai loi: kiu tham chiu v kiu gi tr. Kiu d liu tham chiu c x l trong mt vng nh c bit gi l heap thng qua cc con tr. Kiu d liu gi tr c tham chiu trc tip trong stack ca chng trnh.

    1.2.3 Assemblies Tt c cc m c qun l thc thi trong .NET u phi c cha trong mt assembly. Mt assembly c xem nh l mt file EXE hoc DLL. Mt asembly c th cha mt tp hp gm mt hay nhiu file cha phn m lnh hoc ti nguyn (nh nh hoc d liu XML).

    Mt assembly c to ra khi trnh bin dch tng thch vi .NET chuyn mt file cha m ngun thnh mt file DLL hoc EXE. Nh minh ha trong hnh 1.4, mt assembly cha mt manifest, metadata, v ngn ng trung gian sinh bi trnh bin dch c th.

    Manifest: Mi assembly phi c mt file cha mt manifest. Manifest ny l mt tp hp cc bng cha cc metadata trong lit k tn ca tt c cc file trong assembly, tham chiu n cc assembly bn ngoi, v cc thng tin nh tn, phin bn nh danh assembly . Mt s assembly cn c c ch k in t duy nht (unique digital signature). Khi mt assembly c np, nhim v u tin ca CLR l m file cha manifest c th nh danh cc thnh vin c trong assembly.

    Metadata: Ngoi cc bng trong manifest va nh ngha, trnh bin dch C# cn sinh ra cc bng nh ngha v bng tham chiu. Bng nh ngha cung cp mt ghi ch y

  • Gio trnh Visual Studio .NET

    6

    v cc kiu cha trong IL. V d, c cc bng nh ngha kiu, phng thc, trng d liu, tham s, v thuc tnh. Bng tham chiu cha cc thng tin v tt c cc tham chiu v kiu v cc assembly khc. Trnh bin dch JIT ph thuc vo cc bng ny chuyn IL sang m my.

    IL: Vai tr ca IL c cp trc y. Trc khi CLS c th s dng IL, n phi c ng gi vo trong mt assembly dng DLL hoc EXE. Assembly dng EXE phi c mt im nhp (entry point) n c th thc thi. Ngc li, Assembly dng DLL, c thit k hot ng nh l mt th vin m lnh nm gi cc nh ngha kiu.

    Hnh 1.4 Assembly ch gm 1 file

    Assembly khng ch l cch logic ng gi cc m thc thi. N quy nh m hnh ch yu ca .NET trin khai m lnh, qun l phin bn, v bo mt.

    - Tt c cc m c qun l, cho d l mt chng trnh n, mt iu khin, hay mt th vin DLL cha cc kiu d liu ti s dng, u c ng gi vo mt assembly. y l khi c bn nht c th trin khai trn h thng. Khi mt ng dng c bt u, ch nhng assembly c yu cu cho vic khi to mi cn hin din. Cc assembly khc s c np khi c yu cu. Cc nh pht trin c th phn ng dng thnh cc assembly da theo mc thng xuyn s dng.

    - Trong th gii .NET, mt assembly quy nh mt bin gii phin bn. Trng Version Number trong manifest p dng cho tt c cc kiu v ti nguyn trong assembly. V vy, mi file to nn assembly c xem nh l mt n v n nht c cng phin bn.

    - Mt assembly cng thit lp mt bin gii bo mt nh ra quyn hn truy xut.

  • Gio trnh Visual Studio .NET

    7

    C# s dng cc b t truy cp iu khin cch m cc kiu v thnh phn kiu trong mt assembly c truy xut. Hai trong s ny c s dng trong assembly, l public cho php truy xut ty t assembly bt k ; v internal gii hn truy xut n cc kiu v thnh vin bn trong assembly.

    Nh cp trn, mt assembly c th cha nhiu file. Nhng file ny khng gii hn l cc module m lnh m c th l cc file ti nguyn nh file hnh nh hoc vn bn. Mt cch s dng tnh cht ny trong thc t l chng ta c th to ra ng dng a ngn ng, trong ng dng s cng s dng chung cc module logic, phn giao din hoc cc ti nguyn khc c th c trin khai ring thnh cc file c lp. Khng c gii hn v s lng file trong mt assembly. Hnh 1.5 minh ha b cc ca mt assembly cha nhiu file.

    Hnh 1.5 - Assembly cha nhiu file

    Trong minh ha assembly cha nhiu file, manifest ca assembly cha thng tin nh danh mi file c s dng trong assembly.

    Mc d hu ht cc assembly u cha mt file duy nht. Sau y l cc thun li ca assembly cha nhiu file:

    - C th t hp cc module c to ra t nhiu ngn ng lp trnh khc nhau. - Cc module m lnh c th c phn ra ti u cch m m lnh c np vo

    trong CLR. Cc m lnh c lin quan v c s dng thng xuyn nn c t vo trong cng mt module; nhng m lnh t khi c s dng s c t vo trong module khc. CLR khng np cc module no khi cha thc s cn thit.

  • Gio trnh Visual Studio .NET

    8

    - Cc file ti nguyn c th c t vo trong module ca ring n, qua cho php nhiu ng dng c th chia s ti nguyn dng chung.

    1.2.4 Private Assembly v Shared Assembly Cc assembly c th c trin khai theo hai dng: private assembly v global assembly.

    Private assembly l assembly c t trong th mc ca ng dng hoc th mc con ca n. Qu trnh ci t v cp nht private assembly ch n gin l chp assembly vo trong th mc cn thit, khng cn thit lp thng tin trong registry. i khi, c th dng thm mt file cu hnh ng dng c th ghi mt s thit lp trong manifest ca ng dng.

    Shared assembly l assembly c ci t vo v tr ton cc, gi l Global Assembly Cache (GAC), l ni c th truy xut c t nhiu ng dng. im quan trng nht ca GAC l n cho php nhiu phin bn ca mt assembly c th c thc thi. h tr iu ny, .NET khc phc vn xung t tn bng cch s dng 4 thuc tnh nh danh 1 assembly, bao gm: Assembly Name (tn assembly), Culture Identity (nh danh vn ha), Version (phin bn), v Public Key Token (du hiu m kha cng khai).

    Cc shared assembly thng c t trong th mc assembly di th mc h thng ca h iu hnh (WINNT\ trong Windows 2000, WINDOWS\ trong Windows XP). Nh m t hnh 1.6, cc assembly c lit k theo nh dng c bit hin th 4 thuc tnh ca chng (.NET Framework bao gm mt file DLL m rng Windows Explorer cho php n c th hin th ni dung GAC).

    - Assembly Name: cn c gi l tn thng gi, l tn file ca assembly khng cha phn m rng.

    - Version: Mi assembly c mt s hiu phin bn dng cho tt c cc file trong assembly. N cha 4 s theo nh dng:

    ...

    Thng thng cc s v c cp nht cho nhng ln thay i mang tnh ph v tnh tng thch ngc. Mt s hiu phin bn c th c gn cho mt assembly bng cch nh thuc tnh AssemblyVersion trong phn m ngun ca assembly.

    - Culture Setting: Ni dung ca mt assembly c th c kt hp vi mt vn ha hay ngn ng c th. Thit lp ny c ch nh bng m hai k t kiu nh en cho English, vi cho Vietnam, v c th c gn vi thuc tnh

  • Gio trnh Visual Studio .NET

    9

    AssemblyCulture t trong m ngun ca assembly

    [assembly: AssemblyCulture ("fr-CA")]

    - Public Key Token: m bo mt shared assembly l duy nht v ng tin cy, .NET yu cu ngi to ra assembly phi nh du bng mt nh danh mnh. Qu trnh ny c gi l k, yu cu s dng cp kha cng khai/ring t. Khi trnh bin dch xy dng assembly, n s s dng kha ring t sinh ra mt nh danh mnh. Token c sinh ra y l 8 byte cui cng ca php bm (hashing) kha cng khai. Token ny s c t trong manifest ca bt k assembly client no c tham chiu n shared assembly v s dng n nh danh assembly trong qu trnh thc thi. Mt assembly c gn mt cp kha cng khai/ring th c gi l mt assembly nh danh mnh. Mi assembly u phi c nh danh mnh.

  • Gio trnh Visual Studio .NET

    10

    Hnh 1.6 Th mc Global Assembly trong mt h thng Windows XP

    1.2.5 Tin bin dch mt Assembly Sau khi mt assembly c np vo CLR, IL phi c bin dch sang thnh m my trc khi thc s c thc thi. .NET Framework c cung cp mt cng c gi l Ngen (Native Image Generator), dng bin dch mt assembly thnh mt native image c lu trong native image cache mt vng dnh ring ca GAC. Mi khi CLR np mt assembly, n s kim tra trong cache xem c native image tng ng cha; nu c n s np m bin dch ch khng cn bin dch thm ln na. y l tnh nng m nu c khai thc hp l th c th tn dng ci thin hiu nng

    1.2.6 Kim chng m lnh (Code Verification) Nh l mt phn ca qu trnh bin dch JIT, CLR thc hin hai loi kim chng: kim

  • Gio trnh Visual Studio .NET

    11

    chng IL v hp l ha metadata bo m m lnh c an ton kiu. Trong thc t, iu ny c ngha l cc tham s trong li gi v phng thc c gi phi c kim tra m bo chng c cng kiu d liu, hoc l mt phng thc ch tr v ng kiu c c t trong khai bo tr v. Ni ngn gn, CLR s xem xt trong IL v metadata m bo mi gi tr c gn cho mt bin l tng thch kiu; nu khng s c mt ngoi l xut hin.

    Thun li ca m lnh c kim chng l CLR c th chc chn m lnh s khng nh hng n ng dng khc theo kiu truy xut n vng nh ngoi vng cho php ca n. Do CLR t do thc thi nhiu ng dng trong cng mt tin trnh hay khng gian a ch.

  • Gio trnh Visual Studio .NET

    12

    CCHHNNGG 22 NNGGNN NNGG LLPP TTRRNNHH CC##

    2.1 Chng trnh u tin Chng ta s lm quen vi ngn ng lp trnh C# v mi trng tch hp pht trin (IDE Integrated Development Environment) Visual Studio .NET bng cch xy dng mt ng dng u tin, ng dng firstApp. ng dng ny cho php ngi s dng nhp vo 2 s, sau in ra mn hnh tng, tch v thng ca hai s va nhp. Trnh t thc hin nh sau:

    1. Khi ng Microsoft Visual Studio 2005. Nhn Ctrl + Shift + N hoc chn menu tng ng l File New Project to mi mt project

    2. Chn loi ng dng cn pht trin l Visual C# Windows Console

    Application. Sau , chn th mc cha project v t tn cho project nh minh ha hnh trn. Ch , y, chng ta b chn hp kim Create directory for solution. Ch thch:

  • Gio trnh Visual Studio .NET

    13

    Visual Studio .NET coi mt bi ton cn gii quyt l mt solution. Mt solution c th bao gm mt hoc nhiu project. Mt solution, nu c nhiu project th nn c to ra trong mt th mc ring c th cha cc project trong n. y, solution ch c duy nht mt project, th nn khng cn thit phi to ra mt th mc cho solution.

    3. Sau khi nhn nt OK, hy kho st xem cu trc ca th mc cha solution ca chng ta. Bn phi lun nm chc v s tn ti, ngha ca cc tp tin, th mc c to ra trong qu trnh lm vic!

    4. G m lnh nh minh ha vo trong phn m ngun ca tp tin Program.cs

  • Gio trnh Visual Studio .NET

    14

    5. Bn c th s dng MSDN tra cu cc thng tin bn cha bit v: a. Lp Console v cc phng thc ReadLine(), WriteLine() ca n b. Cch chuyn i kiu chui thnh s, v d nh int.Parse()

    6. Nhn Ctrl + F5 thc hin bin dch v chy chng trnh. Sau quan st cu trc th mc ca solution, cho bit s thay i ca n so vi khi mi c to ra bc 3 (xem th mc bin v th mc obj ca project).

    7. Th thay i kt cu lnh float thuong = (float)x / y; thnh float thuong = x / y;

    ri chy chng trnh, quan st kt qu v rt ra kt lun.

    8. S dng thm cc cu trc lnh khc tinh chnh hot ng ca chng trnh (x l php chia cho 0, )

    R rng, on chng trnh n gin trn khng phi l qu phc tp i vi ngi

  • Gio trnh Visual Studio .NET

    15

    tng lm quen vi cc ngn ng lp trnh bc cao.

    2.2 Bin d liu Bin trong C# c khai bo theo c php nh sau:

    datatype identifier;

    V d:

    int i;

    Cu lnh ny khai bo mt s int tn l i. Trnh bin dch thc s cha cho php s dng bin ny cho n khi chng ta khi to n bng mt gi tr. Lnh khai bo ny ch lm nhim v cp pht mt vng nh (4 bytes) cho bin i.

    Sau khi khai bo, chng ta c th gn mt gi tr cho bin bng ton t gn =, nh sau:

    i = 10;

    Chng ta cng c th va khai bo, va khi to gi tr cho bin cng lc:

    int i = 10; // khai bao va khoi tao gia tri cho bien int double x = 10.25, y = 20; // khai bao va khoi tao hai bien double

    2.2.1 Tm hot ng ca bin Tm hot ng ca mt bin l vng m lnh m trong bin c th truy xut. Ni chung, tm hot ng ca bin c xc nh theo cc quy tc sau:

    Mt trng d liu (field), cn c gi l mt bin thnh phn ca mt lp i tng s c tm hot ng trong phm vi lp cha n.

    Mt bin cc b s c tm hot ng trong khi khai bo n (trong cp du ngoc nhn { })

    Mt bin cc b c khai bo trong cc lnh lp for, while, s c tm hot ng trong thn vng lp

    Tt nhin, trong cng phm vi hot ng, khng c c hai bin c trng tn.

    2.2.2 Hng d liu Hng d liu l bin c gi tr khng c php thay i trong sut thi gian tn ti ca n. Cch khai bo ca hng d liu l tng t nh i vi bin d liu, ch khc l c thm t kha const u.

  • Gio trnh Visual Studio .NET

    16

    const int a = 100; // Gia tri nay khong duoc thay doi

    Hng d liu c cc c tnh sau:

    Phi c khi to ngay khi n c khai bo, sau khng c php thay i gi tr ca hng.

    Gi tr ca hng d liu phi c tnh ton trong thi im bin dch. V vy, chng ta khng th khi to mt hng s c gi tr c ly t mt bin d liu. Nu cn iu ny, chng ta s dng trng d liu kiu read-only.

    2.3 Cc kiu d liu nh ngha sn ca C# C# phn kiu d liu thnh hai loi (tng t nh cch phn loi chung trong CTS): kiu d liu gi tr v kiu d liu tham chiu. V mt khi nim, im khc bit gia hai kiu d liu ny l, bin kiu d liu gi tr lu gi trc tip mt gi tr, trong khi , bin kiu tham chiu lu gi tham chiu n mt gi tr d liu. V mt lu tr vt l, bin ca hai kiu d liu ny c lu vo hai vng nh khc nhau ca chng trnh, l vng nh stack (cho bin d liu kiu gi tr) v vng nh heap (cho bin d liu kiu tham chiu). Bn cn c bit lu hiu ng ca cc php gn i vi kiu d liu kiu tham chiu.

    2.3.1 Kiu d liu gi tr c nh ngha sn Cc kiu d liu gi tr c nh ngha sn bao gm s nguyn, s du chm phy ng, k t v boolean.

    2.3.1.1 Cc kiu s nguyn C# h tr sn 8 kiu s nguyn:

    Tn Kiu trong CTS M t Vng biu din (min:max) sbyte System.SByte S nguyn c du 8-bit -27:27-1 short System.Int16 S nguyn c du 16-bit -215:215-1 int System.Int32 S nguyn c du 32-bit -231:231-1 long System.Int64 S nguyn c du 64-bit -263:263-1 byte System.Byte S nguyn khng du 8-

    bit 0:28-1

    ushort System.UInt16 S nguyn khng du 16-bit

    0:216-1

    uint System.UInt32 S nguyn khng du 32-bit

    0:232-1

  • Gio trnh Visual Studio .NET

    17

    ulong System.UInt64 S nguyn khng du 64-bit

    0:264-1

    2.3.1.2 Cc kiu s du chm ng Cc kiu s thc du chm ng c h tr sn ca C# bao gm:

    Tn Kiu trong CTS S ch s c ngha Vng biu din tng i (khong) float System.Single 7 1.5 10-45 to 3.4 1038 double System.Double 15/16 5.0 10-324 to 1.7 10308

    2.3.1.3 Kiu s thp phn biu din s thp phn vi chnh xc cao hn s thc du chm ng, C# h tr kiu d liu s thp phn:

    Tn Kiu trong CTS S ch s c ngha Vng biu din decimal System.Decimal 28 1.0 10-28 to 7.9 1028

    2.3.1.3 Kiu boolean Tng ng vi System.Boolean trong CTS, C# c kiu d liu bool, c th nhn mt trong hai gi tr true hoc false. C mt iu lu , kiu d liu bool khng c nhn cc gi tr nguyn nh mt s ngn ng (C, C++)

    2.3.1.4 Kiu k t lu tr gi tr ca mt k t n, C# h tr d liu kiu k t

    Tn Kiu trong CTS Gi tr char System.Char Biu din 1 k t 16-bit (Unicode) Cc hng kiu k t c gn bng cch ng trong cp du nhy n, v d 'A'. Cng c th biu th hng k t di dng s thp lc phn, kiu nh \u0041, hoc p kiu nh (char)65. Ngoi ra c th s dng mt s k t escape sau:

    K t escape K t tng ng \' Du nhy on \" Du nhy i \\ K t \ \0 Null \a K t Alert \b K t Backspace \f K t Form feed \n K t xung dng \r K t Carriage return

  • Gio trnh Visual Studio .NET

    18

    \t K t Tab \v K t Vertical tab

    2.3.2 Kiu d liu tham chiu c nh ngha sn C# h tr sn hai kiu d liu tham chiu:

    Tn Kiu CTS M t object System.Object Kiu d liu gc, mi kiu d liu khc trong CTS u k tha

    t y (k c cc kiu d liu gi tr) string System.String Chui k t Unicode

    2.3.2.1 Kiu d liu object object l kiu d liu gc, c bn nht m t , tt c cc kiu d liu khc u phi k tha (trc tip hoc gin tip). Cc thun li chng ta c c t kiu d liu object l:

    - Chng ta c th s dng tham chiu i tng gn kt vi mt i tng ca bt k kiu d liu con no. Tham chiu i tng cng c s dng trong nhng trng hp m m lnh phi truy xut n nhng i tng cha r kiu d liu (tng t nh vai tr con tr void C++)

    - Kiu object c ci t mt s phng thc c bn, dng chung, bao gm: Equals(), GetHashCode(). GetType(), v ToString(). Cc lp do ngi s dng t nh ngha c th ci t li cc phng thc ny theo k thut gi l overriding (ghi ) trong lp trnh hng i tng.

    2.3.2.2 Kiu d liu string Kiu d liu string c cung cp sn trong C# vi nhiu php ton v cch thc hot ng thun tin l mt trong nhng kiu d liu c s dng nhiu nht khi lp trnh. i tng string c cp pht trong vng nh heap, v khi gn mt bin string cho mt bin khc, chng ta s c hai tham chiu n cng mt chui trong b nh. Tuy nhin, khi thay i ni dung ca mt trong cc chui ny, chui thay i s c to mi hon ton, khng nh hng n cc chui khc. Hy xem hiu ng ny trong on chng trnh di y:

    using System; class MinhHoaString { public static int Main() { string s1 = "a string"; string s2 = s1;

  • Gio trnh Visual Studio .NET

    19

    Console.WriteLine("s1 is " + s1); Console.WriteLine("s2 is " + s2); s1 = "another string"; Console.WriteLine("s1 is now " + s1); Console.WriteLine("s2 is now " + s2); return 0; } }

    Kt qu ca on chng trnh trn l:

    s1 is a string s2 is a string s1 is now another string s2 is now a string

    Ni cch khc, vic thay i gi tr ca s1 khng nh hng g n s2, ngc vi nhng g chng ta trng i kiu d liu tham chiu.

    Hng kiu chui c bao trong cp du nhy kp (). Trong chui c th cha cc dy k t escape nh i vi kiu d liu k t. Do dy k t escape c bt u bng k t \ nn k t \ phi c lp i:

    string filepath = "C:\\CSharp\\MinhHoaString.cs";

    C mt gii php khc biu din k t \ trong chui, l dng c php @:

    string filepath = @"C:\CSharp\MinhHoaString.cs";

    C php ny cn cho php chng ta ngt dng trong hng chui, nh sau:

    string st = @"'Day la dong thu nhat Day la dong thu hai.";

    Khi , gi tr ca chui st s l:

    'Day la dong thu nhat Day la dong thu hai.

    2.4 Lung iu khin chng trnh

    2.4.1 Cu lnh iu kin Cc cu lnh iu kin cho php phn nhnh m lnh theo cc iu kin c th. C# c hai cu trc phn nhnh if v switch.

  • Gio trnh Visual Studio .NET

    20

    2.4.1.1 Cu lnh if Cu lnh if ca C# c k tha t cu trc if ca C v C++. C php ca n l:

    if (condition) statement1(s) [else statement2(s)]

    Nu c nhiu hn mt cu lnh c thc thi tng ng vi mt trong hai gi tr ca biu thc logic condition, chng ta c th gp cc lnh ny trong cp du ngoc nhn ({ ... }) (iu ny cng c p dng cho nhiu cu trc lnh khc m chng ta s cp sau ny):

    bool isZero; if (i == 0) { isZero = true; Console.WriteLine("i is Zero"); } else { isZero = false; Console.WriteLine("i is Non-zero"); }

    iu ng lu nht khi s dng cu lnh if l condition nht thit phi l mt biu thc logic (ch khng th l mt s nh C/C++).

    2.4.1.2 Cu lnh switch Cu lnh switch l mt cu lnh iu khin qun l nhiu la chn v lit k bng cch chuyn iu khin n mt trong nhng cu lnh case trong thn ca n:

    switch (expression) { case const_1: statement_1; break; case const_2: statement_2; break; ... case const_n: statement_n; break; [default: statement_n+1; break;]

  • Gio trnh Visual Studio .NET

    21

    }

    Ch rng, iu khin c chuyn n nhnh r tng ng vi gi tr ca biu thc. Cu lnh switch c th cha nhiu nhnh r nhng khng c hai nhnh r no c c cng gi tr. Vic thc thi thn cu lnh c bt u ti nhnh c la chn v tip tc cho n khi c chuyn ra ngoi qua lnh break. Cu lnh nhy break l bt buc i vi mi nhnh r, ngay c khi l nhnh r cui cng hoc l nhnh r default.

    Nu biu thc khng ng vi nhnh no ca lnh switch th iu khin s c chuyn n cc cu lnh sau nhn default (nu c). Nu khng c nhn default, iu khin c chuyn ra bn ngoi cu lnh switch.

    V d:

    switch (integerA) { case 1: Console.WriteLine("integerA =1"); break; case 2: Console.WriteLine("integerA =2"); break; case 3: Console.WriteLine("integerA =3"); break; default: Console.WriteLine("integerA is not 1,2, or 3"); break; }

    2.4.2 Cu lnh lp C# cung cp bn loi lnh lp (for, while, do...while, v foreach) cho php lp trnh vin c th thc thi mt khi lnh lin tip cho n khi mt iu kin xc nh no c tha mn.

    2.4.2.1 Cu lnh lp for C php ca cu lnh lp for c c php nh sau:

    for (initializer; condition; iterator) statement(s)

    trong :

    Initializer:biu thc c c lng trc khi ln lp u tin c thc thi (y

  • Gio trnh Visual Studio .NET

    22

    thng l ni khi to mt bin cc b nh l mt bin m). Condition: l biu thc kim tra trc khi mi vng lp c thc thi. Iterator: biu thc c c lng sau mi vng lp (thng dng tng bin

    m). Cc vng lp s kt thc khi condition c c lng l false.

    V d di y in ra 100 s t nhin u tin (0, 1, 2, ..., 99), mi s trn mt dng:

    for (int i = 0; i < 100; i = i+1) { Console.WriteLine(i); }

    Tt nhin, chng ta c th s dng cc vng lp for lng nhau, nh v d in ra tam gic hnh sao di y.

    for (int i = 0; i < 5; i++) { for (int j = 0; j

  • Gio trnh Visual Studio .NET

    23

    statements; } while(condition)

    V d: on chng trnh minh ha vic kim tra nhp vo mt chui t dng lnh, s dng khi chui nhp vo l abc, c vit li theo kiu cu lnh lp do...while nh sau:

    string correctPwd = abc, st; // rng st khng cn khi to l do { Console.Write(Password = ); st = Console.ReadLine(); } while (st != correctPwd)

    2.4.2.4 Cu lnh lp foreach Cu lnh lp foreach cho php duyt qua mi phn t c trong mt tp phn t. Kiu d liu tp hp phn t (collection) s c trnh by trong cc phn tip theo. Xt v d di y:

    foreach (int temp in arrayOfInts) { Console.WriteLine(temp); }

    V d ny s in ra tt c cc phn t c trong tp hp arrayOfInts. C mt iu ng lu , chng ta khng c thay i gi tr ca bin phn t lp. Chng hn, on chng trnh di y s b bo li:

    foreach (int temp in arrayOfInts) { temp++; //khng c thay i gi tr temp!!! Console.WriteLine(temp); }

    2.4.3 Cu lnh nhy C# cung cp mt s cu lnh nhy cho php chuyn iu khin n dng lnh khc trong chng trnh.

    2.4.3.1 Cu lnh goto Lnh goto cho php nhy trc tip n mt dng c th trong chng trnh, c xc nh bng mt nhn (label):

    goto Label1; Console.WriteLine("Dng lnh ny s khng c thc hin"); Label1:

  • Gio trnh Visual Studio .NET

    24

    Console.WriteLine("Continuing execution from here");

    2.4.3.2 Cu lnh break Chng ta s dng cu lnh break trong phn cu lnh r nhnh switch. C mt cch s dng khc ca cu lnh ny, l dng nhy ra khi iu khin ca lnh lp trc tip cha n (for, foreach, while, do...while).

    V d sau y l mt phin bn khc ca on lnh kim tra mt khu trn:

    string correctPwd = abc; while (true) { Console.Write(Password = ); string st = Console.ReadLine(); if (st == correctPwd) break; }

    2.4.3.3 Cu lnh continue Lnh continue cng tng t nh cu lnh break, phi c s dng trong thn cu lnh for, foreach, while, hay do while. Tuy nhin, n ch thot t ln lp hin ti ca vng lp bt u ln lp mi.

    V d, on chng trnh di y

    for (int i = 0; i < 4; i++) { Console.WriteLine(---); if (i%2 == 0) continue; Console.WriteLine(i = {0}, i); }

    s in ra kt qu nh th ny trong ca s Console:

    --- --- i = 1 --- --- i = 3

    2.4.3.4 Cu lnh return Lnh return c s dng thot khi phng thc ca mt lp, tr iu khin tr v ni gi phng thc. Ty theo kiu d liu tr v ca phng thc l void hoc c mt

  • Gio trnh Visual Studio .NET

    25

    kiu d liu c th, lnh return phi tng ng khng tr v kiu d liu g, hoc l tr v mt gi tr c kiu d liu thch hp.

    2.5 Cu trc chng trnh Trong phn u ca chng ny, chng ta vit mt chng trnh C# n gin u tin. Ti thi im , chng ta ch quan tm n cch thc qun l, bin dch solution, project ca Visual Studio. Sau khi nm vng c cu trc iu khin cng nh mt s c im c th ca ngn ng, gi l lc chng ta xem xt cu trc ca mt chng trnh vit bng C#.

    2.5.1 Lp i tng Lp i tng ng vai tr rt ln trong cc chng trnh C#. Ni mt cch nm na, lp i tng l khun c ra cc i tng c th (gi l instance), nh ngha cc thnh phn d liu v chc nng c th c cho mi i tng c th.

    Thnh vin ca lp i tng l cc d liu v cc hm bn trong lp i tng n, gi l d liu thnh phn v hm thnh phn. Cc thnh vin ca lp i tng c th c khai bo l public (c th c truy xut trc tip t bn ngoi lp i tng), hoc private (ch c nhn thy trong chnh khai bo lp i tng), protected (ch c truy xut t bn trong chnh lp i tng hoc cc lp i tng khc k tha t n).

    D liu thnh phn l cc thnh phn bn trong lp cha d liu cho class c th l cc trng d liu (field), hng s (constant) hoc l cc s kin (event).

    Trng d liu l cc bin c khai bo mc lp i tng. V d di y nh ngha mt lp i tng c tn l PhoneCustomer vi 3 trng d liu CustomerID, FirstName v LastName. Lp ny cng nh ngha mt hng mc lp l DayOfSendingBill.

    class PhoneCustomer{ public const int DayOfSendingBill = 1; public int CustomerID; public string FirstName; public string LastName; }

    Khi to ra mt i tng ca lp i tng PhoneCustomer, chng ta c th truy xut cc trng d liu ny theo dng iTng.TrngDLiu, nh v d di y:

    PhoneCustomer Customer1 = new PhoneCustomer();

  • Gio trnh Visual Studio .NET

    26

    Customer1.FirstName = "Burton";

    Hm thnh phn l cc thnh phn cung cp chc nng x l d liu cho lp i tng. Chng c th l cc phng thc (method), thuc tnh (property), hm khi dng (constructor), hm hy b (destructor), hoc indexer.

    Phng thc (method) l cc hm c khai bo trong lp i tng. Chng c th l phng thc lm vic vi th hin c th ca lp, hoc l phng thc ch hot ng mc lp (phng thc tnh static method).

    Thuc tnh (property) l tp cc hm c th c truy xut theo cch ging nh trng d liu public ca lp i tng. C# cung cp cc c php c bit nh ngha cc thuc tnh ch c, ch ghi hay c truy xut t do.

    Hm khi dng (constructor) l cc hm c bit, c gi mi khi i tng ca lp c to mi. Cc hm khi dng phi c trng tn vi tn lp i tng.

    Hm hy b (destructor) l cc hm c gi khi i tng b hy. Cc hm ny c tn ca lp v c bt u bng k t ~ (du ng).

    Danh sch y cc b t truy cp cc hm thnh phn ca lp c cho bng di y:

    B t truy cp M t

    new n phng thc c cng khai bo c k tha t lp cha

    public Phng thc c th c truy cp t mi ni

    protected Phng thc c th c truy cp bn trong lp khai bo n hoc t mt kiu d liu khc c dn xut t lp khai bo n.

    internal Phng thc c th c truy xut trong phm vi cng assembly. private Phng thc ch c th truy xut trong lp khai bo n.

    static Phng thc hot ng mc lp, khng hot ng vi mt i tng c th.

    virtual Phng thc c th c ghi (override) trong lp dn xut.

    abstract Phng thc ch ng vai tr nh ngha c php, khng ci t. override Phng thc ghi phng thc c nh ngha l virtual hoc abstract lp cha.

    sealed Phng thc ghi phng thc virtual, nhng khng th c ghi bi bt c lp no khi dn xut thm.

    extern Phng thc c ci t t bn ngoi, c th l bng ngn ng khc.

  • Gio trnh Visual Studio .NET

    27

    2.5.2 Kiu d liu cu trc struct C php khai bo kiu d liu cu trc trong C# hon ton tng t nh khai bo lp i tng, ch thay t kha class bng t kha struct.

    Chng hn, y l khai bo kiu cu trc PhoneCustomer:

    struct PhoneCustomer{ public const int DayOfSendingBill = 1; public int CustomerID; public string FirstName; public string LastName; }

    im khc bit gia kiu cu trc v lp i tng l cch m chng c lu tr v truy xut. Lp i tng l kiu d liu tham chiu, c lu tr trong vng nh heap, trong khi , cu trc l kiu d liu gi tr, c lu tr trong vng nh stack. Ngoi ra, cu trc khng th c k tha nh lp i tng.

    2.6 Phng thc

    2.6.1 Khai bo phng thc C php nh ngha mt phng thc trong C# tng t nh C++. im khc bit l, trong C#, mi phng thc c u c khai bo tm truy xut ca n (public, private, protected) v nh ngha lun phn thn phng thc. Ngha l, khng c s dng t kha public: gp nhm nhiu nh ngha phng thc public.

    Di y l c php nh ngha mt phng thc:

    [modifiers] return_type MethodName([parameters]) { // Method body }

    V d, on code di y nh ngha hai phng thc IsSquare() v Move():

    public bool IsSquare(Rectangle rect) { return (rect.Height == rect.Width); } protected void Move(int dX, int dY) { this.x += dX; this.y += dY;

  • Gio trnh Visual Studio .NET

    28

    }

    2.6.2 Truyn tham s cho phng thc Cc i s c th c truyn cho phng thc theo tham chiu hoc gi tr. Bin c truyn theo tham chiu n mt phng thc th s b nh hng bi mi thay i nu c trong thn phng thc, trong khi , bin c truyn theo gi tr th khng b nh hng bi nhng thay i din ra trong thn phng thc.

    Di y l minh ha vic s dng cc i s trong phng thc:

    using System; namespace MinhHoaDoiSo { class ParameterTest { static void SomeFunction(int[] ints, int i) { ints[0] = 100; i = 100; } public static int Main() { int i = 0; int[] ints = { 0, 1, 2, 4, 8 }; // Hien thi danh sach gia tri truoc khi goi phuong thuc Console.WriteLine("i = " + i); Console.WriteLine("ints[0] = " + ints[0]); Console.WriteLine("Thuc hien goi phuong thuc SomeFunction()..."); // Sau khi goi phuong thuc, gia tri trong mang ints duoc thay doi, // nhung gia tri cua i thi khong! SomeFunction(ints, i); Console.WriteLine("i = " + i); Console.WriteLine("ints[0] = " + ints[0]); return 0; } } }

    Mt minh ha kt qu console l nh sau:

    i = 0 ints[0] = 0 Thuc hien goi phuong thuc SomeFunction()... i = 0 ints[0] = 100

  • Gio trnh Visual Studio .NET

    29

    thay i gi tr ca i s i, chng ta phi truyn n nh l mt i s kiu tham chiu. Vic nh ngha mt i s l kiu tham chiu c thc hin bng cch thm t kha ref vo u nh ngha i s, nh v d sau:

    static void SomeFunction(int[] ints, ref int i) { ints[0] = 100; i = 100; }

    V khi thc hin li gi phng thc, t kha ref cng phi c thm vo trc bin truyn cho phng thc:

    SomeFunction(ints, ref i);

    Mt im cn lu l, bin c s dng truyn cho phng thc phi c khi to trc khi thc hin li gi phng thc.

    truyn mt i s lm nhim v cha gi tr u ra ca mt phng thc, chng ta s dng t kha out. Bin c truyn theo kiu nh th ny th khng nht thit phi c khi to trc khi thc hin li gi phng thc, tuy nhin, nu trong thn hm i s khng c gn mt gi tr no th trnh bin dch s bo li.

    Cch s dng i s kiu out l nh v d di y:

    static void SomeFunction(out int i) { i = 100; //phai thuc hien thay doi gia tri cua doi so i trong than phuong thuc!!! } public static int Main() { int i; // chi khai bao bien i, chua can KHOI TAO GIA TRI cho no SomeFunction(out i); Console.WriteLine(i); return 0; }

    2.7 D liu kiu array

    2.7.1 C php khai bo array Array trong C# c khai bo bng cch gn cp du ngoc vung vo sau kiu d liu c s, theo c php di.

  • Gio trnh Visual Studio .NET

    30

    type[] arrayName;

    V d:

    int[] daySo; //khai bao daySo la mot array (co the chua cac so int)

    khi to array, chng ta s dng t kha new, sau ch nh c th kch thc trong cp du ngoc vung. Sau khi khi to, mi phn t trong array c truy xut thng qua tn array cng vi s hiu ca n (c nh s t 0 tr i)

    // Khoi tao mot array voi 32 phan tu du lieu kieu int int kichThuoc = 10 + 20; int[] daySo = new int[kichThuoc]; // luu y co the dung BIEN de xac dinh kich thuoc!!! daySo[0] = 35; // gan gia tri cho phan tu dau tien trong daySo daySo[31] = 432; // gan gia tri cho phan tu thu 32 trong daySo

    Lu rng, chng ta c th s dng gi tr ca bin khi nh ngha kch thc cho array. V, mt khi khi to xong array vi kch thc c th, chng ta khng th thay i kch thc ca array . lm c iu ny, chng ta cn mt kiu d liu khc ArrayList.

    Chng ta cng c th khai bo v nh ngha mt array theo cch ch ra cc phn t c th ca n nh sau:

    string[] myArray = {"first element", "second element", "third element"};

    2.7.2 Lm vic vi array ly kch thc ca array, chng ta s dng thuc tnh Length ca n. Mt s phng thc thng dng i vi d liu kiu array l:

    - Array.Sort(arr): hm tnh, s dng sp xp array arr; arr l array ca cc phn t c kiu c nh ngha sn trong C#.

    - Array.Reverse(arr): hm tnh, s dng o ngc v tr ca cc phn t c trong array arr.

    V d sau minh ha vic khai bo mt array gm cc string, sp xp theo th t ABC, o ngc cc phn t, ri in cc phn t ra Console:

    string[] hoTen = {"Nguyen Van Trung", "Nguyen Hoang Ha", "Tran Nguyen Phong"}; // in danh sach cac phan tu trong array for (int i = 0; i < hoTen.Length; i++)

  • Gio trnh Visual Studio .NET

    31

    Console.WriteLine(hoTen[i]); Array.Sort(hoTen); Array.Reverse(hoTen); // in danh sach cac phan tu trong array su dung cu phap foreach foreach (string stHoTen in hoTen) Console.WriteLine(stHoTen);

    2.7.3 Array nhiu chiu C# h tr hai kiu array nhiu chiu: kiu ma trn (chng hn nh mt ma trn hai chiu l mt array trong mi dng s c cng s ct) v array kiu rng ca.

    V d di y minh ha cch khai bo v khi to mt array kiu ma trn hai chiu:

    string[,] beatleName = { {"Lennon","John"}, {"McCartney","Paul"}, {"Harrison","George"}, {"Starkey","Richard"} };

    Lu rng chng ta s dng du phy phn cch cc chiu trong khai bo array, ngay c khi chng ta cha thc s xc nh kch thc ca mi chiu. khai bo mt array 3 chiu gm cc string, chng ta lm nh sau:

    string[,,] my3DArray;

    Array, sau khi khai bo c th tin hnh khi to gi tr cho cc phn t bn trong, nh sau:

    double [, ] matrix = new double[5, 10]; for (int i = 0; i < 5; i++) { for (int j=0; j < 10; j++) matrix[i, j] = i*j; }

    Sau khi khi to array, chng ta c th xc nh kch thc ca tng chiu bng phng thc GetLength(). Chng hn,

    double [, ] matrix = new double[5, 10]; Console.WriteLine(Kich thuoc chieu thu nhat: {0}, matrix.GetLength(0)); // 5 Console.WriteLine(Kich thuoc chieu thu nhat: {0}, matrix.GetLength(1)); // 10

    Kiu array nhiu chiu th hai l array kiu rng ca, trong kch thc ca mi chiu l c th khc nhau. Chnh xc, y l kiu d liu array ca cc array. on code di

  • Gio trnh Visual Studio .NET

    32

    y minh ha cch nh ngha mt array kiu rng ca:

    int[][] a = new int[3][]; a[0] = new int[4]; a[1] = new int[3]; a[2] = new int[1];

    Tng phn t ca array kiu rng ca s c truy xut nh l mt array mt chiu nh thng thng. Chng trnh di y cho thy r hn cch thc s dng ca array kiu rng ca. Chng trnh ny c nhim v nhn vo mt s nguyn n, sau thnh lp tam gic Pascal ri in tam gic ny ra mn hnh.

    using System; namespace MinhHoaArray { class TamGiacPascal { Console.Write("n = "); int n = int.Parse(Console.ReadLine()); long[][] C = new long[n+1][]; // khoi tao C la 1 array gom n+1 phan tu for (int i = 0; i

  • Gio trnh Visual Studio .NET

    33

    1 4 6 4 1 1 5 10 10 5 1

    2.8 Cc ton t C# h tr cc kiu ton t sau y:

    Loi ton t K hiu S hc + - * / % Logic & | ^ ~ && || ! Cng chui + Tng v gim ++ -- Dch bit > So snh == != < > = Php gn = += -= *= /= %= &= |= ^= = Truy xut thnh phn (cho object v struct) . Indexing (cho array v cc indexers) [] p kiu () iu kin ?: To i tng new Thng tin v kiu sizeof is typeof as iu khin Overflow exception checked unchecked Truy xut a ch v gin tip * -> & []

    Cng ging nh cc ngn ng ta C, chng ta cn phn bit php gn vi php so snh. Chng hn

    x = 3; // gn gi tr 3 cho x

    trong khi , mun so snh x vi 3, chng ta phi ghi nh th ny

    if (x == 3)

    2.8.1 Cc ton t tt Di y l cc ton t vit tt ca C#

    Ton t tt Tng ng vi x++, ++x x = x + 1 x--, --x x = x - 1 x += y x = x + y

  • Gio trnh Visual Studio .NET

    34

    Ton t tt Tng ng vi x -= y x = x y x *= y x = x * y x /= y x = x / y x %= y x = x % y x >>= y x = x >> y x

  • Gio trnh Visual Studio .NET

    35

    byte b = 255; unchecked { b++; } Console.WriteLine(b.ToString());

    Trong trng hp ny, khng c ngoi l no c pht sinh, nhng chng ta s b mt d liu! Lu rng, unchecked l trng thi mc nh!

    2.8.4 Ton t is Ton t is cho php kim tra mt object c tng thch vi mt kiu d liu no hay khng. Trong phn lp trnh hng i tng, chng ta s c dp s dng ton t ny.

    2.8.5 Ton t sizeof Ton t sizeof cho php xc nh kch thc (tnh bng byte) c yu cu bi mt kiu d liu gi tr trn vng nh stack . Xem v d minh ha sau:

    string s = "A string"; unsafe { Console.WriteLine(sizeof(int)); // in ra kich thuoc cua 1 int, la 4 }

    Lu rng, ton t sizeof ch c s dng vi m lnh khng an ton (unsafe code).

    2.9 Enumerations Kiu lit k Mt kiu lit k l mt kiu d liu nguyn do ngi s dng t nh ngha. Khi khai bo mt kiu lit k, chng ta xc nh mt tp cc gi tr c th nhn c thng qua cc tn gi c tnh gi nh.

    Chng ta c th nh ngha mt kiu lit k nh v d sau:

    public enum TimeOfDay { Morning = 0, Afternoon = 1, Evening = 2 }

    Vic s dng kiu d liu lit k s cho php vit cc on m lnh d c, d qun l li logic hn

    class EnumExample {

  • Gio trnh Visual Studio .NET

    36

    public static int Main() { WriteGreeting(TimeOfDay.Morning); return 0; } static void WriteGreeting(TimeOfDay timeOfDay) { switch(timeOfDay) { case TimeOfDay.Morning: Console.WriteLine("Good morning!"); break; case TimeOfDay.Afternoon: Console.WriteLine("Good afternoon!"); break; case TimeOfDay.Evening: Console.WriteLine("Good evening!"); break; default: Console.WriteLine("Hello!"); break; } } }

    Mt c tnh c bit ca kiu lit k cn lu l kh nng chuyn i qua li gia n vi kiu d liu string.

    //enum string TimeOfDay time = TimeOfDay.Afternoon; Console.WriteLine(time.ToString()); // chuoi in ra la Afternoon //string enum TimeOfDay time2 = (TimeOfDay) Enum.Parse(typeof(TimeOfDay), "afternoon", true); Console.WriteLine((int)time2);

    Vic ly chui tng ng ca mt bin gi tr lit k c th tin hnh n gin bng cch s dng phng thc ToString() ca bin. Trong khi , ly gi tr kiu lit k t mt chui tng ng th phc tp hn, chng ta phi s dng phng thc tnh Parse ca lp Enum. Cn c nhiu phng thc khc ca lp Enum; chi tit tham kho bn xem ti liu MSDN.

    2.10 Namespace Namespace l n v gp nhm mang tnh logic. Khi nh ngha mt lp i tng trong mt file C#, chng ta c th a n vo trong mt namespace no . Sau , khi nh

  • Gio trnh Visual Studio .NET

    37

    ngha lp khc c chc nng lin quan vi lp i tng trc , chng ta c th gp n vo trong cng namespace, qua to ra mt nhm logic, cho cc nh pht trin bit rng cc lp i tng trong cng namespace l c lin quan vi nhau.

    namespace BusinessLayer { public struct Student { // Ma lenh dinh nghia struct Student... } }

    Kiu d liu thuc v mt namespace s c tn y c xc nh bng

    namespace.tenKieuDuLieu

    Nh v d trn, tn y ca lp Student s l

    BusinessLayer.Student

    Student cn c gi l tn ngn gn ca kiu d liu.

    Chng ta cng c th lng cc namespace bn trong cc namespace khc, qua to ra cu trc phn lp cho cc kiu d liu.

    namespace HueUni { namespace COSciences { namespace DoIT { class Student { // Ma lenh dinh nghia lop doi tuong Student... } } } }

    Tn namespace bao gm cc tn namespace cha n, phn cch nhau bng du chm, bt u bng namespace ngoi cng nht, v kt thc bng chnh tn ngn gn ca n. V d, tn y ca namespace DoIT l HueUni.COSciences.DoIT

    Chng ta cng c th dng c php nh sau t chc cc namespace:

    namespace HueUni.COSciences.DoIT

  • Gio trnh Visual Studio .NET

    38

    { class Student { // Ma lenh dinh nghia lop doi tuong Student... } }

    Namespace khng tng ng vi assembly. Hon ton c th c cc namespace khc nhau trong cng mt assembly, hay ngc li, c th nh ngha cc kiu d liu cho cng mt namespace nhiu assembly khc nhau.

    2.10.1 Khai bo s dng namespace Vic s dng kiu d liu vi tn y r rng l khng thun tin lm, c bit l khi kiu d liu c nh ngha trong mt namespace mc qu su. C# cho php s dng tn ngn xc nh kiu d liu bng cch xc nh trc namespace ca kiu d liu ny vi t kha using u file m ngun. Chng hn, nu c khai bo

    using HueUni.COSciences.DoIT

    u file m ngun th trong file , chng ta c th s dng tn ngn ca lp i tng Student thay cho tn y ca n l HueUni.COSciences.DoIT.Student

    Trong trng hp tn ngn ca hai kiu d liu thuc v hai namespace cng tham kho l trng nhau, khi s dng kiu d liu, chng ta phi ch r vi namespace c th. Chng hn, gi s lp i tng c tn Student c nh ngha trong c hai namespace HueUni.COSciences.DoiT v HueUni.COSciences.DoP; khi chng ta cn xc nh lp Student bng mt ci tn di hn, DoIT.Student hoc DoP.Student ty theo tng tnh hung.

    using HueUni.COSciences.DoIT; using HueUni.COSciences.DoP; class Test { public static int Main() { DoIT.Student nvtrung = new DoIT.Student(); DoP.Student nhha = new DoP.Student(); return 0; } }

    2.10.2 B danh cho Namespace Mt cch s dng khc ca t kha using l gn b danh cho cc lp i tng v cc

  • Gio trnh Visual Studio .NET

    39

    namespace. C php ca cch s dng ny l nh sau:

    using alias = NamespaceName;

    V d sau y minh ha cch thc s dng b danh namespace:

    using System; using KhoaCNTT = HueUni.COSciences.DoIT; class Test { public static int Main() { KhoaCNTT.Student nvtrung = new KhoaCNTT.Student(); Console.WriteLine(nvtrung.GetNamespace()); return 0; } } namespace HueUni.COSciences.DoIT { class Student { public string GetNamespace() { return this.GetType().Namespace; } } }

    2.11 Bi thc hnh

    Bi thc hnh 1.1. Chng trnh u tin

    Tm tt

    Bi thc hnh ny gip bn lm quen vi mi trng Visual Studio 2005 v cc thao tc nhp xut c bn thng qua giao din bn phm. C th, chng trnh yu cu ngi s dng nhp hai s, sau in ra mn hnh tng, tch v thng ca hai s ny.

    K thut c trnh by

    - Lm quen vi mi trng Visual Studio 2005. Cu trc mt solution, project v cc ti nguyn c lin quan

    - Cch thc s dng th vin MSDN tra cu, hng dn - S dng thao tc nhp xut c bn

  • Gio trnh Visual Studio .NET

    40

    Trnh t thc hin

    1. Khi ng Microsoft Visual Studio 2005. Nhn Ctrl + Shift + N hoc chn menu tng ng l File New Project to mi mt project

    2. Chn loi ng dng cn pht trin l Visual C# Console Application. Chn th mc cha project v t tn cho project. V mt thc cht, Visual Studio coi project thuc v mt solution no , v mt solution c th cha nhiu project. Tuy nhin, trong nhiu bi ton n gin (nh v d ca chng ta chng hn), mt solution ch c 1 project. 3. t tn cho project ca chng ta thnh firstApp. Sau khi nhn nt OK, hy kho st xem cu trc ca th mc cha solution ca chng ta. Bn phi lun nm chc v ngha ca cc tp tin, th mc c to ra trong qu trnh lm vic. 4. G m lnh nh minh ha vo trong phn m ngun ca tp tin Program.cs

  • Gio trnh Visual Studio .NET

    41

    5. S dng MSDN tra cu cc thng tin bn cha bit v: a. Console v cc phng thc ReadLine(), WriteLine() ca n b. Cch chuyn i kiu chui thnh s, v d nh int.Parse()

    6. Nhn Ctrl + F5 thc hin chy chng trnh. Sau quan st cu trc th mc ca solution, cho bit s thay i ca n so vi khi mi c to ra bc 3. 7. Th thay i kt cu lnh thnh

    float thuong = (float)x / y; float thuong = x / y;

    ri chy chng trnh, quan st kt qu v rt ra kt lun.

    8. S dng thm cc cu trc lnh khc tinh chnh hot ng ca chng trnh (x l php chia cho 0, )

  • Gio trnh Visual Studio .NET

    42

    Bi thc hnh 1.2. Module ha chng trnh

    Tm tt

    Vit chng trnh nhp vo mt s nguyn N t bn phm. Sau

    a. In ra mn hnh gi tr N!. b. Nhp thm mt s nguyn K t bn phm. Sau in ra CKN = N!/(K!*(N-K)!)

    K thut c trnh by

    - Cu trc, cch qun l logic v vt l, cch lm vic ca solution v project - Thc hin chia nh ng dng thnh chuyn mn ha cc phn - C bn v cc kiu phng thc trong mt lp

    Trnh t thc hin

    1. M solution lm Bi thc hnh 1.1. Chnh sa tn ca solution t firstApp thnh day1 cho c ngha. Xem cu trc th mc ca solution sau khi thay i.

    2. Thm mt project vo solution ny bng menu lnh File Add New project .

    Tng t nh cch to mi project bi thc hnh trc, chn th loi project l Console Application. t tn cho project mi l modular.

  • Gio trnh Visual Studio .NET

    43

    3. Quan st cu trc cy th mc ca solution trong ca s Solution Explorer v c trong Windows Explorer. rng, trong ca s Solution Explorer, project firstApp c t m. iu ny c ngha, firstApp ng vai tr l Startup project. Khi nhn Ctrl + F5 th project ny s c gi thc thi ch khng phi l project modular m ta mi to ra.

    Trong ca s Solution Explorer, nhp phi chut ln modular. Trong menu hin ra, chn menu lnh Set as Startup project thit lp li startup project cho solution.

    4. Vic nhp n, tnh n! ri in kt qu bn hon ton c th thc hin c bng cc cu lnh n gin. Tuy nhin, tng tnh r rng v ti s dng, bn nn to ra mt phng thc h tr vic tnh ton n!. Xem m lnh bn di

    5. Chy th chng trnh xem kt qu. Hy rng, khai bo phng thc

    giaiThua l static long giaiThua(int n). Th xa static trong khai bo ny ri chy li chng trnh. Li nhn c cho bit ch cc phng thc static mi c triu gi, s dng

    ln nhau 6. Bng cch to ra phng thc long giaiThua() nh trn, chng ta c th gii quyt

  • Gio trnh Visual Studio .NET

    44

    c vn tnh Ckn mt cch d dng. Li gi tnh Ckn nh sau: GiaiThua(n)/(GiaiThua(n-k)*GiaiThua(k))

    7. Hy to ra mt phng thc tnh t hp chp k ca n phn t (bn t quyt nh cc tham s v kiu d liu tr v).

  • Gio trnh Visual Studio .NET

    45

    Bi thc hnh 1.3. To th vin s dng chung

    Tm tt

    Trong thc t, mt ng dng c th l c kh nng thc thi (executable) hoc ch n thun l th vin cha cc chc nng, lp i tng.

    Bi thc hnh ny hng dn bn to th vin cha cc phng thc thng dng. Vi mc ch minh ha, th vin ny ch cha 2 hm tin ch gip tnh giai tha v t hp chp. Sau khi bin dch, bn s c c mt file nh vi phn m rng l DLL. Th vin ny, khi cn, s c tham chiu n trong cc ng dng khc.

    K thut c trnh by

    - To loi ng dng loi th vin Trnh t thc hin

    1. To mi mt project, t tn l commonUtils (common utilities - cc tin ch dng chung). Ch chn loi ng dng cn to l Class Library

    2. Mc nh Visual Studio 2005 s to ra trong namespace CommonUtils mt lp tn l Class1. i tn lp ny li thnh Math. Sau ci t cc phng thc nh sau:

    3. R rng, y khng phi l mt chng trnh chy nh cc ng dng bn vit

  • Gio trnh Visual Studio .NET

    46

    trc - class Math khng c phng thc static public Main() tc l bn khng th nhn Ctrl + F5 chy chng trnh. Bin dch project ny bng menu lnh Build Build commonUtils. Kt qu, bn s c mt th vin commonUtils.dll trong th mc bin\Release hoc bin\Debug ca project ty theo cch chn ch bin dch. Th vin ny s c dng tham chiu n trong cc ng dng cn n.

    M rng

    B sung cc phng thc thng dng khc vo th vin, chng hn nh phng thc xc nh xem mt s c phi l nguyn t hay khng, phng thc hon i gi tr ca hai s cho trc,

  • Gio trnh Visual Studio .NET

    47

    Bi thc hnh 1.4. Tam gic Pascal

    Tm tt

    Vit chng trnh nhp mt s nguyn N t bn phm, sau in ra mn hnh N dng u tin ca tam gic Pascal.

    K thut c trnh by

    - S dng th vin c sn Trnh t thc hin

    1. To mi mt ng dng kiu Console Application. t tn project l pascalTriangle1 2. Thc hin b sung tham kho n th vin commonUtils bng cch:

    - Nhp phi chut vo project pascalTriangle1 trong ca s Solution Explorer - Trong menu hin ra, chn Add Reference

    Trong tab Browse ca hp thoi Add Reference, tm n th vin

  • Gio trnh Visual Studio .NET

    48

    commonUtils.dll to ra trc . D thy rng th vin c tham kho n khng ch c dng DLL m c th c cc dng khc, bao gm EXE, OCX,

    3. Hon thin phn m ngun c s dng tham chiu n th vin va b sung nh hnh di:

    M rng

    Hy t rt ra nhng ghi ch cn thit v vic:

    - Khai bo phng thc C(int n, int k) trong commonUtils l public static long C(int n, int k)

    static, public y c ngha g, c th thay th hoc b i?

    - Tng t cho phng thc giaiThua(int n); Ti sao trong qu trnh s dng phng thc C() li phi ghi y l

  • Gio trnh Visual Studio .NET

    49

    commonUtils.Math.C()? Ch cn ghi Math.C() c c khng?

  • Gio trnh Visual Studio .NET

    50

    Bi thc hnh 1.5. Tam gic Pascal array version

    Tm tt

    S dng array xy dng tam gic Pascal nh Bi thc hnh 1.4.

    K thut c trnh by

    - S dng array Trnh t thc hin

    1. To mi mt project kiu Console Application vi tn l pascalTriangle2 2. S dng cc tnh cht C00 = Ckk = 1, Cnk = Cn-1k-1 + Cn-1k , ta s xy dng mt jagged

    array t nh n ln. Chi tit nh phn m ngun pha di:

  • Gio trnh Visual Studio .NET

    51

    M rng

    C th dng array nhiu chiu trong trng hp ny khng? Nu c th c s khc nhau no so vi dng jagged array?

  • Gio trnh Visual Studio .NET

    52

    CCHHNNGG 33 LLPP TTRRNNHH HHNNGG II TTNNGG VVII CC##

    Trong phn trc chng ta thy cch s dng ca lp i tng. y, chng ta s nhc li mt s khi nim v tnh cht ca lp i tng trc khi ni v tnh hng i tng.

    Lp i tng c nh ngha theo c php:

    class MyClass { private int someField; public string SomeMethod(bool parameter) { } }

    Lp i tng cha cc thnh vin thnh vin l thut ng c s dng ni n d liu hoc hm c nh ngha trong lp. Thut ng hm (funciton) c dng ni n bt k thnh vin no c cha m lnh, bao gm phng thc (method), thuc tnh (property), hm khi dng (constructor), hm np chng ton t (operator overload).

    Lp i tng trong C# l kiu d liu tham chiu. iu ny c ngha l khi bn khai bo mt bin c kiu d liu lp th xem nh bn c mt bin c th cha tham chiu n mt th hin ca lp i tng . Bn cng cn phi khi to ra i tng bng cch dng ton t new.

    MyClass myObject; myObject = new MyClass();

    C hai thao tc khai bo v khi to i tng c th c lm mt ln nh th ny:

    MyClass myObject = new MyClass();

    Do l d liu kiu tham chiu, nn php gn hai bin tham chiu c ngha l cho hai bin d liu tham chiu n cng mt i tng.

    MyClass myObjectRef = myObject;

    Tc l myObjectRef s cng tham chiu n cng i tng m myObject ang tham chiu n. Cc phng thc ca i tng c tham chiu n c th c triu gi t

  • Gio trnh Visual Studio .NET

    53

    c myObjectRef v myObject.

    3.1 n k tha trong C# C# h tr n k tha cho tt c cc lp i tng, tc l mt lp ch c th dn xut trc tip nhiu nht l t mt lp i tng khc. Lp c s nht trong C# l lp System.Object

    class MyDerivedClass : MyBaseClass { // functions and data members here }

    Cng nh mt s ngn ng lp trnh hng i tng, C# c mt s b t truy cp quy nh phm vi m lnh c php truy xut mt thnh vin trong lp i tng.

    Mc truy cp M t public Bin hoc phng thc c th c truy xut t bt c ni no internal Bin hoc phng thc ch c th truy xut trong phm vi cng assembly protected Bin hoc phng thc ch c th truy xut t bn trong kiu d liu m

    n thuc v, hoc cc kiu d liu dn xut protected internal

    Bin hoc phng thc c th c truy xut trong phm vi assembly hin ti, hoc t cc kiu d liu dn xut t kiu d liu cha n

    private Bin hoc phng thc ch c th c truy xut t bn trong kiu d liu m n thuc v

    3.2 Np chng phng thc (Method Overloading) C# h tr np chng phng thc, cho php c nhiu phin bn cho mt phng thc c cc ch k khc nhau. Khi nim ch k ca phng thc y c hiu l tn phng

  • Gio trnh Visual Studio .NET

    54

    thc, s lng i s, kiu i s c s dng trong phng thc.

    Chng hn, lp i tng Student di y c hai phng thc np chng Display():

    class Student { // void Display(string stMessage) { // implementation } void Display() { // implementation } }

    3.3 Ghi phng thc v che du phng thc Bng cch khai bo mt hm lp c s l virtual, chng ta c th ghi hm lp dn xut ca lp ny.

    class MyBaseClass { public virtual string VirtualMethod() { return "Phuong thuc nay la virtual trong MyBaseClass"; } }

    iu ny c ngha l chng ta c th ci t li phng thc VirtualMethod() (vi cng ch k phng thc) trong lp dn xut ca MyBaseClass. Khi chng ta gi phng thc ny t mt th hin ca lp dn xut th phng thc ca lp dn xut s c triu gi ch khng phi l phng thc ca lp c s.

    class MyDerivedClass: MyBaseClass { public override string VirtualMethod() { return "Phuong thuc nay duoc dinh nghia de` trong MyDerivedClass"; } }

    on m lnh di y minh ha hiu ng ca vic ghi phng thc:

    MyBaseClass obj;

  • Gio trnh Visual Studio .NET

    55

    obj = new MyBaseClass(); obj.VirtualMethod(); // in ra Phuong thuc nay l virtual trong MyBaseClass obj = new MyDerivedClass(); obj.VirtualMethod(); // in ra Phuong thuc nay duoc dinh nghia de` trong // MyDerivedClass

    on m lnh trn, chng ta thy rng, vic quyt nh phin bn no ca phng thc VirtualMethod ( lp MyBaseClass hay MyDerivedClass) c s dng l ty thuc vo ni dung hin ti ca i tng m obj tham chiu n. Ni cch khc, vic quyt nh phin bn phng thc triu gi c quyt nh trong thi gian thc thi chng trnh ch khng phi l trong lc bin dch chng trnh! c tnh ny cn c gi l tnh gn kt mun (late-binding) trong k thut lp trnh.

    Trong lp i tng, cc trng d liu hoc cc hm tnh khng c khai bo l virtual.

    Nu mt phng thc vi ch k c khai bo trong c lp c s v lp dn xut, nhng cc phng thc khng c khai bo tng ng l virtual v override, th phin bn phng thc lp dn xut c gi l che du phin bn lp c s. Trong tnh hung ny, phin bn ca phng thc c s dng hot ng s ty thuc vo kiu d liu ca bin c s dng tham chiu n i tng th hin ch khng phi l chnh i tng th hin. iu ny c th hin trong cch thc hot ng ca on m lnh di y:

    class MyBaseClass { public string VirtualMethod() // KHONG DUOC KHAI BAO LA virtual NUA!!! { return "Phuong thuc nay la virtual trong MyBaseClass"; } } class MyDerivedClass: MyBaseClass { public string VirtualMethod() // KHONG DUOC KHAI BAO LA override NUA!!! { return "Phuong thuc nay duoc dinh nghia de` trong MyDerivedClass"; } } MyBaseClass obj; // obj la bien kieu MyBaseClass phien ban VirtualMethod() duoc // su dung DUOC QUYET DINH NGAY LUC BIEN DICH la cua MyBaseClass obj = new MyBaseClass(); obj.VirtualMethod(); // in ra Phuong thuc nay l virtual trong MyBaseClass

  • Gio trnh Visual Studio .NET

    56

    obj = new MyDerivedClass(); obj.VirtualMethod(); // van in ra Phuong thuc nay l virtual trong MyBaseClass!!!

    Trn thc t, khi bin dch on m lnh tng t nh trn, trnh bin dch s a ra cnh bo v vic phng thc b che giu. trnh khi cnh bo nh vy, bn khai bo phng thc c nh ngha li trong lp dn xut thm vi t kha new.

    3.4 Gi phng thc vi phin bn ca lp c s C# c mt c php c bit cho php trong lp dn xut c th triu gi phng thc vi phin bn c ci t lp c s: base.(). V d:

    class Student { public virtual void Dispaly() { Console.WriteLine(Thong tin chung cua sinh vien...); } } class ITStudent: Student { public override void Display() { base.Display(); Console.WriteLine(Thong tin rieng doi voi sinh vien CNTT....); } }

    Lu rng cch gi phng thc base.() gi mi phng thc ca lp c s l c th c s dng cho bt k phng thc no trong lp dn xut, ch khng nht thit l trong cng phng thc c ghi .

    3.5 Lp tru tng v hm tru tng C# cho php c lp i tng v hm c khai bo l abstract (tru tng). Mt lp tru tng th khng th c to th hin, trong khi , mt hm tru tng th khng th c phn ci t, v phi c ghi bi mt hm khng tru tng trong lp dn xut (hm tru tng mc nhin c xem l virtual trong lp c s).

    Trong mt lp tru tng, ch c th c khai bo trng d liu thnh phn v cc ch k ca phng thc, khng c phn ci t ca phng thc.

    abstract class SinhVien {

  • Gio trnh Visual Studio .NET

    57

    private bool damaged = false; // field public abstract decimal DiemTrungBinh(); // abstract method }

    3.6 Lp b nim phong v phng thc b nim phong C# cho php c lp i tng v phng thc c khai bo l nim phong. Lp b nim phong (sealed class) l lp khng c dn xut thm. Phng thc b nim phong (sealed method) l phng thc khng th c ghi lp dn xut.

    V d v lp b nim phong:

    sealed class FinalClass { // cai dat cho lop FinalClas } class DerivedClass : FinalClass // LOI KHI BIEN DICH!!! { //// }

    V d v phng thc b nim phong:

    class MyClass { public sealed override void FinalMethod() { // cai dat cho phuong thuc bi niem phong } } class DerivedClass : MyClass { public override void FinalMethod() // LOI KHI BIEN DICH { } }

    3.7 Np chng ton t C# cung cp c ch np chng ton t, cho php ci t m lnh quyt nh cch thc mt lp i tng lm vic vi ton t thng thng. C php np chng mt ton t l nh sau:

    public static operator (parameter list) { cai dat ma lenh o day}

  • Gio trnh Visual Studio .NET

    58

    Cc quy tc cn tun th khi ci t v s dng phng thc np chng ton t:

    Bt buc phi c b t truy cp public v static. Kiu d liu tr v l kiu lp i tng khi lm vic vi cc lp i tng. Kiu d

    liu tr v khng c l void. op l ton t hai ngi, mt ngi (unary), hoc ton t quan h. C hai ton t == v

    != phi c ci t theo cp. Cc ton t hai ngi yu cu hai i s, ton t mt ngi ch yu cu mt i s..

    V d di y xy dng mt lp m phng kiu d liu s phc vi cch s dng cc php ton +, - n gin:

    public class ComplexNumber { private int real; private int imaginary; public ComplexNumber() : this(0, 0) // constructor { } public ComplexNumber(int r, int i) // constructor { real = r; imaginary = i; } // Ghi de phuong thuc ToString() de hien thi so ao theo dang thong thuong: public override string ToString() { return(System.String.Format("{0} + {1}i", real, imaginary)); } // Nap chong toan tu '+': public static ComplexNumber operator+(ComplexNumber a, ComplexNumber b) { return new ComplexNumber(a.real + b.real, a.imaginary + b.imaginary); } // Nap chong toan tu '-': public static ComplexNumber operator-(ComplexNumber a, ComplexNumber b) { return new ComplexNumber(a.real - b.real, a.imaginary - b.imaginary); } } class TestComplexNumber {

  • Gio trnh Visual Studio .NET

    59

    static void Main() { ComplexNumber a = new ComplexNumber(10, 12); ComplexNumber b = new ComplexNumber(8, 9); System.Console.WriteLine("a = {0}", a.ToString()); System.Console.WriteLine("b = {0}", b.ToString()); ComplexNumber c = a + b; System.Console.WriteLine("c = a + b = {0}", c.ToString()); ComplexNumber d = a - b; System.Console.WriteLine("d = a - b = {0}", d.ToString()); } }

    Nh chng trnh minh ha, sau khi np chng ton t + v -, bn c th s dng hai php ton + v i vi d liu ComplexNumber mt cch trc tip. y, kt qu nhn c s l:

    a = 10 + 12i b = 8 + 9i c = a + b = 18 + 21i d = a - b = 2 + 3i

    3.8 Bi thc hnh Bi thc hnh 3.1: Qun l sinh vin

    Tm tt

    Vit chng trnh qun l sinh vin ca mt trng. Sinh vin c th hc cc chuyn ngnh Cng ngh Thng tin, Vt l, Ng vn. Mi chuyn ngnh tng ng c cc mn hc khc nhau.

    Sinh vin khoa Cng ngh Thng tin phi hc 3 mn Pascal, C# v SQL. Sinh vin khoa Vt l phi hc 4 mn: C hc, in hc, Quang hc, Vt l ht

    nhn. Sinh vin khoa Vn phi hc 2 mn Vn hc c in v Vn hc Hin i

    Chng trnh cho php nhp danh sch sinh vin, sau in danh sch sinh vin cng vi im trung bnh ca h ra mn hnh.

    In ra danh sch nhng sinh vin c im trung bnh cao trn 5.0 ra mn hnh. Thng tin hin th c dng H tn, Chuyn ngnh o to, im trung bnh.

  • Gio trnh Visual Studio .NET

    60

    K thut c trnh by

    - Truy xut tp tin c nh dng cho trc - S dng mt phng thc ca lp String - Cc k thut hng i tng c s dng trong bi ton thc t

    Trnh t thc hin

    1. Trc khi tin hnh ci t, ta kho st qua s lp c s dng. Vi nhng m t kh r rng trong yu cu bi ton, ta c c ci nhn tng quan v cc lp nh sau:

    Lu rng, phng thc dtb() c ci t l virtual chng ta c th override mt cch c th, chi tit hn trong cc lp k tha t class SinhVien. Phng thc ToString() c ci t override t lp object s dng trong vic in ni dung ca i tng.

    2. To mi mt project kiu Console Application vi tn l studentManager 3. Ti cy phn cp Solution Explorer nhp phi chut v chn Add New Item

    Trong hp thoi hin ra, chn to mi class SinhVien.cs

  • Gio trnh Visual Studio .NET

    61

    4. Ci t cc thnh phn c bn cho lp SinhVien

  • Gio trnh Visual Studio .NET

    62

    5. B sung thm cc class SinhVienCNTT, SinhVienVan, SinhVienVL theo phn tch

    thit k lp t trc. Di y l phn m t ci t cho lp SinhVienVan. Hai lp cn li SinhVienCNTT, SinhVienVL c ci t mt cch tng t.

  • Gio trnh Visual Studio .NET

    63

    6. Trong phn chng trnh (tp tin Program.cs) chng ta thc hin yu cu bi ton

    nh sau:

  • Gio trnh Visual Studio .NET

    64

    Yu cu thm

    - In ra 3 sinh vin c im trung bnh cao nht trng. - Chnh sa ngi s dng c th nhp danh sch m khng bit trc s lng

    sinh vin (s dng vng lp while, do, ) - Chnh sa c th nhp d liu cc sinh vin t file.

  • Gio trnh Visual Studio .NET

    65

    3.2 Bi thc hnh trn Winform

    Bi thc hnh 3.2.1 helloWinForms

    K thut c trnh by

    - Cu trc ca v c ch hot ng ca mt project Windows Form Application. - C ch x l s kin ca cc Control trong mt Windows Form - Mt s phng thc, thuc tnh, s kin quan trng ca cc iu khin trong mt

    Windows Form. Trnh t thc hin

    1. To mi mt ng dng kiu Windows Form Application vi tn l 01-helloWindowsForm nh hnh v

    2. Theo mc nh, mt solution vi mt project c to ra. Project ny c mt lp

    Form1. Kho st ni dung ca project trong Windows Explorer, chng ta s thy cu trc

  • Gio trnh Visual Studio .NET

    66

    ca th mc v cc tp tin tng t nh hnh di:

    C th thy, mi Form c to ra tng ng vi 3 tp tin c tip u ng l ging nhau, ly v d l Form1

    Form1.Designer.cs: cha cc m lnh do Form Designer t sinh ra tng ng vi cc thao tc do ngi s dng ko th cc Control t ToolBox vo b mt Form hay thc hin cc thit lp i vi cc Control.

    Form1.cs: cha phn m lnh v khai bo thm do ngi s dng ci t. Form1.resx: cha cc m t, khai bo v cc ti nguyn c s dng trong

    Form.

    3. Chng ta cng c th quan st cu trc ca solution hay project bng cch kho st ca s Solution Explorer:

  • Gio trnh Visual Studio .NET

    67

    4. T ca s Solution Explorer, i tn tp tin Form1.cs thnh FormMain.cs.

    rng, c ba tp tin lin quan n Form1 u c thay i theo mt cch ng b. 5. Thit k giao din cho FormMain nh hnh v

  • Gio trnh Visual Studio .NET

    68

    6. Bc tip theo, chng ta s thc hin ci t phng thc x l s kin Click ca

    nt bm btnCurrentTime: a. Chn iu khin nt bm btnCurrentTime trong ca s thit k Form. b. trang Event trong ca s Properties Windows, nhp p chut vo s kin

    Click (xem hnh v di). Form Designer s sinh ra phng thc x l s kin c tn mc nh l btnCurrentTime_Click(). (Phng thc x l s kin c mc nh t tn l _)

  • Gio trnh Visual Studio .NET

    69

    Son tho phn m lnh cho phng thc ny nh sau:

    7. Thc hin chy chng trnh, khi nhn vo nt bm btnCurrentTime, mt hp thng

    bo c hin th ra nh hnh v

    8. Thc ra chng ta c th t t tn cho phng thc x l s kin. Chng hn, ci

    t phng thc x l s kin MouseEnter cho nt bm btnCurrentTime, trong ca s Properties trang Events, tm n mc MouseEnter v:

  • Gio trnh Visual Studio .NET

    70

    a. Nhp vo tn phng thc x l s kin: btn_MouseEnter b. Nhn Enter c. FormDesigner s to ra phng thc vi tn tng ng

    d. Tin hnh ci t m lnh cho phng thc x l s kin trn nh sau:

    private void btn_MouseEnter(object sender, EventArgs e) { btnCurrentTime.ForeColor = Color.Red; }

    9. Tng t, chng ta ci t tip phng thc x l s kin MouseLeave cho nt bm

    btnCurrentTime nh sau private void btn_MouseLeave(object sender, EventArgs e) { btnCurrentTime.ForeColor = SystemColors.ControlText; }

    10. Chy chng trnh v quan st kt qu: iu khin nt bm btnCurrentTime s c hiu ng mouse hover kh n tng: khi r con tr chut vo nt bm btnCurrentTime, mu ch ca n s i sang mu ; mu ch ca nt bm tr

  • Gio trnh Visual Studio .NET

    71

    thnh bnh thng (mu ControlText) khi con tr chut r ra khi nt bm. 11. tm hiu k hn bn cht ca vic gn kt phng thc x l s kin, chng ta

    nhp p chut vo FormMain.Designer.cs trong ca s Solution Explorer xem phn ni dung c sinh ra bi Form Designer:

  • Gio trnh Visual Studio .NET

    72

  • Gio trnh Visual Studio .NET

    73

    Ch nhng phn c t sng trong hnh v ni trn; t suy ra c bn cht ca vic gn kt phng thc x l s kin trong khi thit k.

    12. ng file ni dung FormMain.Designer.cs li. Cc bc tip theo s minh ha cch thc dng chung mt phng thc x l s kin cho nhiu i tng khc nhau.

    13. Trong ca s thit k ca FormMain, thc hin a. Chn c hai i tng btnClose v btnAbout b. Trong trang Events ca ca s Properties, g tn phng thc x l s kin

    Click cho c hai iu khin nt bm ny l btnTask_Click ri nhn Enter (xem hnh v)

    14. Thc hin ci t m lnh cho phng thc ny nh sau:

  • Gio trnh Visual Studio .NET

    74

    private void btnTask_Click(object sender, EventArgs e) { if (sender == btnClose) this.Close(); else if (sender == btnAbout)1 MessageBox.Show("Day la chuong trinh minh hoa", "Thong bao"); }

    Trong phng thc trn, chng ta s dng i s sender nhn bit iu khin no pht sinh s kin. Chng ta cng c th thc hin nh th ny:

    private void btnTask_Click(object sender, EventArgs e) { string stTask = (sender as Button).Text; 2 if (stTask == "Close") this.Close(); else if (stTask == "About") MessageBox.Show("Day la chuong trinh minh hoa", "Thong bao"); }

    15. By gi, chng ta tinh chnh thm chng trnh h tr hiu ng mouse hover cho tt c cc iu khin trong form:

    a. Sa li phn m ngun cho 2 phng thc x l s kin btn_MouseEnter v btn_MouseLeave nh sau:

    private void btn_MouseEnter(object sender, EventArgs e) { (sender as Control).ForeColor = Color.Red; } private void btn_MouseLeave(object sender, EventArgs e) { (sender as Control).ForeColor = SystemColors.ControlText;

    1 Thc ra khng nht thit phi c nhnh else if, ch cn else l , bi v y chng ta ch p dng phng thc ny cho hai iu khin btnClose v btnAbout!. 2 Php chuyn kiu (sender as Button) trong cu lnh ny l thnh cng v c btnClose v btnAbout u l cc iu khin kiu Button

  • Gio trnh Visual Studio .NET

    75

    }

    b. Trong phn FormDesigner, chn tt c cc i tng trn b mt Form. c. Trong ca s Properties, chn phng thc x l s kin MouseLeave cho

    tt c cc i tng ang chn l btn_MouseLeave (xem hnh v)

    d. Lm tng t gn phng thc x l s kin MouseEnter cho tt c cc

    iu khin ni trn l btn_Enter. e. Chy chng trnh xem hiu ng: khi r con tr chut qua cc iu

    khin, font ch ca chng s c i thnh mu . 16. Trong bc 11, chng ta bit c cch thc a mt thnh phn iu khin

    vo giao din ca mt Windows Form thng qua m lnh (bng cch tm hiu phn m sinh ra bi Form Designer). By gi, chng ta s p dng thc hin thm cc iu khin vo Form v gn phng thc x l s kin cho chng trong thi gian thc thi chng trnh

    a. B sung vo Form mt nt bm btnCreateButton

  • Gio trnh Visual Studio .NET

    76

    b. Ci t phng thc x l s kin Click cho nt bm ny nh sau:

  • Gio trnh Visual Studio .NET

    77

    c. Chy chng trnh v quan st kt qu.

  • Gio trnh Visual Studio .NET

    78

    M rng

    - Hy tm hiu ngha ca vic ci t m lnh bc 15.a: (sender as Control). C th s dng php p kiu no khc khng? Ti sao?

    - iu chnh trong giao din chng trnh, trong c mt s iu khin (Label, TextBox, RadioButton, CheckBox hoc Button) s dng mu khc vi mu mc nh (l SystemColors.ControlText). Khi , hiu ng mouse hover hot ng khng ng na. Hy chnh sa chng trnh khc phc pht sinh ny.

  • Gio trnh Visual Studio .NET

    79

    Bi thc hnh 3.2.2 usingControls

    Tm tt

    Xy dng chng trnh in thng tin c nhn nh minh ha

    K thut c trnh by

    - Gii thiu mt ng dng WinForms c bn - Cch thc lu file vi ni dung ting Vit - Cc thnh phn iu khin c bn: Button, Label, TextBox, PictureBox, Timer, - Np mt nh t file

    Trnh t thc hin

    1. To mi mt project loi Windows Application, t tn l usingControls 2. Theo mc nh, mt lp Form1 c sinh ra. Chnh sa cc thuc tnh ca Form1

    vi cc gi tr nh bng di:

    Thuc tnh Gi tr Ghi ch

    Name FormMain

  • Gio trnh Visual Studio .NET

    80

    Text Hello WinForms Tiu ca ca s

    FormBorderStyle FixedSingle Kch thc ca ca s s khng c thay i khi chy chng trnh

    MaximizeBox False V hiu ha nt Maximize ca ca s

    Ch rng, nhng thuc tnh c thay i gi tr so vi mc nh s c hin th trong ca s Properties di dng ch in m

    3. Thit k giao din ca form nh minh ha. Lu , vi mi iu khin bn a vo form, nu d nh truy xut n trong phn m ngun khi lp trnh th hy t tn n thay v nh tn mc nh.

    Chnh sa thuc tnh ca mt s i tng nh sau:

    iu khin Thuc tnh Gi tr

  • Gio trnh Visual Studio .NET

    81

    dtpDOB Format Custom

    CustomFormat dd/MM/yyyy

    txtOther Enable False

    lblInfo Font Chn font thch hp, in m

    picImage SizeMode StretchImage

    lblName BackColor Transparent (Web)

    tmrScroll Interval 120

    4. Nhn Ctrl + S lu ni dung project. Do chng ta c s dng k t ting Vit

    trong Form nn Visual Studio c hin th hp thoi yu cu ch nh bng m lu k t:

    Nhn nt Save With Other Encoding chn bng m thch hp sau bn c th chn cch lu theo UTF8 nh hnh di (cng c th chn ty chn Unicode Codepage 1200):

  • Gio trnh Visual Studio .NET

    82

    5. Ci t phn m lnh cho s kin Click ca nt bm btnSelectImage nh sau:

    Khi ngi s dng nhn vo nt ny, mt hp thoi s hin ra cho php chn nh. Ch cc tp tin c phn m rng l BMP, JPG, GIF mi c hin th la chn. iu ny c thit lp thng qua thuc tnh Filter ca i tng dlgOpen (thuc lp OpenFileDialog).

    6. Khi ngi s dng g tn ca h vo txtName th ni dung ca lblName cng thay i theo. Mun vy, ta ci t m lnh cho s kin TextChanged ca txtName nh (1) xem minh ha code di

    7. i tng txtOther ch c s dng (Enabled) khi m chkOther c check vo, do ta cng ci t m lnh cho s kin CheckChanged ca chkOther nh (2)

    8. Khi nhn nt Cp nht th ni dung ca lblInfo c cp nht theo nh phn m lnh ci t cho s kin Click ca btnUpdate (3)

    9. Ngi s dng c th bt tt ch cun ni dung dng ch lblInfo bng cch nhn chut vo n. Ci t m lnh cho s kin Click ca lblInfo nh (5)

  • Gio trnh Visual Studio .NET

    83

    10. cun ni dung dng ch, ci t m lnh cho s kin Tick ca tmrScroll nh (4)

  • Gio trnh Visual Studio .NET

    84

    CCHHNNGG 44.. XX LL DD LLIIUU VVII AADDOO..NNEETT

    X l d liu l nhim v ph bin v quan trng ca nhiu chng trnh ng dng. D liu c truy xut, x l ca mt chng trnh ng dng c th l mt tp tin vn bn, tp tin cc bn ghi, hay l mt ngun d liu t CSDL no . .NET Framework cung cp mt lng ln cc thnh phn giao din (Win Forms, Web Forms) h tr cho vic trnh by, kt buc (bind) d liu. Cng vi l nn tng x l d liu ADO.NET cung cp cch thc lm vic vi nhiu loi ngun d liu khc nhau mt cch linh ng. Do tnh cht quan trng ca vic x l d liu trong mt ng dng cng vi s phc tp ca ADO.NET, trc khi bt tay vo thc hin cc bi tp thc hnh, chng ta kho st qua mt s im l thuyt c bn.

    4.1 Kin trc tng quan ca ADO.NET Kin trc ca ADO.NET c m t nh hnh di, bao gm hai thnh phn chnh: Thnh phn truy cp ngun d liu v thnh phn lu tr x l d liu.

    Thnh phn th nht:.NET Framework Data Provider c thit k thc hin cc thao tc kt ni, gi cc lnh x l n CSDL (thnh phn ny cn c gi vi mt tn khc l lp kt ni Connectectivity Layer). Trong ADO.NET, c 4 i tng chnh vi cc chc nng c bn nh sau:

  • Gio trnh Visual Studio .NET

    85

    Connection: gip thc hin kt ni n cc CSDL Command: gip truy cp n CSDL v thc hin cc pht biu SQL hay th tc lu

    tr sn (stored procedure) ca CSDL DataReader: dng c nhanh ngun d liu, ch c duyt tun t theo chiu

    tin ca cc record DataAdapter: dng chuyn d liu truy vn c cho cc i tng lu tr v x

    l (DataSet, DataTable). DataAdapter ch yu thc hin cc thao tc nh SELECT, INSERT, UPDATE, DELETE

    V mt thc cht, thnh phn .NET Framework Data Provider cung cp giao din lp trnh chung lm vic vi cc ngun d liu. Mi nh cung cp 3 c th s a ra mt loi data provider ring. Di y l bng m t giao din lp trnh cng vi cc lp c bn ca cc data provider m ADO.NET cung cp sn:

    Interface SQL Server Provider

    Oracle Provider OLEDB Provider ODBC Provider

    IDbConnection SqlConnection OracleConnection OledbConnection OdbcConnection IDbDataAdapter SqlDataAdapter OracleDataAdapter OledbDataAdapter OdbcDataAdapter IDbCommand SqlCommand OracleCommand OledbCommand OdbcCommand IDbDataReader SqlDataReader OracleDataReader OledbDataReader OdbcDataReader

    s dng data provider no, chng ta phi tin hnh khi bo using namspace tng ng. Chng hn, using System.Data.SqlClient;

    Ngoi nhng data provider m t bng trn, chng ta c th reference n cc data provider khc khng c tch hp sn bi ADO.NET trong Visual Studio .NET, chng hn nh data provider dng cho MySQL, Postgre,

    Thnh phn th hai trong kin trc ADO.NET DataSet c xem nh l container dng lu tr i tng lin quan n d liu nh DataTable, DataRelation, DataView. Thnh phn ny cn c gi l lp khng kt ni (disconected layer).

    3 Nh cung cp y c hiu theo ngha c v loi ngun d liu ln cch thc truy xut ngun d liu. V d, ngoi data provider SqlClient do Microsoft cung cp, cng c th c mt t chc khc pht trin mt provider khc truy xut loi ngun d liu ny.

  • Gio trnh Visual Studio .NET

    86

    DataSet nh l mt CSDL thu nh ti my client, c th cha cc i tng table, view, constaint, ralationship gia cc table, Tt c d liu t ngun d liu thc s c np vo DataSet di dng cc DataTable, l mt snapshot ca ngun d liu thc. Khi d liu ny s c chnh sa c lp, sau nu cn s c cp nht tr li ngun d liu thc. Theo nguyn tc ny, chng ta khng cn duy tr kt ni lin tc mt cch khng cn thit vi ngun d liu thc trong sut qu trnh thao tc vi n.

    4.2 Tng quan v cc m hnh x l d liu trong ADO.NET

    4.2.1 M hnh Kt ni Trong m hnh kt ni ca ADO.NET, c mt connection hot ng c duy tr

    gia i tng DataReader ca ng dng v mt data source (ngun d liu). Mt dng d liu (data row) c tr v t data source mi khi phng thc Read ca i tng DataReader c thc thi. im quan trng nht ca m hnh kt ni l d liu c ly t tp d liu (cc record c tr v bi mt lnh SQL no ) theo kiu tng record mt cho mt ln c, ch c (read-only), v ch theo mt hng tin (forward-only). Hnh di y m t cch s dng DataReader trong ch kt ni.

    Cc bc in hnh lm vic vi i tng DataReader l nh sau:

    1. To i tng Connection bng cch truyn mt chui Connection string cho hm khi dng ca n.

    2. Khi to mt bin chui v gn cho cu lnh SQL da theo d liu mun np v.

    3. Khi to mt i tng Command t vi ni dung cu lnh SQL xc nh trn.

    4. To i tng DataReader bng cch thc thi phng thc Command.ExecuteReader(). i tng ny sau s c dng c kt qu ca cu truy vn mi dng mt ln.

    on code sau minh ha cc bc trn vi Data Provider SqlClient. on code s c

  • Gio trnh Visual Studio .NET

    87

    danh sch h tn cc sinh vin trong mt bng SinhVien ca c s d liu v hin th ln mt iu khin ListBox. Chi tit v cc i tng DataReader, Command, Connection s c cp chi tit sau.

    using System.Data.SqlClient; ... // (1) Tao Connection SqlConnection cn = new SqlConnection(chuoiKetNoi); cn.Open(); // (2) Chuoi SQL thuc hien lay danh sach ten cac sinh vien xep tang dan theo NgaySinh string sql = "SELECT HoTen FROM SinhVien ORDER BY NgaySinh"; // (3) Tao doi tuong Command SqlCommand cmd = new SqlCommand(sql, conn); DbDataReader rdr; // (4) Tao doi tuong DataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection); while (rdr.Read()) listBox1.Items.Add(rdr["HoTen"]); // Fill ListBox rdr.Close(); // Dong datareader sau khi da su dung xong

    Tham s c s dng trong phng thc ExecuteReader xc nh i tng Connection s c ng sau khi DataReader c ng.

    4.2.2 M hnh Ngt Kt ni Trit l ca m hnh Ngt kt ni l: D liu c np s dng mt lnh SQL t ngun d liu bn ngoi vo b nh m ti my client; tp kt qu c x l ti my cc b; mi cp nht sau s c truyn t d liu trong b nh ngc tr li ngun d liu.

    M hnh c gi l ngt kt ni bi v i tng kt ni ch c m lu c d liu t ngun d liu v tin hnh cc thao tc cp nht. Bng cch a d liu v pha my client, ti nguyn ca server chng hn nh thng tin d liu Connection, b nh, thi gian x l s c gii phng bt. Tuy vy, m hnh ny cng c nhc im v thi gian cn np tp d liu v b nh dng cha d liu ti my client.

    Nh hnh di y minh ha, cc thnh phn chnh ca m hnh ngt kt ni l DataApdapter v DataSet. DataAdapter lm nhim v nh l cu ni gia ngun d liu v DataSet, np d liu vo cc bng ca DataSet v y cc thay i ngc tr li ngun

  • Gio trnh Visual Studio .NET

    88

    d liu. Mt DataSet ng vai tr nh l mt c s d liu quan h nm trong b nh, cha mt hay nhiu DataTables, gia cc DataTable ny cng c th c cc mi quan h vi nhau nh trong mt c s d liu quan h thc. Mt DataTable cha cc dng v cc ct d liu thng c ly t c s d liu ngun.

    Trong s cc phng thc v thuc tnh ca DataAdapter th Fill() v Update() l hai phng thc quan trng nht. Fill() chuyn mt query n c s d liu v lu tp kt qu tr v trong mt DataTable no ; phng thc Update() thc hin mt thao tc thm, xa, cp nht da trn nhng thay i ca i tng DataSet. Cc lnh cp nht thc s c cha trong cc thuc tnh ca DataAdapter. Chi tit v DataAdapter s c cp phn sau.

    minh ha cch thc lm vic vi DataAdapter v DataSet, on code di y gii thiu cch to ra mt i tng DataTable, np d liu t mt c s d liu, v a n vo mt DataSet.

    string sql = "SELECT MaSinhVien, HoTen, NgaySinh FROM SinhVien"; string connStr = "Data Source=MYSERVER;Initial Catalog=qlsinhvien; User Id=k28;Password=k28;"; // (1) Tao doi tuong data adapter SqlDataAdapter da = new SqlDataAdapter(sql, connStr); // (2) Tao doi tuong dataset DataSet ds = new DataSet(); // (3) Tao mot Table co ten SinhVien trong dataset va nap du lieu cho no da.Fill(ds, "SinhVien"); // (4) Hien thi danh sach ten sinh vien ra list box DataTable dt = ds.Tables["SinhVien"]; for (int i=0; i< dt.Rows.Count;i++) { DataRow row = dt.Rows[i]; listBox1.Items.Add(row["HoTen"]); }

  • Gio trnh Visual Studio .NET

    89

    Bc u tin l to ra mt th hin ca SqlDataAdapter bng cch truyn mt cu lnh SELECT v chui kt ni cho phng thc khi dng ca lp ny. DataAdapter s lo n vic to ra i tng Connection cng nh vic m, ng Connection khi cn thit. Sau khi mt DataSet rng s c to ra, phng thc Fill() ca DataAdapter s to ra mt DataTable c tn l SinhVien trong DataSet v np cc dng d liu vo DataTable ny (bng cu ln SQL dng SELECT ca DataAdapter). Mi column ca DataTable s tng ng vi mt column trong bng ca c s d liu ngun. D liu trong bng d liu sau c a vo mt ListBox bng cch duyt qua danh sch cc dng ca DataTable.

    4.3 Lm vic vi m hnh Kt ni trong ADO.NET Nh m t tng quan trong phn trc, m hnh Kt ni c da trn vic thit

    lp mt Connection n CSDL v sau s dng cc Command thc hin vic thm, xa, sa, hay c d liu t data source (ngun d liu) c kt ni. c im phn bit ca m hnh ny l cc Command c pht sinh, lm vic vi data source thng qua mt Connection ang hot ng Connection ny s m cho n khi cc thao tc c hon tt. Cho d l lm vic vi m hnh Kt ni hay Ngt kt ni, bc u tin trong qu trnh truy xut mt data source l to ra mt i tng Connection lm ng truyn gia ng dng vi data source.

    4.3.1 Lp Connection C nhiu lp Connection trong ADO.NET mi lp tng ng vi mt Data Provider bao gm SqlConnection, OracleConnection, OleDbConnection, OdbcConnection. Mc d mi lp c th gm nhng c tnh ring, nhng cc lp ny u phi implement interface IDbConnection. Bng di y tm tt cc thnh phn c nh ngha bi interface ny.

    Loi Tn M t Property ConnectionString Get/Sets chui kt ni n data source. Property ConnectionTimeout Khong thi gian ti a tnh bng giy ch thc hin

    vic kt ni n data source Property Database Tn CSDL ng vi Connection hin ti Property State Trng thi hin ti ca Connection. Tr v mt gi tr

    kiu lit k (enumeration): Broken, Closed, Connecting, Executing, Fetching, hoc Open

  • Gio trnh Visual Studio .NET

    90

    Loi Tn M t Method Open

    Close M mt Connection. Roll back mi thao tc ang lm d. ng Connection tr Connection cho Connection Pool nu nh c s dng Connection Pool

    Method BeginTransaction Khi to mt database transaction Method ChangeDatabase Thay i CSDL hin ti cho Connection ang m.

    Chui m t tn CSDL mi c truyn cho phng thc ny

    Method CreateCommand To ra mt i tng Command ng vi Connection

    4.3.1.1 Connection string Thuc tnh ConnectionString xc nh data source v cc thng tin cn thit truy

    xut data source, chng hn nh User ID v Password, Ngoi nhng thng tin c bn ny, Connection string cn c th cha cc gi tr cho cc trng d liu c trng cho data provider. V d, Connection string cho Ms Sql Server c th cha cc gi tr quy nh Connection Timeout v Packet Size.

    Di y l cc v d v cch thnh lp chui kt ni cho cc data provider thng gp. Danh sch y v cch thnh lp cc chui kt ni c cho Error! Reference source not found..

    SqlConnection s dng c ch xc thc kiu SQL Server:

    server=(1);database=(2);uid=(3);pwd=(4) hoc

    Data Source=(1);Initial Catalog=(2);User ID=(3);Password=(4)

    SqlConnection s dng c ch xc thc kiu Windows:

    Server=(1);Database=(2);Trusted_Connection=yes

    y, (1) l tn/my ch cha CSDL, (2) l tn CSDL, (3) l tn ng nhp, (4) l mt khu tng ng.

    V d: server=192.168.0.1;database=qlnhanvien;uid=k28;pwd=spider

  • Gio trnh Visual Studio .NET

    91

    hoc Server=192.168.0.1;Database=qlnhanvien;Trusted_Connection=yes

    OleDbConnection s dng kt ni CSDL Access phin bn trc 2003:

    Provider=Microsoft.Jet.OLEDB.4.0;DataSource=

    V d:

    o string stConnection = string.Format(Provider=Microsoft.Jet.OLEDB.4.0;DataSource={0}, @c:\program files\qlnhanvien.mdb);

    o S dng trong ng dng Internet: string stConnection = string.Format(Provider=Microsoft.Jet.OLEDB.4.0;DataSource={0}, Server.MapPath(/data/qlnhanvien.mdb);

    ODBC: DSN= vi l Data Source Name (DSN), v d DSN=qlnhanvien

    Cc Connection string c dng to ra i tng Connection. Cch thc hin thng thng l truyn chui ny cho hm khi dng nh v d di y:

    string stConnection = "Data Source=192.168.0.1; +

    Initial Catalog=films; + User Id=k28;+ Password=spider"; SqlConnection cn = new SqlConnection(stConnection); cn.Open(); //Open connection

    4.3.1.2 Connection Pooling To mt Connection l mt qu trnh tn nhiu thi gian trong mt s trng hp, vic ny thm ch cn tn thi gian hn vic thc thi cc Command. loi b iu ny, ADO.NET cung cp mt khi nim gi l connection pool. Connection pool qun l cc Connection c trng Connection string ti u ha s ln thit lp, hp l ha thng tin kt ni.

  • Gio trnh Visual Studio .NET

    92

    Cc quy tc quy nh connection pool cn bit:

    - C ch Connection pooling c kch hot theo mc nh. C ch ny c tt bng cch thm vo Connection string Pooling=false i vi SqlConnection hoc OLE DB Services=-4 i vi OleDbConnection.

    - Mi connection pool c ng vi mt connection string duy nht. Khi c mt Connection c yu cu, pool handler (b qun l pool) s so snh connection string vi nhng connection string trong cc pools ang tn ti. Nu c mt Connection trng khp th Connection tng ng s c xc nh trong pool.

    - Nu tt c cc connection trong pool ang c s dng khi li c yu cu v connection th yu cu s c xp vo hng i cho n khi c mt connection rnh. Cc connection s c gii phng khi phng thc Close hay Dispose ca i tng connection c gi.

    - Connection pool c ng khi tt c cc connection trong n c gii phng v ht thi gian (time out).

    i vi SQL Server, bn c th iu khin hnh vi ca conneciton pooling bng cch gp cc cp key-value vo connection string. Cc key ny c th c s dng thit lp s lng nh nht v ln nht cc connection trong pool cng nh xc nh xem mt connection c cn phi reset khi n c ly t pool ra hay khng. Mt key c bit ch l key c tn Lifetime, xc nh thi gian m connection c th tn ti trc khi n b hy b. Gi tr ny c kim tra khi mt connection c tr v cho pool. Nu connection c m trc , v lu hn gi tr Lifetime th n s b hy.

    on code di y minh ha cc dng cc key ny cho SqlClient:

    string stConnection = "Server=192.168.0.1; + Trusted_Connection=yes; + database=qlnhanvien;" + "connection reset=false;" + "connection Lifetime=60;" + // Seconds "min pool size=1;" + "max pool size=50"; // Default=100 SqlConnection cn = new SqlConnection(cnString);

  • Gio trnh Visual Studio .NET

    93

    4.3.2 i tng Command Sau khi mt i tng connection c to ra, bc tip theo trong qu trnh truy xut CSDL i vi m hnh Kt ni l to ra mt i tng Command gi mt query (select) hay mt action command (thm, xa, sa) n data source. C nhiu loi lp Command ng vi cc data provider; cc lp ny u implement interface IDbCommand.

    4.3.2.1 To i tng Command Bn c th dng mt trong nhiu hm khi dng to i tng Command mt cch trc tip hoc s dng cch tip cn ProviderFactory.

    on code di y minh ha cc to ra mt i tng Command v thit lp cc thuc tnh ca n.

    SqlConnection conn = new SqlConnection(connstr); conn.open(); string sql = "INSERT INTO SinhVien (MaSinhVien, HoTen) VALUES (@pMaSinhVien, @pHoTen)"; SqlCommand cmd = new SqlCommand(); cmd.Connection = conn; cmd.commandText = sql; cmd.Parameters.AddWithValue ("@pMaSinhVien", 12); cmd.Parameters.AddWithValue ("@pHoTen", "tnv spider");

    Trong trng hp ng dng c th phi s dng nhiu data provider, bn nn s dng cch tip cn provider factory. Factory c to ra bng cch truyn chui data provider cho hm khi dng ca n. Tip n, phng thc CreateCommand c gi tr v mt i tng command.

    string provider = "System.Data.SqlClient"; DBProviderFactory factory = DbProviderFactories.GetFactory(provider