c-sharp & application11

Upload: vuongtao

Post on 13-Feb-2018

249 views

Category:

Documents


0 download

TRANSCRIPT

  • 7/23/2019 C-Sharp & Application11

    1/196

    Gio trnh Visual Studio .NET 1

    GIO TRNH

    C-SHARPV NG DNG

    NGUYN HONG H NGUYN VN TRUNG

  • 7/23/2019 C-Sharp & Application11

    2/196

    Gio trnh Visual Studio .NET 2

    CHNG1TNGQUANV.NETFRAMEWORK

    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 trinv thc thi cc ng dng trn Internet, trn desktop di dng Windows Forms, hoc thmch l trn ccc thit b di ng (vi Compact Framework). Cc mc tiu chnh m .NETframework 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

    thcha trn bt ch iu hnh no. C# v mt phn chnh ca mi trng thc

  • 7/23/2019 C-Sharp & Application11

    3/196

    Gio trnh Visual Studio .NET 3

    thi .NET, CLI (Common Language Infrastructure Htng ngn ngchung) c chun ha bi ECMA.

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

    Kin trc ca .NET Framework c thit k thnh 2 phn:CLR (Common LanguageRuntime Khi thc thi ngn ng chung) v FCL (Framework Class LibraryTh vinlp khung) nh hnh di

    Hnh 1.1Kin trc .NET Framework

    CLR, phn ci t CLI ca Microsoft, lm nhim vqun l sthc thi m lnh v tt ccc tc v lin quan n n: bin dch, qun l bnh, 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 (managedcode), phn bit vi m khng c qun l(unmanaged code), l m lnh khng ci tnhng yu cu thc thi trong CLRchng hn nh COM hoc cc thnh phn da trnWindows API.

    FCL l th vin kiu dliu c thti sdng (gm cc class, structure, ) dnh chocc ng dng thc thi trong .NET. Tt ccc ngn nghtr .NET Framework u sdng th vin lp dng chung ny.

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

    CLR (Common Languge RuntimeMi trng thc thi ngn ngchung) qun lton bvng i ca mt ng dng: n np cc lp c lin quan, qun l sthc thi cacc lp, v m bo qun l bnhmt cch t ng. Ngoi ra, CLR cn htrtch hpgia cc ngn ng cho php m lnh c sinh ra bi cc ngn ngkhc nhau c thtng tc vi nhau mt cch lin mch.

  • 7/23/2019 C-Sharp & Application11

    4/196

    Gio trnh Visual Studio .NET 4

    1.2.1 Bin dch m lnh .NETTrnh bin dch tng thch vi CLR ssinh m thc thi cho mi trng thc thi ch

    khng phi l m thc thi cho CPU cth. M thc thi ny c bit n qua tn gi CIL(Common Intermediate Language Ngn ng trung gian chung), hay MSIL (MicrosoftIntermediate 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 dngfile c ththc thi nh thng thng, chng cn trnh bin dch JIT(Just-inTime)ca mitrng thc thichuyn i IL cha trong n sang dng m lnh c th ca mykhi ngdng thc sthc thi.

    Qu trnh bin dch, thc thi mt chng trnh trong .NET framework c thtm tt nhsau:

    -

    Chng trnh ngun trc ht s c bin dch v ng gi thnh mt khi gi lassembly. Khi ny scha cc m lnh ngn ngtrung gian v cc metadata m

    tthng tin cn thit cho shot ng ca khi.

    -

    Mi khi c yu cu thc thi assembly ni trn, CLR schuyn i m lnh ngnngtrung gian trong assembly thnh m lnh tng thch vi CPU cth trckhi c ththc thi.

    Hnh 1.2Chc nng ca CLR

  • 7/23/2019 C-Sharp & Application11

    5/196

  • 7/23/2019 C-Sharp & Application11

    6/196

    Gio trnh Visual Studio .NET 6

    Manifest: Mi assembly phi c mt file cha mt manifest. Manifest ny l mt tphp cc bng cha cc metadata trong lit k tn ca tt ccc file trong assembly, thamchiu n cc assembly bn ngoi, v cc thng tin nh tn, phin bn nh danhassembly . Mt sassembly cn c cch k in t duy nht(unique digital signature).Khi mt assembly c np, nhim v u tin ca CLR l mfile 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 racc bng nh ngha v bng tham chiu. Bng nh ngha cung cp mt ghi ch y vcc kiu cha trong IL. V d, c cc bng nh ngha kiu, phng thc, trng dliu,tham s, v thuc tnh. Bng tham chiu cha cc thng tin vtt ccc tham chiu vkiuv cc assembly khc. Trnh bin dch JIT phthuc vo cc bng ny chuyn IL sangm my.

    IL: Vai tr ca IL c cp trc y. Trc khi CLS c thsdng IL, n phi

    c ng gi vo trong mt assembly dng DLL hoc EXE. Assembly dng EXE phi cmt im nhp (entry point) n c ththc thi. Ngc li, Assembly dng DLL, cthit k hot ng nh l mt th vin m lnh nm gi cc nh ngha kiu.

    Hnh 1.4Assembly ch gm 1 file

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

    -

    Tt ccc m c qun l, cho d l mt chng trnh n, mt iu khin, hay mtth vin DLL cha cc kiu dliu ti sdng, u c ng gi vo mt assembly.y l khi c bn nht c thtrin khai trn hthng. Khi mt ng dng c bt

  • 7/23/2019 C-Sharp & Application11

    7/196

    Gio trnh Visual Studio .NET 7

    u, ch nhng assembly c yu cu cho vic khi to mi cn hin din. Ccassembly khc s c np khi c yu cu. Cc nh pht trin c thphn ng dngthnh cc assembly da theo mc thng xuyn sdng.

    -

    Trong th gii .NET, mt assembly quy nh mt bin gii phin bn. Trng VersionNumber 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 phinbn.

    - Mt assembly cng thit lp mt bin gii bo mt nh ra quyn hn truy xut.C# s dng cc b t truy cp iu khin cch m cc kiu v thnh phn kiutrong 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 internalgii hntruy xut n cc kiu v thnh vin bn trong assembly.

    Nh cp trn, mt assembly c thcha 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. Mtcch sdng tnh cht ny trong thc t l chng ta c thto ra ng dng a ngn ng,trong ng dng scng sdng chung cc module logic, phn giao din hoc cc tinguyn khc c th c trin khai ring thnh cc file c lp. Khng c gii hn vslng file trong mt assembly. Hnh 1.5 minh ha bcc ca mt assembly cha nhiufile.

    Hnh 1.5 -Assembly cha nhiu fileTrong minh ha assembly cha nhiu file, manifest ca assembly cha thng tin nhdanh mi file c s dng trong assembly.

  • 7/23/2019 C-Sharp & Application11

    8/196

    Gio trnh Visual Studio .NET 8

    Mc d hu ht cc assembly u cha mt file duy nht. Sau y lcc thun li caassembly 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 tvo trong cng mt module; nhng m lnh t khi c s dng s c t vo trongmodule khc. CLR khng np cc module no khi cha thc s cn thit.

    -

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

    1.2.4 Private Assembly v Shared AssemblyCc 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 votrong th mc cn thit, khng cn thit lp thng tin trong registry. i khi, c thdngthm mt file cu hnh ng dng c th ghi mt sthit lp trong manifest ca ng dng.

    Shared assembly l assembly c ci t vo vtr ton cc, gi l Global AssemblyCache (GAC), l ni c thtruy xut c tnhiu ng dng. im quan trng nht caGAC l n cho php nhiu phin bn ca mt assembly c th c thc thi. htriu ny, .NET khc phc vn xung t tn bng cch sdng 4 thuc tnh nh danh1 assembly, bao gm: Assembly Name (tn assembly), Culture Identity (nh danh vnha), 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 hthngca h iu hnh (WINNT\ trong Windows 2000, WINDOWS\ trong Windows XP). Nhm thnh 1.6, cc assembly c lit k theo nh dng c bit hin th4 thuc tnhca chng (.NET Framework bao gm mt file DLL mrng Windows Explorer cho

    php n c thhin thni dung GAC).

    -

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

    -

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

    ...

  • 7/23/2019 C-Sharp & Application11

    9/196

    Gio trnh Visual Studio .NET 9

    Thng thng cc s v c cp nht cho nhngln thay i mang tnh ph v tnh tng thch ngc. Mt s hiu phin bn c thc gn cho mt assembly bng cch nhthuc tnh AssemblyVersion trong phnm 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 choEnglish, vi cho Vietnam, v c th c gn vi thuc tnh AssemblyCulture ttrong 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 danhmnh. Qutrnh ny c gi l k, yu cu s dng cp kha cng khai/ring t. Khi trnh bindch xy dng assembly, n s s dng kha ring t sinh ra mt nh danhmnh.

    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 chiun 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 assemblynh danh mnh. Mi assembly u phi c nh danh mnh.

  • 7/23/2019 C-Sharp & Application11

    10/196

    Gio trnh Visual Studio .NET 10

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

    1.2.5 Tin bin dch mt AssemblySau khi mt assembly c np vo CLR, IL phi c bin dch sang thnh m my trckhi thc s c thc thi. .NET Framework c cung cp mt cng cgi l Ngen (NativeImage Generator), dng bin dch mt assembly thnh mt native image c lutrong native image cachemt vng dnh ring ca GAC. Mi khi CLR np mt assembly,n skim tra trong cache xem c native image tng ng cha; nu c n snp m bin dch chkhng cn bin dch thm ln na. y l tnh nng m nu c khaithc hp l th c thtn 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: kimchng IL v hp l ha metadata bo m m lnh c an ton kiu. Trong thc t,iu ny c ngha l cc tham strong li givphng thc c giphi c kim tra

  • 7/23/2019 C-Sharp & Application11

    11/196

    Gio trnh Visual Studio .NET 11

    m bo chng c cng kiu dliu, hoc l mt phng thc chtrv ng kiu cc ttrong khai bo trv. 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 sc mt ngoi lxut hin.

    Thun li ca m lnh c kim chng l CLR c thchc chn m lnh skhngnh hng n ng dng khc theo kiu truy xut n vng nhngoi vng cho php can. Do CLR tdo thc thi nhiu ng dng trong cng mt tin trnh hay khng gian ach.

  • 7/23/2019 C-Sharp & Application11

    12/196

    Gio trnh Visual Studio .NET 12

    CHNG2NGNNGLPTRNHC#

    2.1 Chng trnh u tinChng ta slm quen vi ngn nglp trnh C# v mi trng tch hp pht trin(IDEIntegrated Development Environment) Visual Studio .NET bng cch xy dng mt ngdng u tin, ng dng firstApp. ng dng ny cho php ngi sdng nhp vo 2 s,sau in ra mn hnh tng, tch v thng ca hai sva nhp. Trnh tthc hin nh sau:

    1. Khi ng Microsoft Visual Studio 2005. Nhn Ctrl + Shift + N hoc chn menutng ng l FileNewProject to mi mt project

    2. Chn loi ng dng cn pht trin l Visual C#WindowsConsole Application.Sau , chn th mc cha project v t tn cho project nh minh ha hnh trn.Ch , y, chng tabchn hp kim Create directory for solution.

    Ch thch:Visual Studio .NET coi mt bi ton cn gii quyt l mt solution. Mt solutionc thbao gm mt hoc nhiu project. Mt solution, nu c nhiu project th nnc to ra trong mt th mc ring c thcha cc project trong n. y,

  • 7/23/2019 C-Sharp & Application11

    13/196

    Gio trnh Visual Studio .NET 13

    solution chc duy nht mt project, thnn khng cn thit phi to ra mt thmc cho solution.

    3. Sau khi nhn nt OK, hy kho st xem cu trc ca th mc cha solution cachng 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.cs5. Bn c thsdng MSDN tra cu cc thng tin bn cha bit v:

    a.

    Lp Console v cc phng thc ReadLine(), WriteLine() ca nb.

    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

  • 7/23/2019 C-Sharp & Application11

    14/196

    Gio trnh Visual Studio .NET 14

    floatthuong = (float)x / y; thnh floatthuong =

    x / y; ri chy chng trnh, quan st kt quv rt ra kt

    lun.

    8. Sdng 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 tnglm quen vi cc ngn nglp trnh bc cao.

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

    datatype identifier;

    V d:

    int i;

  • 7/23/2019 C-Sharp & Application11

    15/196

    Gio trnh Visual Studio .NET 15

    Cu lnh ny khai bo mt sint tn l i. Trnh bin dch thc scha cho php sdngbin ny cho n khi chng ta khi to n bng mt gi tr. Lnh khai bo ny chlmnhim vcp pht mt vng nh(4 bytes) cho bin i.

    Sau khi khai bo, chng ta c thgn mt gi trcho bin bng ton t gn =, nh sau:

    i = 10;

    Chng ta cng c thva khai bo, va khi to gi trcho 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 binTm hot ng ca mt bin l vng m lnh m trong bin c thtruy 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 tngs c tm hot ng trong phm vi lp cha n.

    Mt bin cc bsc tm hot ng trong khi khai bo n (trong cp du ngocnhn { })

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

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

    2.2.2 Hng d liuHng dliu l bin c gi tr khng c php thay i trong sut thi gian tn ti ca n.Cch khai bo ca hng dliu l tng t nh i vi bin dliu, ch khc l c thmtkha const u.const int a = 100; // Gia tri nay khong duoc thay doi

    Hng dliu c cc c tnh sau:

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

    Gi trca hng dliu phi c tnh ton trong thi im bin dch. V vy, chngta khng thkhi to mt hng sc gi tr c ly tmt bin dliu.

    Nu cn iu ny, chng ta sdng trng dliu kiu read-only.

  • 7/23/2019 C-Sharp & Application11

    16/196

    Gio trnh Visual Studio .NET 16

    2.3 Cc kiu d liu nh ngha sn ca C#C# phn kiu dliu thnh hai loi (tng t nh cch phn loi chung trong CTS): kiudliu gi trv kiu dliu tham chiu. Vmt khi nim, im khc bit gia hai kiudliu ny l, bin kiu dliu gi tr lu gitrc tip mt gi tr, trong khi , binkiu tham chiu lu githam chiu n mt gi trdliu. Vmt lu trvt l, bin ca

    hai kiu dliu ny c lu vo hai vng nhkhc nhau ca chng trnh, l vngnhstack (cho bin d liu kiu gi tr) v vng nhheap (cho bin d liu kiu thamchiu). Bn cn c bit lu hiu ng ca cc php gn i vi kiu dliu kiu thamchiu.

    2.3.1 Kiu d liu gi tr c nh ngha snCc kiu dliu gi tr c nh ngha sn bao gm snguyn, sdu chm phy ng,k tv boolean.

    2.3.1.1 Cc kiu s nguyn

    C# htrsn 8 kiu snguyn: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 8bit 0:28-1

    ushort System.UInt16 S nguyn khng du16bit

    0:216-1

    uint System.UInt32 S nguyn khng du32bit

    0:232-1

    ulong System.UInt64 S nguyn khng du 64- 0:264-1bit

    2.3.1.2 Cc kiu s du chm ngCc kiu sthc du chm ng c htrsn 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

  • 7/23/2019 C-Sharp & Application11

    17/196

    Gio trnh Visual Studio .NET 17

    double System.Double 15/16 5.0 10-324 to 1.7 10308

    2.3.1.3 Kiu s thp phnbiu din sthp phn vi chnh xc cao hn sthc du chm ng, C# htrkiudliu sthp phn:

    Tn Kiu trong CTS S ch s c ngha Vng biu din

    decimal System.Decimal 28 1.0 10-28to 7.9 1028

    2.3.1.3 Kiu booleanTng ng vi System.Boolean trong CTS, C# c kiu dliu bool, c thnhn mt tronghai gi trtrue hoc false. C mt iu lu , kiu dliu bool khng c nhn cc gi trnguyn nh mt sngn ng(C, C++)

    2.3.1.4 Kiu kt lu trgi trca mt k t n, C# htrdliu kiu k t

    Tn Kiu trong CTS Gi trchar 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 cthbiu thhng k t di dng sthp lc phn, kiu nh\u0041, hoc p kiu nh(char)65. Ngoi ra c thsdng mt sk tescape 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

    \t K t Tab

    \v K t Vertical tab

  • 7/23/2019 C-Sharp & Application11

    18/196

    Gio trnh Visual Studio .NET 18

    2.3.2 Kiu d liu tham chiu c nh ngha sn C#htrsn hai kiu dliu tham chiu:

    Tn Kiu CTS M t

    object System.Object Kiu d liu gc, mi kiu d liu khc trong CTS u k that y (k c cc kiu d liu gi tr)

    string System.String Chui k t Unicode2.3.2.1 Kiu d liu objectobject l kiu dliu gc, c bn nht m t , tt ccc kiu dliu khc u phi ktha (trc tip hoc gin tip). Cc thun li chng ta c c tkiu dliu object l:

    - Chng ta c thsdng tham chiu i tng gn kt vi mt i tng ca btkkiu dliu con no. Tham chiu i tng cng c sdng trong nhng trnghp m m lnh phi truy xut n nhng i tng cha r kiu dliu (tng tnh vai tr con trvoid 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 sdng t nh nghac th ci t li cc phng thc ny theo kthut gi l overriding (ghi ) tronglp trnh hng i tng.

    2.3.2.2 Kiu d liu stringKiu dliu string c cung cp sn trong C# vi nhiu php ton v cch thc hot ngthun tin l mt trong nhng kiu dliu c sdng nhiu nht khi lp trnh. i tngstring c cp pht trong vng nhheap, v khi gn mt bin string cho mt bin khc,chng ta sc hai tham chiu n cng mt chui trong bnh. Tuy nhin, khi thay ini dung ca mt trong cc chui ny, chui thay i s c to mi hon ton, khngnh 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; Console.WriteLine("s1 is "+ s1); Console.WriteLine("s2 is " + s2); s1 = "another string";

    Console.WriteLine("s1 isnow "

  • 7/23/2019 C-Sharp & Application11

    19/196

    Gio trnh Visual Studio .NET 19

    + s1);Console.WriteLine("s2 isnow "+ s2);

    return0;} }

    Kt qu ca on chng trnh trn l:

    s1 is a string s2 is astring s1 is now anotherstring s2 is now astring

    Ni cch khc, vic thay i gi trca s1 khng nh hng g n s2, ngc vi nhng g

    chng ta trng i kiu dliu tham chiu.

    Hng kiu chui c bao trong cp du nhy kp (). Trong chui c thcha cc dyk t escape nh i vi kiu dliu 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 Dayla dong thu hai.";

    Khi , gi tr ca chui st s l:

    'Day la dong thu nhat Dayla dong thu hai.

    2.4 Lung iu khin chng trnh2.4.1 Cu lnh iu kinCc cu lnh iu kin cho php phn nhnh m lnh theo cc iu kin cth. C# c haicu trc phn nhnh if v switch.

  • 7/23/2019 C-Sharp & Application11

    20/196

    Gio trnh Visual Studio .NET 20

    2.4.1.1 Cu lnh ifCu lnh if ca C# c ktha tcu trc if ca C v C++. C php ca n l:

    if (condition)statement1(s)[elsestatement2(s)]

    Nu c nhiu hn mt cu lnh c thc thi tng ng vi mt trong hai gi trca biuthc logic condition, chng ta c thgp 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 sdng cu lnh if l condition nht thit phi l mt biu thclogic (chkhng thl mt s nh C/C++).

    2.4.1.2 Cu lnh switchCu lnh switch l mt cu lnh iu khin qun l nhiu la chn v lit k bng cchchuyn iu khin n mt trong nhng cu lnh casetrong thn ca n:switch(expression)

    { case const_1:statement_1;break; caseconst_2:statement_2;break; ...

    case const_n:

    statement_n;

    break; [default:

    statement_n+1;

    break;]

    }

    Ch rng, iu khin c chuyn n nhnh r tng ng vi gi trca biu thc. Culnh switch c thcha nhiu nhnh r nhng khng c hai nhnh r no c c cng gi

  • 7/23/2019 C-Sharp & Application11

    21/196

    Gio trnh Visual Studio .NET 21

    tr. Vic thc thi thn cu lnh c bt u ti nhnh c la chn v tip tc cho nkhi c chuyn ra ngoi qua lnh break. Cu lnh nhy break l bt buc i vi minhnh r, ngay c khi l nhnh rcui cng hoc l nhnh rdefault.

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

    V d:switch (integerA)

    { case1:

    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 lpC# cung cp bn loi lnh lp (for, while, do...while, v foreach) cho php lp trnh vin cththc thi mt khi lnh lin tip cho n khi mt iu kin xc nh no c thamn.

    2.4.2.1 Cu lnh lp forC 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 (ythng 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 skt thc khi condition c c lng l false.

  • 7/23/2019 C-Sharp & Application11

    22/196

    Gio trnh Visual Studio .NET 22

    V d di y in ra 100 st nhin u tin (0, 1, 2, ..., 99), mi strn mt dng:for (int i = 0; i < 100; i = i+1)

    {

    Console.WriteLine(i); }

    Tt nhin, chng ta c thsdng cc vng lp for lng nhau, nh v din ra tam gic hnh

    sao di y.for (int i = 0; i < 5; i++){ for (int j = 0; j

  • 7/23/2019 C-Sharp & Application11

    23/196

    Gio trnh Visual Studio .NET 23

    2.4.2.4 Cu lnh lp foreachCu lnh lp foreach cho php duyt qua mi phn tc trong mt tp phn t. Kiu dliu tp hp phn t(collection) s c trnh by trong cc phn tip theo. Xt v ddiy:foreach (int temp in arrayOfInts)

    { Console.WriteLine(temp); }

    V dny sin ra tt ccc phn tc trong tp hp arrayOfInts. C mt iu ng lu ,chng ta khng c thay i gi trca bin phn tlp. Chng hn, on chng trnhdi y sbbo li:foreach (int temp in arrayOfInts)

    { temp++; //khng c thay i gi trtemp!!!

    Console.WriteLine(temp); }

    2.4.3 Cu lnh nhyC# cung cp mt scu lnh nhy cho php chuyn iu khin n dng lnh khc trongchng trnh.

    2.4.3.1 Cu lnh gotoLnh goto cho php nhy trc tip n mt dng cth trong chng trnh, c xc nhbng mt nhn (label):

    goto Label1;

    Console.WriteLine("Dng lnh ny skhng c thc hin"); Label1:

  • 7/23/2019 C-Sharp & Application11

    24/196

    Gio trnh Visual Studio .NET 24

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

    2.4.3.2 Cu lnh break

    Chng ta sdng cu lnh break trong phn cu lnh rnhnh switch. C mt cch sdng khc ca cu lnh ny, l dng nhy ra khi iu khin ca lnh lp trc tipcha 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 continueLnh continue cng tng t nh cu lnh break, phi c sdng trong thn cu lnhfor, foreach, while, hay do while. Tuy nhin, n chthot tln lp hin ti ca vng lpbt u ln lp mi.

    V d, on chng trnh di yfor (int i = 0; i < 4; i++)

    {Console.WriteLine(---);

    if (i%2 == 0) continue;Console.WriteLine(i = {0}, i); }

    sin ra kt qu nh thny trong ca sConsole:

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

    2.4.3.4 Cu lnh returnLnh return c sdng thot khi phng thc ca mt lp, tr iu khin trvnigi phng thc. Ty theo kiu dliu trvca phng thc l void hoc c mt kiu d

  • 7/23/2019 C-Sharp & Application11

    25/196

    Gio trnh Visual Studio .NET 25

    liu cth, lnh return phi tng ng khng trvkiu dliu g, hoc l trvmt gitrc kiu dliu 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, projectca Visual Studio. Sau khi nm vng c cu trc iu khin cng nh mt s cim cthca ngn ng, gil lc chng ta xem xt cu trc ca mt chng trnh vit

    bng C#.

    2.5.1 Lp i tngLp i tng ng vai tr rt ln trong cc chng trnh C#. Ni mt cch nm na, lpi tng l khun c ra cc i tng cth(gi l instance), nh ngha cc thnh phndliu v chc nng c thc cho mi i tng cth.

    Thnh vin ca lp i tng l cc dliu v cc hm bn trong lp i tng n, gil dliu thnh phn v hm thnh phn. Cc thnh vin ca lp i tng c thckhai bo l public (c th c truy xut trc tip tbn 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 ktha tn).

    Dliu thnh phn l cc thnh phn bn trong lp cha dliu cho class c thlcc trng dliu (field), hng s(constant) hoc l cc skin (event).

    Trng dliu l cc bin c khai bo mc lp i tng. V d di y nhngha 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 lDayOfSendingBill.

    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 thtruy xut

    cc trng dliu ny theo dng iTng.TrngDLiu, nh v d di y:

    PhoneCustomer Customer1 = new PhoneCustomer();Customer1.FirstName = "Burton";

  • 7/23/2019 C-Sharp & Application11

    26/196

    Gio trnh Visual Studio .NET 26

    Hm thnh phn l cc thnh phn cung cp chc nng xl dliu 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 thl

    phng thc lm vic vi thhin cthca lp, hoc l phng thc chhot ng mclp (phng thc tnh static method).

    Thuc tnh (property) l tp cc hm c th c truy xut theo cch ging nh trngdliu public ca lp i tng. C# cung cp cc c php c bit nh ngha cc thuctnh ch c, ch ghi hay c truy xut tdo.

    Hm khi dng (constructor) l cc hm c bit, c gi mi khi i tng ca lpc 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 bhy. Cc hm ny c tnca lp v c bt u bng k t~ (du ng).

    Danh sch y cc bttruy cp cc hm thnh phn ca lp c cho bng diy:

    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 liukhc 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.

  • 7/23/2019 C-Sharp & Application11

    27/196

    Gio trnh Visual Studio .NET 27

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

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

    2.5.2 Kiu d liu cu trc structC php khai bo kiu dliu cu trc trong C# hon ton tng t nh khai bo lp itng, chthay tkha class bng tkha 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 trvtruy xut. Lp i tng l kiu d liu tham chiu, c lu trtrong vng nhheap,trong khi , cu trc l kiu dliu gi tr, c lu trtrong vng nhstack. Ngoi ra,cu trc khng th c ktha nh lp i tng.

    2.6 Phng thc

    2.6.1 Khai bo phng thcC 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 sdng tkha 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():

  • 7/23/2019 C-Sharp & Application11

    28/196

    Gio trnh Visual Studio .NET 28

    public bool IsSquare(Rectangle rect)

    {

    return (rect.Height == rect.Width);

    }protected void Move(int dX, int dY)

    {

    this.x += dX;

    this.y += dY;

    }

    2.6.2 Truyn tham s cho phng thcCc i sc th c truyn cho phng thc theo tham chiu hoc gi tr. Bin ctruyn theo tham chiu n mt phng thc th sbnh hng bi mi thay i nu c

    trong thn phng thc, trong khi , bin c truyn theo gi trth khng bnh hngbi nhng thay i din ra trong thn phng thc.

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

  • 7/23/2019 C-Sharp & Application11

    29/196

    Gio trnh Visual Studio .NET 29

    using System;

    namespace MinhHoaDoiSo

    { classParameterTest

    {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]= 0Thuc hien goi phuong thuc SomeFunction()...

    i = 0 ints[0] = 100

    thay i gi trca i si, chng ta phi truyn n nh l mt i skiu thamchiu. Vic nh ngha mt i s l kiu tham chiu c thc hin bng cch thm tkha ref vo u nh ngha i s, nh v dsau:

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

    }

    V khi thc hin li gi phng thc, tkha ref cng phi c thm vo trc bintruyn cho phng thc:

  • 7/23/2019 C-Sharp & Application11

    30/196

    Gio trnh Visual Studio .NET 30

    SomeFunction(ints, ref i);

    Mt im cn lu l, bin c sdng truyn cho phng thc phi c khi

    to trc khi thc hin li gi phng thc.

    truyn mt i slm nhim vcha gi tr u ra ca mt phng thc, chng tasdng tkha out. Bin c truyn theo kiu nh thny th khng nht thit phi ckhi to trc khi thc hin li gi phng thc, tuy nhin, nu trong thn hm i skhng c gn mt gi trno th trnh bin dch sbo li.

    Cch sdng i skiu 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 noSomeFunction(out i);

    Console.WriteLine(i); return0;}

    2.7 D liu kiu array

    2.7.1 C php khai bo arrayArray trong C# c khai bo bng cch gn cp du ngoc vung vo sau kiu dliu cs, theo c php di.type[] arrayName;

    V d:

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

    khi to array, chng ta sdng t kha new, sau ch nh cth kch thc trongcp du ngoc vung. Sau khi khi to, mi phn t trong array c truy xut thng qua

    tn array cng vi shiu ca n (c nh st0 tr i)

    // Khoi tao mot array voi 32 phan tu du lieu kieu intint kichThuoc = 10 + 20; int[]daySo = new int[kichThuoc]; // luu y co the dung BIEN de xac dinh kich thuoc!!!

  • 7/23/2019 C-Sharp & Application11

    31/196

    Gio trnh Visual Studio .NET 31

    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 thsdng gi trca bin khi nh ngha kch thc cho array.V, mt khi khi to xong array vi kch thc cth, chng ta khng th thay i kchthc ca array . lm c iu ny, chng ta cn mt kiu dliu khcArrayList.

    Chng ta cng c th khaibo v nh ngha mt array theo cch chra cc phn tcthca n nh sau:

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

    2.7.2 Lm vic vi arrayly kch thc ca array, chng ta sdng thuc tnh Length ca n. Mt s phngthc thng dng i vi dliu kiu array l:

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

    - Array.Reverse(arr): hm tnh, sdng o ngc vtr ca cc phn tc trongarray arr.

    V dsau minh ha vic khai bo mt array gm cc string, sp xp theo tht ABC, ongc cc phn t, ri in cc phn tra 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++)

    Console.WriteLine(hoTen[i]);

    Array.Sort(hoTen);Array.Reverse(hoTen);

    // in danh sach cac phan tu trong array su dung cu phap foreachforeach (string stHoTen in hoTen) Console.WriteLine(stHoTen);

    2.7.3 Array nhiu chiu

    C# htrhai kiu array nhiu chiu: kiu ma trn (chng hn nh mt ma trn hai chiu lmt array trong mi dng s c cng sct) v array kiu rng ca.

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

  • 7/23/2019 C-Sharp & Application11

    32/196

    Gio trnh Visual Studio .NET 32

    string[,]beatleName = { {"Lennon","John"},

    {"McCartney","Paul"},

    {"Harrison","George"},

    {"Starkey","Richard"} };

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

    string[,,] my3DArray;

    Array, sau khi khai bo c thtin hnh khi to gi trcho 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 phngthc GetLength(). Chng hn,

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

    Kiu array nhiu chiu thhai l array kiu rng ca, trong kch thc ca mi chiu lc th khc nhau. Chnh xc, y l kiu dliu array ca cc array. on code di

  • 7/23/2019 C-Sharp & Application11

    33/196

    Gio

    trnh Visual Studio .NET 33

    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 tca array kiu rng cas c truy xut nh l mt array mt chiu nhthng thng. Chng trnh di y cho thy r hn cch thc sdng ca array kiurng ca. Chng trnh ny c nhim vnhn vo mt s nguyn n, sau thnh lp tamgic 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

  • 7/23/2019 C-Sharp & Application11

    34/196

    Gio

    trnh Visual Studio .NET 34

    n = 51

    1 1

    1 2 1

    1 3 3 1

    1 4 6 4 11 5 10 10 5 1

    2.8 Cc ton tC# htrcc kiu ton t sau y:

    Loi ton t K hiu

    Shc + - * / %

    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 vkiu sizeof is typeof as

    iu khin Overflow exception checked unchecked

    Truy xut a chv gin tip * -> & []

    Cng ging nh cc ngn ngta C, chng ta cnphn bit php gn vi php so snhChng hn

    x = 3; // gn gi tr3 cho x

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

    if (x == 3)

  • 7/23/2019 C-Sharp & Application11

    35/196

    Gio

    trnh Visual Studio .NET 35

    2.8.1 Cc ton t ttDi y l cc ton tvit tt ca C#

    Ton t tt Tng ng vi

    x++, ++x x = x + 1

    x--, --x x = x - 1

    x += y x = x + y

    Ton t tt Tng ng vi

    x -= y x = xy

    x *= y x = x * y

    x /= y x = x / y

    x %= y x = x % y

    x >>= y x = x >> y

    x

  • 7/23/2019 C-Sharp & Application11

    36/196

    Gio

    trnh Visual Studio .NET 36

    Dliu kiu byte chc thnm gi c cc gi trtrong vng t 0 n 255, v th,

    vic tng gi trca b slm xut hin li overflow. Vic qun l cc li kiu nh thnyrt quan trng, v thC# cung cp mt c php cho php pht hin ra kiu li ny. Xem

    on m lnh b {

    }

    Khi thc thi on m lnh ny, chng ta snhn c thng bo li dng

    Unhandled Exception: System.OverflowException: Arithmetic operation resulted in anoverflow. at MinhHoa.Main(String[] args)

    Nu mun bqua li overflow, chng ta nh du on m lnh tng ng l unchecked{

    }

    Trong trng hp ny, khng c ngoi l no c pht sinh, nhng chng ta sbmt dliu! Lu rng, unchecked l trng thi mc nh!

    2.8.4 Ton t isTon tis cho php kim tra mt object c tng thch vi mt kiu dliu no hay khngTrong phn lp trnh hng i tng, chng ta s c dp sdng ton tny.

    2.8.5 Ton t sizeofTon t sizeof cho php xc nh kch thc (tnh bng byte) c yu cu bi mt kiu d

    liu gi trtrn vng nhstack . Xem v dminh ha sau:

    b++;

    .WriteLine(b.ToString());

    yte b = 255;nchecked

    riteLine(b.ToString());

    b++;

  • 7/23/2019 C-Sharp & Application11

    37/196

    Gio

    trnh Visual Studio .NET 37

    {

    }

    Lu rng, ton tsizeof ch c sdng vi m lnh khng an ton (unsafe code).

    2.9 EnumerationsKiu lit kMt kiu lit k l mt kiu dliu nguyn do ngi sdng t nh ngha. Khi khai bomt kiu lit k, chng ta xc nh mt tp cc gi trc thnhn c thng qua cc tngi c tnh gi nh.

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

    public enum TimeOfDay{

    Morning = 0,Afternoon = 1,Evening = 2

    }

    Vic sdng kiu dliu lit k scho php vit cc on m lnh d c, dqun l li logichn

    class EnumExample{

    tring s = "A string";nsafe

    sole.WriteLine(sizeof(int)); // in ra kich thuoc cua 1 int, la 4

  • 7/23/2019 C-Sharp & Application11

    38/196

    Gio

    trnh Visual Studio .NET 38

    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 vkiu dliu string.//enum string

    TimeOfDay time = TimeOfDay.Afternoon;Console.WriteLine(time.ToString()); // chuoi in ra la Afternoon

    //string enumTimeOfDay time2 = (TimeOfDay) Enum.Parse(typeof(TimeOfDay), "afternoon", true);Console.WriteLine((int)time2);

    Vic ly chui tng ng ca mt bin gi trlit k c thtin hnh n gin bng cchsdng phng thc ToString() ca bin. Trong khi , ly gi trkiu lit k tmtchui tng ng th phc tp hn, chng ta phi sdng phng thc tnh Parse ca lpEnum. Cn c nhiu phng thc khc ca lp Enum; chi tit tham kho bn xem ti liuMSDN.

    2.10 NamespaceNamespace l n vgp nhm mang tnh logic. Khi nh ngha mt lp i tng trong mfile C#, chng ta c th a n vo trong mt namespace no . Sau , khi nh ngha lpkhc c chc nng lin quan vi lp i tng trc , chng ta c thgp n vo trong cng

  • 7/23/2019 C-Sharp & Application11

    39/196

    Gio

    trnh Visual Studio .NET 39

    namespace, qua to ra mt nhm logic, cho cc nh pht trin bit rng cc lp i tngtrong cng namespace l c lin quan vi nhau.

    namespace BusinessLayer{

    public struct Student{

    // Ma lenh dinh nghia struct Student...}

    }

    Kiu dliu thuc vmt namespace s c tn y c xc nh bng

    namespace.tenKieuDuLieu

    Nh v d trn, tn y ca lp Student sl

    BusinessLayer.Student

    Student cn c gi l tn ngn gn ca kiu dliu.

    Chng ta cng c thlng cc namespacebn trong cc namespace khc, qua to ra cu trcphn lp cho cc kiu dliu.

    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 tchc cc namespace:

    namespace HueUni.COSciences.DoIT

  • 7/23/2019 C-Sharp & Application11

    40/196

    Gio

    trnh Visual Studio .NET 40

    {class Student{

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

    }

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

    2.10.1 Khai bo sdng namespaceVic s dng kiu d liu vi tn y r rng l khng thun tin lm, c bit l khikiu d liu c nh ngha trong mt namespace mc qu su. C# cho php s dng tnngn 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 bousing HueUni.COSciences.DoIT

    u file m ngun th trong file , chng ta c thsdng tn ngn ca lp i tng Studentthay 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 ltrng 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 namespaceHueUni.COSciences.DoiT v HueUni.COSciences.DoP; khi chng ta cn xc nh lpStudent bng mt ci tn di hn, DoIT.Student hoc DoP.Student ty theo tng tnh hung.using HueUni.COSciences.DoIT; usingHueUni.COSciences.DoP;

    class Test

    {

    public static int Main()

    {DoIT.Student nvtrung = new DoIT.Student();

    DoP.Student nhha = new DoP.Student(); return0;

    }}

  • 7/23/2019 C-Sharp & Application11

    41/196

    Gio

    trnh Visual Studio .NET 41

    2.10.2 B danh cho NamespaceMt cch s dng khc ca t kha using l gn b danh cho cc lp i tng v ccnamespace. C php ca cch s dng ny l nh sau:

    using alias = NamespaceName;

    V d sau y minh ha cch thc sdng b danh namespace:using System;

    using KhoaCNTT = HueUni.COSciences.DoIT;class Test

    {public static int Main()

    {

    Console.WriteLine(nvtrung.GetNamespace());0;

    }}namespace HueUni.COSciences.DoIT

    {class Student

    {

    public string GetNamespace()

    {

    return this.GetType().Namespace;}

    }

    }

    KhoaCNTT.Student nvtrung = new KhoaCNTT.Student();

    2.11 Bi thc hnh

    Bi thc hnh 1.1. Chng trnh u tin

    Tm tt

    Bi thc hnh ny gipbn lm quen vi mi trng Visual Studio 2005 v cc thao tcnhp 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.

  • 7/23/2019 C-Sharp & Application11

    42/196

    Gio

    trnh Visual Studio .NET 42

    Kthut c trnh by

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

    -

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

    1.

    Khi ng Microsoft Visual Studio 2005. Nhn Ctrl + Shift + N hoc chn menu tngng l FileNewProject to mi mt project

    2.Chn loi ng dng cn pht trin l Visual C#Console Application. Chn th mccha project v t tn cho project. Vmt thc cht, Visual Studio coi project thuc vmt solution no , v mt solution c thcha nhiu project. Tuy nhin, trong nhiubi ton n gin (nh v dca chng ta chng hn), mt solution chc 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 cacc 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

  • 7/23/2019 C-Sharp & Application11

    43/196

    Gio

    trnh Visual Studio .NET 43

    5.Sdng 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 casolution, 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 quv rt ra kt lun.

    8.Sdng thm cc cu trc lnh khc tinh chnh hot ng ca chng trnh (xlphp chia cho 0, )

    Bi thc hnh 1.2. Module ha chng trnh

    Tm tt

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

  • 7/23/2019 C-Sharp & Application11

    44/196

    Gio

    trnh Visual Studio .NET 44

    a.In ra mn hnh gi trN!.

    b.Nhp thm mt s nguyn K t bn phm. Sau in ra CKN= N!/(K!*(N-K)!)

    Kthut 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 vcc kiu phng thc trong mt lp

    Trnh tthc hin

    1.M solution lm Bi thc hnh 1.1. Chnh sa tn ca solution tfirstAppthnh 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 FileAddNew project .Tng t nh cch to mi project bi thc hnh trc, chn th loi project lConsole Application. t tn cho project mi l modular.

    3.

    Quan st cu trc cy th mc ca solution trong ca sSolution Explorer v ctrongWindows Explorer. rng, trong ca sSolution Explorer, project firstApp ct m. iu ny c ngha, firstApp ng vai tr l Startup project. Khi nhn Ctrl

  • 7/23/2019 C-Sharp & Application11

    45/196

    Gio

    trnh Visual Studio .NET 45

    + F5 th project ny s c gi thc thi chkhng phi l project modular m ta mito ra.

    Trong ca sSolution Explorer, nhp phi chut ln modular. Trong menuhin ra, chn menu lnh Set as Startup project thit lp li startup project cho

    solution.4.

    Vic nhp n, tnh n! ri in kt qubn hon ton c ththc hin c bng cc culnh n gin. Tuy nhin, tng tnh r rng v ti sdng, bn nn to ra mt

    phng thc htrvic tnh ton n!. Xem m lnh bndi

    5.Chy th chng trnh xem kt qu. Hy rng, khai bo phng thc giaiThual static long giaiThua(int n). Thxa static trong khai bo ny ri chy li chngtrnh.

    Li nhn c cho bit ch cc phng thc static mi c triu gi, s dng lnnhau

    6.

    Bng cch to ra phng thc long giaiThua() nh trn, chng ta c th gii quytc vn tnh Ckn mt cch d dng. Li gi tnh Ckn nh sau:GiaiThua(n)/(GiaiThua(n-k)*GiaiThua(k))

  • 7/23/2019 C-Sharp & Application11

    46/196

    Gio

    trnh Visual Studio .NET 46

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

  • 7/23/2019 C-Sharp & Application11

    47/196

    Gio

    trnh Visual Studio .NET 47

    Bi thc hnh 1.3. To th vin s dng chung

    Tm tt

    Trong thc t, mt ng dngc thl 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. Vimc ch minh ha, th vin ny chcha 2 hm tin ch gip tnh giai tha v thp chp.Sau khi bin dch, bn s c c mt file nhvi phn mrng l DLL. Th vin ny, khicn, s c tham chiu n trong cc ng dng khc.

    K thut c trnh by

    -

    To loi ng dng loi th vin

    Trnh tthc hin

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

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

  • 7/23/2019 C-Sharp & Application11

    48/196

    Gio

    trnh Visual Studio .NET 48

    3.R rng, y khng phi l mt chng trnh chy nh cc ng dng bn vittrc - class Math khng c phng thc static public Main()tc l bn khng thnhn Ctrl + F5 chy chng trnh. Bin dch project ny bng menu lnhBuild

    Build commonUtils. Kt qu, bn sc mt th vin commonUtils.dll trong th mc

    bin\Release hoc bin\Debug ca project ty theo cch chn ch bin dch. Th vinny s c dng tham chiu n trong cc ng dng cn n.

    Mrng

    B sung cc phng thc thng dng khc vo th vin, chng hn nh phng thc xcnh xem mt sc phi l nguyn t hay khng, phng thc hon i gi trca hai scho trc,

  • 7/23/2019 C-Sharp & Application11

    49/196

    Gio

    trnh Visual Studio .NET 49

    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 tinca tam gic Pascal.

    K thut c trnh by

    -Sdng th vin c sn

    Trnh tthc hin

    1.

    To mi mt ng dng kiu Console Application. t tn project l pascalTriangle1

    2.

    Thc hin bsung tham kho n th vin commonUtils bng cch:- Nhp phi chut vo project pascalTriangle1 trong ca sSolution Explorer- Trong menu hin ra, chn Add Reference

  • 7/23/2019 C-Sharp & Application11

    50/196

    Gio

    trnh Visual Studio .NET 50

    Trong tab Browse ca hp thoi Add Reference, tm n th vin commonUtils.dll tora trc .

    Dthy rng th vin c tham kho n khng chc dng DLL m cthc cc dng khc, bao gm EXE, OCX,

    3.

    Hon thin phn m ngun c sdng tham chiu n th vin va b sung nh hnhdi:

    Mrng

    Hy trt ra nhng ghi ch cn thit vvic:

    - 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 ththay thhoc b i?

    - Tng t cho phng thc giaiThua(int n);

  • 7/23/2019 C-Sharp & Application11

    51/196

    Gio

    trnh Visual Studio .NET 51

    Ti sao trong qu trnh sdng phng thc C() li phi ghi y lcommonUtils.Math.C()? Chcn ghi Math.C() c c khng?

  • 7/23/2019 C-Sharp & Application11

    52/196

    Gio

    trnh Visual Studio .NET 52

    Bi thc hnh 1.5. Tam gic Pascal array version

    Tm tt

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

    K thut c trnh by

    -

    S dng array

    Trnh tthc hin

    1.To mi mt project kiu Console Application vi tn l pascalTriangle2

    2.Sdng cc tnh cht C00= Ckk= 1, Cnk= Cn-1k-1+ Cn-1k, ta sxy dng mt jagged arraytnh n ln. Chi tit nh phn m ngun pha di:

  • 7/23/2019 C-Sharp & Application11

    53/196

    Gio

    trnh Visual Studio .NET 53

    Mrng

    C thdng array nhiu chiu trong trng hp ny khng? Nu c th c skhc nhau no sovi dng jagged array?

    CHNG3LPTRNHHNGITNGVIC#

    Trong phn trc chng ta thy cch sdng ca lp i tng. y, chng ta snhcli mt skhi 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:

  • 7/23/2019 C-Sharp & Application11

    54/196

    Gio

    trnh Visual Studio .NET 54

    class MyClass{

    private int someField;

    public string SomeMethod(bool parameter)

    {}

    }

    Lp i tng cha cc thnh vinthnh vin l thut ng c sdng ni n dliu 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 dliu tham chiu. iu ny c ngha l khi bn khai bomt bin c kiu dliu lp th xem nh bn c mt bin c thcha tham chiu n mtthhin ca lp i tng . Bn cng cn phi khi to ra i tng bng cch dng tontnew.

    MyClass myObject; myObject= new MyClass();

    Chai thao tc khai bo v khi to i tng c th c lm mt ln nh thny:

    MyClass myObject = new MyClass();

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

    MyClass myObjectRef = myObject;

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

    3.1 n ktha trong C#C# htr n ktha cho tt ccc lp i tng, tc l mt lp chc th dn xut trc

    tip nhiu nht l t mt lp i tng khc. Lp c snht trong C# l lp System.Object

    class MyDerivedClass : MyBaseClass{

    // functions and data members here

  • 7/23/2019 C-Sharp & Application11

    55/196

    Gio

    trnh Visual Studio .NET 55

    }

    Cng nh mt sngn nglp trnh hng i tng, C# c mt sbttruy cp quy nhphm 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 mn thuc v, hoc cc kiu d liu dn xut

    protectedinternal

    Bin hoc phng thc c th c truy xut trong phm vi assemblyhin 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 lium n thuc v

    3.2 Np chng phng thc (Method Overloading)C# htrnp chng phng thc, cho php c nhiu phin bn cho mt phng thc c ccch kkhc nhau. Khi nim ch k ca phng thc y c hiu l tn phng thc, slng i s, kiu i s c sdng trong phng thc.

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

  • 7/23/2019 C-Sharp & Application11

    56/196

  • 7/23/2019 C-Sharp & Application11

    57/196

    Gio

    trnh Visual Studio .NET 57

    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 thcVirtualMethod (lp MyBaseClass hay MyDerivedClass) c sdng l ty thuc voni dung hin tica 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 trnhchkhng phi l trong lc bin dch chng trnh! c tnh ny cn c gi l tnhgnkt mun(late-binding) trong kthut lp trnh.

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

    Nu mt phng thc vi ch k c khai bo trong c lp c sv 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 tnhhung ny, phin bn ca phng thc c sdng hot ng sty thuc vo kiud liu ca binc sdng tham chiu n i tng thhin chkhng phi lchnh i tng thhin. iu ny c thhin trong cch thc hot ng ca on mlnh di y:class MyBaseClass {

    {

    return "Phuong thuc nay la virtual trong MyBaseClass";

    }}

    class MyDerivedClass: MyBaseClass{

    {

    return "Phuong thuc nay duoc dinh nghia de` trong MyDerivedClass";

    }

    }

    public string VirtualMethod() // KHONG DUOC KHAI BAO LA virtual NUA!!!

    public string VirtualMethod() // KHONG DUOC KHAI BAO LA override NUA!!!

    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

  • 7/23/2019 C-Sharp & Application11

    58/196

    Gio

    trnh Visual Studio .NET 58

    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 cnhbo vvic phng thc bche giu. trnh khi cnh bo nh vy, bn khai bophngthc c nh ngha li trong lp dn xut thm vi tkha new.

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

    {

    }

    {

    }

    Lu rng cch gi phng thc base.() gi mi phng thc ca lpc sl c th c sdng cho bt k phng thc no trong lp dn xut, chkhngnht thit l trong cng phng thc c ghi .

    3.5 Lp tru tng v hm tru tngC# cho php clp i tng v hm c khai bo l abstract (tru tng). Mt lp trutng th khng th c to thhin, trong khi , mt hm tru tng th khng thc

    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, chc th c khai bo trng dliu thnh phn v cc chkca phng thc, khng c phn ci t ca phng thc.

    lass Studentpublic virtual void

    ispaly(){

    Console.WriteLine(Thong tin chung cua sinh vien...);

    }

    lass ITStudent: Student

    public override void Display(){

    base.Display();Console.WriteLine(Thong tin rieng doi voi sinh vien CNTT....);

    }

  • 7/23/2019 C-Sharp & Application11

    59/196

    Gio

    trnh Visual Studio .NET 59

    abstract class SinhVien{

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

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

    V dvlp bnim phong:

    sealed class FinalClass{

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

    { ////}

    V dv phng thc bnim 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 tC# cung cp c chnp chng ton t, cho php ci t m lnh quyt nh cch thcmt lp i tng lm vic vi ton t thng thng. C php np chng mt ton tlnh sau:

    public static operator (parameter list)

    { cai dat ma lenh o day}

  • 7/23/2019 C-Sharp & Application11

    60/196

    Gio trnh Visual Studio .NET 60

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

    Bt buc phi c bttruy cp publicv static. Kiu dliu trvl kiu lp i tng khi lm vic vi cc lp i tng. Kiu dliu

    trv khng c l void. opl ton thai ngi, mt ngi (unary), hoc ton tquan h. Chai ton t== v !=

    phi c ci t theo cp.

    Cc ton thai ngi yu cu hai i s, ton tmt ngi chyu cu mt i s..

    V d di y xy dng mt lp m phng kiu dliu sphc vi cch sdng cc php to+, - 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 ComplexNumberoperator+(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

  • 7/23/2019 C-Sharp & Application11

    61/196

    Gio trnh Visual Studio .NET 61

    {

    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 thsdng hai php

    ton + vi vi dliu ComplexNumber mt cch trc tip. y, kt qunhn csl:

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

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

    Tm ttVit chng trnh qun l sinh vin ca mt trng. Sinh vin c thhc cc chuyn ngnhCng ngh Thng tin, Vt l, Ng vn. Mi chuyn ngnh tng ng c cc mn hc khcnhau.

    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 iChng trnh cho php nhp danh sch sinh vin, sau in danh sch sinh vin cng vi i

    trung bnh ca hra mn hnh.

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

  • 7/23/2019 C-Sharp & Application11

    62/196

    Gio trnh Visual Studio .NET 62

    Kthut c trnh by

    - Truy xut tp tin c nh dng cho trc-

    Sdng mt phng thc ca lp String

    -

    Cc kthut hng i tng c sdng trong bi ton thc tTrnh tthc hin

    1.Trc khi tin hnh ci t, ta kho st qua s lp c sdng. Vi nhng m tkhr rng trong yu cu bi ton, ta c c ci nhn tng quan vcc lp nh sau:

    Lu rng, phng thc dtb() c ci t l virtual chng ta c thoverridemt cch cth, chi tit hn trong cc lp ktha t class SinhVien. Phng thcToString() c ci t override tlp object sdng trong vic in ni dungca i tng.

    2.

    To mi mt project kiu Console Application vi tn l studentManager3.Ti cy phn cp Solution Explorer nhp phi chut v chn AddNew ItemTrong hp thoi hin ra, chn to mi class SinhVien.cs

  • 7/23/2019 C-Sharp & Application11

    63/196

    Gio trnh Visual Studio .NET 63

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

  • 7/23/2019 C-Sharp & Application11

    64/196

    Gio trnh Visual Studio .NET 64

    5.

    Bsung thm cc class SinhVienCNTT, SinhVienVan, SinhVienVL theo phn tch thik lp t trc. Di y l phn m t ci t cho lp SinhVienVan. Hai lp cn lSinhVienCNTT, SinhVienVL c ci t mt cch tng t.

  • 7/23/2019 C-Sharp & Application11

    65/196

    Gio trnh Visual Studio .NET 65

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

  • 7/23/2019 C-Sharp & Application11

    66/196

    Gio trnh Visual Studio .NET 66

    Yu cu thm

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

    (sdng vng lp while, do, )-

    Chnh sa c thnhp dliu cc sinh vin tfile.3.2 Bi thc hnh trn Winform

    Bi thc hnh 3.2.1 helloWinForms

  • 7/23/2019 C-Sharp & Application11

    67/196

    Gio trnh Visual Studio .NET 67

    Kthut c trnh by

    - Cu trc ca v c chhot ng ca mt project Windows Form Application.- C chxl skin ca cc Control trong mt Windows Form

    -

    Mt s phng thc, thuc tnh, skin quan trng ca cc iu khin trong mt WiForm.

    Trnh tthc hin

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

    2. Theo mc nh, mt solution vi mt project c to ra. Project ny c mt lp Form1Kho st ni dung ca project trong Windows Explorer, chng ta sthy cu trc

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

  • 7/23/2019 C-Sharp & Application11

    68/196

    Gio trnh Visual Studio .NET 68

    C ththy, mi Form c to ra tng ng vi 3 tp tin c tip u ngl ging nha

    ly v dl Form1 Form1.Designer.cs: cha cc m lnh do Form Designer t sinh ra tng ng v

    cc thao tc do ngi sdng ko th cc Control t ToolBox vo b mt Formhthc hin cc thit lp i vi cc Control.

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

    3. Chng ta cng c thquan st cu trc ca solution hay project bng cch kho st casSolution Explorer:

  • 7/23/2019 C-Sharp & Application11

    69/196

    Gio trnh Visual Studio .NET 69

    4. Tca s Solution Explorer, i tn tp tin Form1.cs thnh FormMain.cs. rng, cba tp tin lin quan n Form1 u c thay i theo mt cch ng b.

    5.

    Thit kgiao din cho FormMain nh hnh v

  • 7/23/2019 C-Sharp & Application11

    70/196

    Gio trnh Visual Studio .NET 70

    6. Bc tip theo, chng ta sthc hin ci t phng thc xl skin Click ca nbm btnCurrentTime:

    a. Chn iu khin nt bm btnCurrentTime trong ca sthit kForm.b. trang Event trong ca sProperties Windows, nhp p chut vo skin

    Click (xem hnh v di). Form Designer s sinh ra phng thc xl skinc tn mc nh l btnCurrentTime_Click(). (Phng thc xl skin cmc nh t tn l _)

  • 7/23/2019 C-Sharp & Application11

    71/196

    Gio trnh Visual Studio .NET 71

    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 boc hin th ra nh hnh v

    8.

    Thc ra chng ta c tht t tn cho phng thc xl skin. Chng hn, ci phng thc x l s kin MouseEnter cho nt bm btnCurrentTime, trong ca sProperties trang Events, tm n mc MouseEnter v:

  • 7/23/2019 C-Sharp & Application11

    72/196

    Gio trnh Visual Studio .NET 72

    a. Nhp vo tn phng thc xl skin: btn_MouseEnterb.Nhn Enterc. FormDesigner sto ra phng thc vi tn tng ng

    d.

    Tin hnh ci t m lnh cho phng thc xl skin trn nh sau:

    privatevoidbtn_MouseEnter(objectsender, EventArgse){btnCurrentTime.ForeColor = Color.Red;

    }

    9.

    Tng t, chng ta ci t tip phng thc x l skin MouseLeave cho nt bmbtnCurrentTime nh sau privatevoidbtn_MouseLeave(objectsender, EventArgse)

    {

    btnCurrentTime.ForeColor = SystemColors.ControlText;}

    10.Chy chng trnh v quan st kt qu: iu khin nt bm btnCurrentTime sc hiung mouse hover kh n tng: khi r con trchut vo nt bm btnCurrentTime, mu

  • 7/23/2019 C-Sharp & Application11

    73/196

    Gio trnh Visual Studio .NET 73

    ch ca n s i sang mu ; mu ch ca nt bm tr thnh bnh thng (muControlText) khi con trchut r ra khi nt bm.

    11.tm hiu k hn bn cht ca vic gn kt phng thc xl skin, chng ta nhpp chut vo FormMain.Designer.cs trong ca s Solution Explorer xem phn n

    dung c sinh ra bi Form Designer:

  • 7/23/2019 C-Sharp & Application11

    74/196

    Gio trnh Visual Studio .NET 74

  • 7/23/2019 C-Sharp & Application11

    75/196

    Gio trnh Visual Studio .NET 75

    Ch nhng phn c t sng trong hnh vni trn; t suy ra c bn cht cavic gn kt phng thc xl skin trong khi thit k.

    12.

    ng file ni dung FormMain.Designer.cs li. Cc bc tip theo sminh ha cch thcdng chung mt phng thc xl skin cho nhiu i tng khc nhau.

    13.

    Trong ca sthit kca FormMain, thc hina. Chn c hai i tng btnClose v btnAbout

    b. Trong trang Events ca ca sProperties, g tn phng thc xl skin Clickcho c hai iu khin nt bm ny l btnTask_Clickri nhn Enter (xem hnhv)

    14.Thc hin ci t m lnh cho phng thc ny nh sau:privatevoidbtnTask_Click(objectsender, EventArgse){

    if(sender == btnClose)this.Close();

  • 7/23/2019 C-Sharp & Application11

    76/196

    Gio trnh Visual Studio .NET 76

    elseif(sender == btnAbout)1MessageBox.Show("Day la chuong trinh minh hoa", "Thong bao");

    }

    Trong phng thc trn, chng ta sdng i s sender nhn bit iu khin no phsinh skin. Chng ta cng c ththc hin nh thny:

    privatevoidbtnTask_Click(objectsender, EventArgse){

    stringstTask = (sender asButton).Text; 2if(stTask == "Close") this.Close();

    elseif(stTask == "About")MessageBox.Show("Day la chuong trinh minh hoa", "Thong bao");

    }

    15.By gi, chng ta tinh chnh thm chng trnh htrhiu ng mouse hoverchott c cc iu khintrong form:

    a.

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

    privatevoidbtn_MouseEnter(objectsender, EventArgse){

    (sender asControl).ForeColor = Color.Red;

    }

    privatevoidbtn_MouseLeave(objectsender, EventArgse){

    (sender asControl).ForeColor = SystemColors.ControlText;

    }

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

  • 7/23/2019 C-Sharp & Application11

    77/196

    Gio trnh Visual Studio .NET 77

    b. Trong phn FormDesigner, chn tt c cc i tng trn bmt Form.c. Trong ca sProperties, chn phng thc xl skin MouseLeave cho tt

    cc i tng ang chnl btn_MouseLeave (xem hnh v)

    d. Lm tng t gn phng thc x l skin MouseEnter cho tt c cc khin ni trn l btn_Enter.

    e.

    Chy chng trnh xem hiu ng: khi r con trchut qua cc iu khin, fchca chng s c i thnh mu .

    16.

    Trong bc 11, chng ta bit c cch thc a mt thnh phn iu khin vogiao din ca mt Windows Form thng qua m lnh (bng cch tm hiu phn msinh ra bi Form Designer). By gi, chng ta sp dng thc hin thm cc iukhin vo Form v gn phng thc xl skin cho chng trong thi gian thcthi chng trnh

    a. Bsung vo Form mt nt bm btnCreateButton

  • 7/23/2019 C-Sharp & Application11

    78/196

    Gio trnh Visual Studio .NET 78

    b. Ci t phng thc xl skin Click cho nt bm ny nh sau:

  • 7/23/2019 C-Sharp & Application11

    79/196

    Gio trnh Visual Studio .NET 79

    c.

    Chy chng trnh v quan st kt qu.

  • 7/23/2019 C-Sharp & Application11

    80/196

    Gio trnh Visual Studio .NET 80

    Mrng

    -

    Hy tm hiu ngha ca vic ci t m lnh bc 15.a: (sender as Control). Cthsdng 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) sdng 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.

    Bi thc hnh 3.2.2 usingControls

    Tm tt

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

  • 7/23/2019 C-Sharp & Application11

    81/196

    Gio trnh Visual Studio .NET 81

    Kthut 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, -N

    mt nh tfile

    Trnh tthc hin1.

    To mi mt project loi Windows Application, t tn l usingControls2. 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

    Text Hello WinForms Tiu ca ca s

    FormBorderStyle FixedSingle Kch thc ca ca ss khng cthay i khi chy chng trnh

  • 7/23/2019 C-Sharp & Application11

    82/196

    Gio trnh Visual Studio .NET 82

    MaximizeBox False V hiu ha nt Maximize ca cas

    Ch rng, nhng thuc tnh c thay i gi trso vi mc nh s c hin thtron

    ca s Properties di dng ch in m3. Thit kgiao 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.

    dtpDOB Format Custom

    Chnh sa thuc tnh ca mt si tng nh sau:

    iu khin Thuc tnh Gi tr

  • 7/23/2019 C-Sharp & Application11

    83/196

    Gio trnh Visual Studio .NET 83

    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 sdng k tting Vit trongForm nn Visual Studio c hin thhp thoi yu cu ch nh bng m lu k t:

    Nhn nt Save With Other Encoding chn bng m thch hpsau bn cthchn cch lu theo UTF8 nh hnh di (cng c thchn ty chn UnicodeCodepage 1200):

  • 7/23/2019 C-Sharp & Application11

    84/196

    Gio trnh Visual Studio .NET 84

    5.

    Ci t phn m lnh cho skin Click ca nt bm btnSelectImage nh sau:

    Khi ngi sdng nhn vo nt ny, mt hp thoi shin ra cho php chn nh.Chcc tp tin c phn mrng l BMP, JPG, GIF mi c hin th la chn.iu ny c thit lp thng qua thuc tnh Filter ca i tng dlgOpen (thuclp OpenFileDialog).

    6. Khi ngi sdng g tn ca hvo txtName th ni dung ca lblName cng thay itheo. Mun vy, ta ci t m lnh cho skin TextChanged ca txtName nh (1)xemminh ha code di

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

    8.

    Khi nhn nt Cp nht th ni dung ca lblInfo c cp nht theo nh phn m lnhci t cho skin Click ca btnUpdate (3)9. Ngi sdng c thbt tt ch cun ni dung dng chlblInfo bng cch nhn

    chut vo n. Ci t m lnh cho skin Click ca lblInfo nh (5)

  • 7/23/2019 C-Sharp & Application11

    85/196

    Gio trnh Visual Studio .NET 85

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

  • 7/23/2019 C-Sharp & Application11

    86/196

    Gio trnh Visual Studio .NET 86

    CHNG4.XLDLIUVIADO.NET

    Xl dliu l nhim vphbin v quan trng ca nhiu chng trnh ng dng.

    Dliu c truy xut, xl ca mt chng trnh ng dng c thl mt tp tin vn bn,tp tin cc bn ghi, hay l mt ngun dliu t CSDL no . .NET Framework cung cpmt lng ln cc thnh phn giao din (Win Forms, Web Forms) htrcho vic trnh by,kt buc (bind) dliu. Cng vi l nn tng xl dliu ADO.NET cung cp cchthc lm vic vi nhiu loi ngun dliu khc nhau mt cch linh ng. Do tnh cht quantrng ca vic xl dliu trong mt ng dng cng vi sphc tp ca ADO.NET, trckhi bt tay vo thc hin cc bi tp thc hnh, chng ta kho st qua mt s im l thuytc 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 phtruy cp ngun d liuv 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 tnkhc l lp kt ni Connectectivity Layer). Trong ADO.NET, c 4 i tng chnh vicc chc nng c bn nh sau:

    Connection: gip thc hin kt ni n cc CSDL

  • 7/23/2019 C-Sharp & Application11

    87/196

    Gio trnh Visual Studio .NET 87

    Command: gip truy cp n CSDL v thc hin cc pht biu SQL hay thtc lu trsn (stored procedure) ca CSDL

    DataReader: dng c nhanh ngun dliu, ch c duyt tun ttheo chiu tin cacc record

    DataAdapter: dng chuyn dliu truy vn c cho cc i tng lu trv xl(DataSet, DataTable). DataAdapter ch yu thc hin cc thao tc nh SELECT,INSERT, UPDATE, DELETE

    Vmt thc cht, thnh phn .NET Framework Data Provider cung cp giao din lp trnhchung lm vic vi cc ngun dliu. Mi nh cung cp3c th s a ra mt loidata provider ring. Di y l bng m tgiao din lp trnh cng vi cc lp cbn cacc data provider m ADO.NET cung cp sn:

    sdng data provider no, chng ta phi tin hnh khi bo using namspace tng ngChng hn, usingSystem.Data.SqlClient;

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

    Thnh phn th haitrong kin trc ADO.NETDataSetc xem nh l containerdng lu tr i tng lin quan n dliu nh DataTable, DataRelation, DataView.Thnh phn ny cn c gi l lp khng kt ni (disconected layer).

    3Nh cung cp y c hiu theo ngha cvloi ngun dliu ln cch thc truy xut ngun dliu. V d, ngoidata provider SqlClient do Microsoft cung cp, cng c thc mt tchc khc pht trin mt provider khc truyxut loi ngun dliu ny.

    Interface SQL ServerProvider

    Oracle Provider OLEDB Provider ODBC Prov

    IDbConnection SqlConnection OracleConnection OledbConnection OdbcConnec

    IDbDataAdapter SqlDataAdapter OracleDataAdapter OledbDataAdapter OdbcDataAd

    IDbCommand SqlCommand OracleCommand OledbCommand OdbcComma

    IDbDataReader SqlDataReader OracleDataReader OledbDataReader OdbcDataRe

  • 7/23/2019 C-Sharp & Application11

    88/196

    Gio trnh Visual Studio .NET 88

    DataSet nh l mt CSDL thu nhti my client, c thcha cc i tng table, view,constaint, ralationship gia cc table, Tt cdliu tngun dliu thc s c npvo DataSet di dng cc DataTable, l mt snapshot ca ngun dliu thc. Khi d

    liu ny s c chnh sa c lp, sau nu cn s c cp nht trli ngun dliuthc. Theo nguyn tc ny, chng ta khng cn duy tr kt ni lin tc mt cch khng cnthit vi ngun dliu 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 niTrong m hnh kt ni ca ADO.NET, c mt connection hot ng c duy tr

    gia i tngDataReaderca ng dng v mt data source(ngun dliu). Mt dngd liu (data row) c trv tdata source mi khi phng thc Read ca i tng

    DataReader c thc thi. im quan trng nht ca m hnh kt ni l dliu cly ttp dliu (cc record c trvbi mt lnh SQL no ) theo kiu tng recordmt cho mt ln c, ch c (read-only), v chtheo mt hng tin (forward-only). Hnhdi y m tcch sdng 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 hmkhi dng ca n.

    2.

    Khi to mt bin chui v gn cho cu lnh SQL da theo dliu mun np v.3. Khi to mt i tng Command tvi ni dung cu lnh SQL xc nh trn.

    4. To i tng DataReader bng cch thc thi phngthc

    Command.ExecuteReader(). i tng ny sau s c dng c kt qucacu truy vn mi dng mt ln.

  • 7/23/2019 C-Sharp & Application11

    89/196

    Gio trnh Visual Studio .NET 89

    on code sau minh ha cc bc trn vi Data Provider SqlClient. on code s c danh stn cc sinh vin trong mt bng SinhVien ca c sdliu v hin thln mt iu khin LiChi tit v cc i tng DataReader, Command, Connection sc cp chi tit sau.

    using System.Data.SqlClient;

    ...// (1) Tao ConnectionSqlConnection cn = new SqlConnection(chuoiKetNoi);cn.Open();// (2) Chuoi SQL thuc hien lay danh sach ten cac sinh vien xep tang dan theo NgaySinhstring sql = "SELECT HoTen FROM SinhVien ORDER BY NgaySinh";// (3) Tao doi tuong CommandSqlCommand cmd = new SqlCommand(sql, conn);DbDataReader rdr;// (4) Tao doi tuong DataReaderrdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);while (rdr.Read())

    listBox1.Items.Add(rdr["HoTen"]); // Fill ListBoxrdr.Close(); // Dong datareader sau khi da su dung xongTham s c sdng trong phng thc ExecuteReader xc nh i tng Connection sc ng sau khi DataReader c ng.

    4.2.2 M hnh Ngt Kt ni

    Trit l ca m hnh Ngt kt ni l: Dliu c npsdng mt lnh SQLtngun dliu bn ngoi vo bnh m ti my client; tp kt qu c xl ti my ccb; mi cp nht sau s c truyn tdliu trong bnh ngc trli ngun dliu.

    M hnh c gi l ngt kt ni bi v i tng kt ni ch c m lu c dliu tngun dliu v tin hnh cc thao tc cp nht. Bng cch a dliu v

    pha my client, ti nguyn ca serverchng hn nh thng tin dliu Connection, bnh, thi gian xls c gii phng bt. Tuy vy, m hnh ny cng c nhc imvthi gian cn np tp dliu v bnh dng cha dliu ti my client.

    Nh hnh di y minh ha, cc thnh phn chnh ca m hnh ngt kt ni lDataApdapter v DataSet. DataAdapter lm nhim v nh l cu ni gia ngun dliu vDataSet, np dliu vo cc bng ca DataSet v y cc thay i ngc trli ngun dliu. Mt DataSet ng vai tr nh l mt c sdliu quan hnm trong bnh, chamt hay nhiu DataTables, gia cc DataTable ny cng c thc cc mi quan hvi

  • 7/23/2019 C-Sharp & Application11

    90/196

    Gio trnh Visual Studio .NET 90

    nhau nh trong mt c sdliu quan hthc. Mt DataTable cha cc dng v cc ctdliu thng c ly t c sdliu ngun.

    Trong s cc phng thc v thuc tnh ca DataAdapter th Fill() v Update() l haiphng thc quan trng nht. Fill() chuyn mt query n c sdliu v lu tp kt qutrvtrong 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 ccha trong cc thuc tnh ca DataAdapter. Chi tit vDataAdapter s c cp phn

    sau.

    minh ha cch thc lm vic vi DataAdapter v DataSet, on code di ygii thiu cch to ra mt itng DataTable, np dliu tmt c sdliu, v a nvo 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 datasetDataSet ds = new DataSet();// (3) Tao mot Table co ten SinhVien trong dataset va nap du lieu cho noda.Fill(ds, "SinhVien");// (4) Hien thi danh sach ten sinh vien ra list boxDataTable dt = ds.Tables["SinhVien"];for (int i=0; i< dt.Rows.Count;i++){

    DataRow row = dt.Rows[i];

    listBox1.Items.Add(row["HoTen"]);}Bc u tin l to ra mt thhin ca SqlDataAdapter bng cch truyn mt cu

    lnh SELECT v chui kt ni cho phng thc khi dng ca lp ny. DataAdapter slon vic to ra i tng Connection cng nh vic m, ng Connection khi cn thit.

  • 7/23/2019 C-Sharp & Application11

    91/196

    Gio trnh Visual Studio .NET 91

    Sau khi mt DataSet rng s c to ra, phng thc Fill() ca DataAdapter sto ra mtDataTable c tn l SinhVien trong DataSet v np cc dng dliu vo DataTable ny(bng cu ln SQL dng SELECT ca DataAdapter). Mi column ca DataTable stngng vi mt column trong bng ca c sdliu ngun. Dliu trong bng dliu 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.NETNh m ttng quan trong phn trc, m hnh Kt ni c da trn vic thit

    lp mt Connection n CSDL v sau sdng cc Command thc hin vic thm,xa, sa, hay c dliu tdata source (ngun dliu) c kt ni. c im phn bitca m hnh ny l cc Command c pht sinh, lm vic vi data source thng quamt Connection ang hot ng Connection ny sm cho n khi cc thao tc chon 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 truyngia ng dng vi data source.

    4.3.1 Lp ConnectionC nhiu lp Connection trong ADO.NET mi lp tng ng vi mt Data Providerbao gm SqlConnection, OracleConnection, OleDbConnection, OdbcConnection. Mc dmi lp c thgm nhng c tnh ring, nhng cc lp ny u phi implement interfaceIDbConnection. 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 trkiu lit k (enumeration): Broken, Closed, Connecting,Executing, Fetching, hoc Open

    Loi Tn M tMethod Open

    Close

    M mt Connection. Roll back mi thao tc ang lm

    d.ng Connection tr Connection cho ConnectionPool nu nh c s dng Connection Pool

    Method BeginTransaction Khi to mt database transaction

  • 7/23/2019 C-Sharp & Application11

    92/196

    Gio trnh Visual Studio .NET 92

    Method ChangeDatabase Thay i CSDL hin ti cho Connection ang m.Chui m t tn CSDL mi c truyn cho phngthc ny

    Method CreateCommand To ra mt i tng Command ng vi Connection

    4.3.1.1 Connection str ing

    Thuc tnh ConnectionString xc nh data source v cc thng tin cn thit truyxut data source, chng hn nh User ID v Password, Ngoi nhng thng tin c bnny, Connection string cn c thcha cc gi tr cho cc trng dliu c trng cho data

    provider. V d, Connection string cho Ms Sql Server c thcha cc gi tr quy nhConnection Timeout v Packet Size.

    Di y l cc v dvcch thnh lp chui kt ni cho cc data provider thng

    gp. Danh sch y vcch thnh lp cc chui kt ni c cho Error! Referencesource not found..

    SqlConnection sdng c chxc 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 sdng c chxc thc kiu Windows:

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

    y, (1) l tn/my chcha CSDL, (2) l tn CSDL, (3) l tn ng nhp, (4) lmt khu tng ng.

    V d:server=192.168.0.1;database=qlnhanvien;uid=k28;pwd=spiderhocServer=192.168.0.1;Database=qlnhanvien;Trusted_Connection

    =yes

    OleDbConnection s dng kt ni CSDL Access phin bn trc

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

  • 7/23/2019 C-Sharp & Application11

    93/196

    Gio trnh Visual Studio .NET 93

    V d:

    o string stConnection =

    string.Format(Provider=Microsoft.Jet.OLEDB.4.0;DataSou

    rce={0}, @c:\program files\qlnhanvien.mdb);

    o Sdng trong ng dng Internet: string stConnection =string.Format(Provider=Microsoft.Jet.OLEDB.4.0;DataSou

    rce={0},

    Server.MapPath(/data/qlnhanvien.mdb);

    ODBC: DSN=vil Data Source Name (DSN), v dDSN=qlnhanvien

    Cc Connection string c dng to ra i tng Connection. Cch thc hin thng thntruyn 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 PoolingTo mt Connection l mt qu trnh tn nhiu thi giantrong mt s trng hp, vicny 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 ccConnection c trng Connection string ti u ha sln thit lp, hp lha thng tinkt ni.

    Cc quy tc quy nh connection pool cn bit:

    -

    C ch Connection pooling c kch hot theo mc nh. C ch ny c ttbng cch thm vo Connection string Pooling=falsei vi SqlConnection

    hoc OLE DB Services=-4i vi OleDbConnection.

    - Mi connection pool c ng vi mt connection string duy nht. Khi c mtConnection c yu cu, pool handler (bqun l pool) sso snh connection

  • 7/23/2019 C-Sharp & Application11

    94/196

    Gio trnh Visual Studio .NET 94

    string vi nhng connection string trong cc pools ang tn ti. Nu c mtConnection trng khp th Connection tng ng s c xc nh trong pool.

    -

    Nu tt c cc connection trong pool ang c sdng khi li c yu cu v

    connection th yu cu s c xp vo hng i cho n khi c mt connectionrnh. Cc connection s c giiphng khi phng thc Close hay Dispose cai tng connection c gi.

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

    i vi SQL Server, bn c th iu khin hnh vi ca conneciton pooling bng cch gpcc cp key-value vo connection string. Cc key ny c th c sdng thit lp slng nh nht v ln nht cc connection trong pool cng nh xc nh xem mt

    connection c cn phi reset khi n c ly tpool ra hay khng. Mt key c bit ch l key c tn Lifetime, xc nh thi gian m connection c thtn ti trc khi n bhy b. Gi tr ny c kim tra khi mt connection c trvcho pool. Nu connection c m trc , v lu hn gi trLifetime th n sbhy.

    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);4.3.2 i tng CommandSau khi mt i tng connection c to ra, bc tip theo trong qu trnh truy xutCSDLi 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 lpCommand ng vi cc data provider; cc lp ny u implement interface IDbCommand.

  • 7/23/2019 C-Sharp & Application11

    95/196

    Gio trnh Visual Studio .NET 95

    4.3.2.1 To itng CommandBn c thdng mt trong nhiu hm khi dng to i tng Command mt cch trc tiphoc sdng cch tip cn ProviderFactory.

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

    SqlConnection conn = newSqlConnection(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", "tnvspider");

    Trong trng hp ng dng c thphi sdng nhiu data provider, bn nn sdng cchtip cn provider factory. Factory c to ra bng cch truyn chui data provider chohm khi dng ca n. Tip n, phng thc CreateCommand c gi trvmt itng command.

    string provider = "System.Data.SqlClient";DBProviderFactory factory = DbProviderFactories.GetFactory(provider);DbCommand cmd = factory.CreateCommand(); // DbCommand l mt lp tru tngcmd.CommandText = sql; // sql l mt chui query hay command cmd.Connection =

    conn; // conn l mt Connection

    4.3.2.2 Thc thi mt CommandLnh SQL c gn trong thuc tnh CommandText ca i tng Command s c thc thbng mt trong cc phng thc c chra bng di y

    ExecuteNonQuery Thc thi truy vn hnh ng (action query) v tr v s lngdng d liu b nh hng bi truy vn :

    cmd.CommandText = "DELETE SinhVien WHEREMaSinhVien=12";

    int soLuong = cmd