C# - Tran Thong - DaLat

Embed Size (px)

Citation preview

  • 8/6/2019 C# - Tran Thong - DaLat

    1/111

    TRNGI HC LT

    KHOA CNG NGH THNG TIN

    Thc s

    TRN THNG

    BI GING TM TT

    LP TRNH HNG I TNG

    Dnh cho sinh vin ngnh Cng Ngh Thng Tin

    (Lu hnh ni b)

  • 8/6/2019 C# - Tran Thong - DaLat

    2/111

    1

    Mc lc

    Mc lc ...........................................................................................................................1Mu............................................................................................................................3Chng 1: Kin trc .NET ...........................................................................................41. 1 Quan h gia C# v.NET .........................................................................................41. 2 CLR (Common Language Runtime) ........................................................................41. 3 Gii thiu IL (Intermediate Language) ....................................................................51. 4 Th vin (Assembly)................................................................................................51. 5 Cc lp trong .NET ..................................................................................................51. 6 To ng dng .NET s dng C#...............................................................................61. 7 Vai tr ca .NET trong kin trc .NET Enterprise...................................................6Chng 2: Cn bn C# .................................................................................................72. 1 Vit chng trnh C# u tin..................................................................................72. 2 Bin.........................................................................................................................112. 3 Kiu d liu cbn.................................................................................................122. 4 iu khin lung....................................................................................................142. 5 Kiu lit k..............................................................................................................192. 6 Mng.......................................................................................................................212. 7 Khng gian tn (Namespace) .................................................................................222. 8 Phng thc Main() ...............................................................................................232. 9 Bin dch nhiu tp tin C#......................................................................................232. 10 Xut nhp qua Console.........................................................................................242. 11 S dng ch thch.................................................................................................252. 12 Ch dn tin x l trong C#..................................................................................25Chng 3: i tng v kiu ....................................................................................273. 1 Lp v cu trc .......................................................................................................273. 2 Thnh vin ca lp.................................................................................................293. 3 Cu trc (Struct) .....................................................................................................463. 4 Lp Object ..............................................................................................................53Chng 4: Sk tha .................................................................................................564. 1 Cc kiu k tha .....................................................................................................564. 3 T kha b tr........................................................................................................59

  • 8/6/2019 C# - Tran Thong - DaLat

    3/111

    2

    4. 4 a hnh (polymorphism) ........................................................................................60Chng 5: Ton tv chuyn kiu............................................................................725. 1 Ton t....................................................................................................................725. 3 Qu ti ton t ........................................................................................................745. 4 Chuyn kiu do ngi dng nh ngha .................................................................79Chng 6: Sy nhim, skin v qun l li ........................................................816. 1 Sy nhim (delegate)...........................................................................................816. 2 S kin (Event).......................................................................................................826. 3 Qun l li v bit l ..............................................................................................85Chapter 7: Qun l b nhv con tr.......................................................................897. 1 Qun l b nh.......................................................................................................897. 2 Gii phng ti nguyn ............................................................................................907. 3 M khng an ton ...................................................................................................93Chng 8: Chui, biu thc quy tc v tp hp ......................................................978. 1 System.String..........................................................................................................978. 2 Biu thc quy tc....................................................................................................988. 3 Nhm cc i tng.............................................................................................100Chng 9: Reflection.................................................................................................1049. 1 Thuc tnh (attribute) ty chn.............................................................................104

    9. 2 Reflection..............................................................................................................106Hng dn phn thc hnh......................................................................................110Ti liu tham kho.....................................................................................................110

  • 8/6/2019 C# - Tran Thong - DaLat

    4/111

    3

    Mu

    Lp trnh hng i tng (OOP) ng mt vai tr quan trng trong vic xy dng v

    pht trin ng dng. c bit trong cc ngn ng lp trnh th h th 4 (nh java hay

    c#) hu nhc xy dng l nhng ngn ng thun i tng nhm h trnhng

    nguyn l cn bn trong lp trnh hng i tng cng nh cc tnh nng nng cao

    da trn OOP gip cho vic xy dng v pht trin ng dng trn OOP d dng v

    nhanh chng hn. Do vic tip cn v nm vng cc nguyn l lp trnh hng i

    tng rt quan trng i vi sinh vin cho vic s dng v ng dng n cho cc mn

    hc lin quan n lp trnh v cc mn hc chuyn ngnh cc hc k tip theo.

    Mc tiu ca mn hc:

    n tp li cc vn v kthut lp trnh, cch thc pht trin ng dng n giantrn C#.

    Cung cp cho sinh vin tip cn v s dng ngn ng lp trnh C#. Cung cp cho sinh vin kin thc v lp trnh hng i tng trn ngn ng lp

    trnh C# bao gm tnh ng gi, k tha, a hnh, giao tip, attribute, reflection.

    Cung cp cc kin thc v x l v thao tc d liu trn tp tin vn bn v nhphn, XML.

    Cung cp cc kin thc v s dng cc cu trc d liu c dng sn trn .Nettrong qu trnh pht trin ng dng nh Stack, Queue, ArrayList, HashTable.

    Gii thiu vic xy dng v pht trin ng dng trn mi trng mi trng .Net.Cung cp cho sinh vin tip cn v lm quen vi mi trng pht trin ng dng

    da trn Visual Studio 2005.

  • 8/6/2019 C# - Tran Thong - DaLat

    5/111

    4

    Chng 1: Kin trc .NET

    Microsoft Visual C# l mt ngn ng mnh m nhng n gin ch yu hng n

    cc nh pht trin xy dng ng dng trn nn tng .NET ca Microsoft. C# k thanhng c trng tt nht ca ngn ng C++ v Microsoft Visual Basic, v loi bimt sc trng khng thng nht v lc hu vi mc tiu to ra mt ngn ng rrng v logic hn. S k vng ca C# c b sung mt sc trng mi quantrng bao gm Generic, cch lp v phng thc n tn... Mi trng pht trin cungcp bi Visual Studio 2005 lm cho nhng c trng ny trnn d s dng v nngcao nng sut cho cc nh pht trin ng dng.

    Mc ch ca chng:

    Gii thiu ngn ng C#. Gii thiu cc thnh phn quan trng ca nn tng .Net. So snh C# vi ngn ng lp trnh C v mt s cc ngn ng lp trnh khc.1. 1 Quan h gia C# v.NET

    C# l mt ngn ng lp trnh mi v c cc c trng:

    N c thit k ring dng cho nn tng.NET. N l mt ngn ng thun i tng c thit k da trn kinh nghim ca cc

    ngn ng hng i tng khc.

    C# l mt ngn ngc lp. N c thit k c th sinh ra m ch trong mitrng .NET, n khng phi l mt phn ca .NET bi vy c mt vi c trngc h trbi .NET nhng C# khng h tr.

    1. 2 CLR (Common Language Runtime)

    im tp trung ca nn tng.NET l mi trng thc hin vic thc thi ng dng cgi l CLR (Commong Language Runtime-CLR).

    Trong .NET chng trnh khng bin dch thnh tp tin thc thi, chng c bin dchtheo hai bc:

    Bin dch m ngun thnh IL (Intermediate Language). Dng CLR bin dch IL thnh m my theo tng nn tng thch hp.Vic thc hin nh trn cung cp nhiu thun li cho .NET nh:

    c lp nn tng v phn cng. Nng cao hiu sut. Gip cho cc ngn ng pht trin trn cc ngn ng lp trnh khc nhau c th

    tng tc vi nhau.

  • 8/6/2019 C# - Tran Thong - DaLat

    6/111

    5

    1. 3 Gii thiu IL (Intermediate Language)

    IL hot ng nh l bn cht ca nn tng .NET. M C# s lun c dch sang ILtrc khi n c thc thi. Bt k ngn ng no hng .NET cng s h trcc c

    tnh chnh ca IL.Sau y l nhng c tnh chnh ca IL:

    Hng i tng v dng giao tip. S tch bit gia kiu gi tr v kiu tham chiu. nh kiu mnh. Qun li thng qua cc ngoi l. S dng cc thuc tnh.1. 4 Thvin (Assembly)

    Mt assembly l mt tp tin cha m c bin dch sang .NET. N c th chatrong nhiu tp tin. Nu mt assembly c lu trong nhiu tp tin, th s c mt tptin chnh cha cc con tr v cc m t v cc tp tin khc ca assembly. Cu trcassembly c dng chung cho c m thc thi v m th vin. S khc bit duy nhtl assembly thc thi c cha hm main trong khi assembly th vin th khng c.

    Mt im quan trng trong cc assembly l chng cha cc siu d liu (metadata)dng m t cc kiu v phng thc c nh ngha tng ng trong m. Mtassembly cng cha siu d liu dng m t chnh assembly . Siu d liu chatrong mt vng c gi l tp tin m t (manifest), n cho php kim tra phin bnv tnh trng ca assembly.

    Vi vic assembly cha siu d liu, n cho php chng trnh, ng dng hay ccassembly khc c th gi m trong mt assembly m khng cn tham chiu nRegistry, hoc mt d liu ngun khc.

    1. 5 Cc lp trong .NET

    Mt trong nhng li ch ln nht ca vit m l vic s dng cc th vin lp cssn cca .NET. Th vin lp csca .NET l mt tp hp rt nhiu cc lp m

    c pht trin bi Microsoft, nhng lp ny cho php thao tc rt nhiu cc tc vsn c trong Windows. Chng ta c th to cc lp ca mnh t cc lp c sn trongth vin lp csca .NET thng qua s k tha.

    Th vin lp cs.NET l kt hp tnh n gin ca cc th vin Visual Basic v Javavi hu ht cc c tnh trong cc th vin hm API. C nhiu c tnh l, t s dngca Windows khng c cung cp trong cc lp ca th vin .NET. Nhng c tnhthng dng u c h try trong th vin lp ca.NET. Nu chng tamun gi mt hm API trong .NET, chng ta thc hin cch "platform-invoke", cch ny lun bo m tnh ng n ca kiu d liu khi gi v h trcho c C#, C++,

    v VB.NET. Thao tc gi ny khng kh hn vic gi trc tip API t m C++.

  • 8/6/2019 C# - Tran Thong - DaLat

    7/111

    6

    1. 6 To ng dng .NET sdng C#

    C# c th to cc ng dng dng lnh (console) cng nh cc ng dng thun vn bnchy trn DOS hay Window. Tt nhin, chng ta c th dng C# to cc ng dng

    dng cho cc cng ngh tng thch vi .NET.Cc ng dng c th vit trn C#:

    ng dng ASP.NET. ng dng WinForm. Cc dch v da trn Windows.1. 7 Vai tr ca .NET trong kin trc .NET Enterprise

    C# yu cu khi chy phi c .NET runtime, do bt buc chng ta phi ci t

    .Net runtime trc khi mun chy cc ng dng c pht trin trn .Net. Tuy nhin,trong mt s phin bn mi ca hiu hnh Windows, .Net c ci t mc nh.Tht vy, C# c coi nh l mt chi ni bt cho cc t chc c th to nhngng dng mnh m, nhng ng dng client-server theo kin trc N-lp.

    Khi kt ni d liu thng qua ADO.NET, C# c kh nng truy cp ti cc csdliu tng qut v nhanh chng nh csd liu SQL Server v Oracle. D liu tr vt cc thao tc d liu thng qua DataSet gip d dng thao tc thng qua cc itng ca ADO.NET. Kt ni d liu tng tr v kiu XML gip cho vic truynthng trn mng d dng.

  • 8/6/2019 C# - Tran Thong - DaLat

    8/111

    7

    Chng 2: Cn bn C#

    Mc ch ca chng:

    Khai bo bin. Khi to v phm vi hot ng ca bin. Cc kiu d liu cbn. Cch s dng cc vng lp v cu lnh. Gi, hin th lp v phng thc. Cch s dng mng. Ton t. An ton kiu v cch chuyn kiu d liu. Kiu lit k (enum). Khng gian tn (namespace). Hm Main( ). Bin dch trong C#. Xut nhp dng System.Console. S dng ch thch trong C#. Cc nh danh v t kho trong C#.2. 1 Vit chng trnh C# u tin

    u tin chng ta vit mt chng trnh ng dng Hello World n gin s dngC#:

    class HelloWorld

    {

    staticvoid Main( )

    {

    System.Console.WriteLine("Chuong Trinh Dau Tien");

    System.Console.Readline();

    }

    }

    ng dng dng lnh l ng dng khng c giao din ngi dng. Vic xut nhpthng qua dng lnh chun. Phng thc Main() trong v d Hello World vit chuiChuong Trinh Dau Tien ln mn hnh. Mn hnh c qun l bi mt i tng tnConsole. i tng ny c mt phng thc WriteLine(), nhn mt chui v xut

    chng ra thit b xut chun (mn hnh).

  • 8/6/2019 C# - Tran Thong - DaLat

    9/111

    8

    Cch chy chng trnh Hello world

    thc hin c chng trnh chng ta s dng Visual Studio.NET Intergated

    Development Environment (IDE) trong cng c Visual Studio.NET IDE. Chngcung cp nhng cng c rt mnh cho vic d li v h trmt s tnh nng khc.

    Son tho chng trnh Hello Wolrd

    Chy chng trnh IDE. Chn Visual Studio.NET t thc n Start Chn FileNewProject. Chn kiu d n l Visual C# Project v dng Console

    Application. Chng ta c th nhp vo tn d n v ng dn lu tr d n.Sau khi chn nt OK, mt ca s mi s xut hin nh hnh 2.1

    Hnh 2.1:To ng dng dng lnh trong Visual Studio.NET

    Sau a lnh sau vo trong hm Main()System.Console.WriteLine("Chuong Trinh Dau Tien");

  • 8/6/2019 C# - Tran Thong - DaLat

    10/111

    9

    Hnh 2.2: Ca s son tho cho mt dn mi

    Bin dch v chy chng trnh Hello Wolrd

    C nhiu cch bin dch v chy chng trnh trong Visual Studio.NET

    Chn Ctl+Shift+B hay Buildbuild t thc n. Chn nt Build nh trong hnh 2.3.

    Hnh 2.3: Nt build

    chy chng trnh m khng thc hin d li:

    Nhn Ctrl + F5 hay DebugStart Without Debugging t thc n. Chn nt Start Without Debugging nh trong hnh 2.4

    Hnh 2.4: Nt Start Without Debugging

    Sdng cng c d li ca Visual Studio.NET

    3 k nng quan trng khi d li:

    Bng cch no t cc im dng (breakpoint) v chy cc im dng nh thno?

    Bng cch no chy tng bc qua cc li gi phng thc. Bng cch no kim tra v thay i gi tr ca bin, d liu thnh vin ca lp.

  • 8/6/2019 C# - Tran Thong - DaLat

    11/111

    10

    D li c thc thc hin theo nhiu cch. Thng thng qua thc n. ngin nht l t im dng bn thc tri nh trong hnh 2.5

    Hnh 2.5: Mt im dng

    chy Debug chng ta c th nhn F5 v sau chng trnh s chy n imdng nh trong hnh 2.6.

    Hnh 2.6: Chn im dng

    Bng cch t con chut vo v tr cc bin chng ta c th thy c gi tr hin tica bin nh trong hnh 2.7.

    Hnh 2.7: Hin th mt gi tr

    Trnh d li ca Visual Studio.NET cng cung cp mt s ca s hu dng khc dli nh l ca s Local d cc bin cc b nh trong hnh 2.8

    Hnh 2.8: Ca s Local

    Chng ta c th mrng ca s xem chi tit thng tin bin nh trong hnh 2.9.

    Hnh 2.9: Mrng ca s Local

  • 8/6/2019 C# - Tran Thong - DaLat

    12/111

    11

    Chng ta c th lp qua cc phng thc bng cc nhn F11. V d lp qua phngthc DrawWindow() ca lp WindowClass nh trong hnh 2.10.

    Hnh 2.10: Lp qua mt phng thc

    2. 2 Bin

    Mt bin dng lu tr gi tr ca mt kiu d liu no .

    C php C# sau y khai bo mt bin:[ b_t ] kiu_d_liu nh_danh;Vi b_t l mt trong nhng t kho: public, private, protected, ... cn kiu_d_liul cc kiu d liu nh s nguyn (int), thc (float) v nh_danh l tn bin.V d di y mt bin tn i kiu nguyn v c thc truy cp bi bt c hm no.

    public int i;

    Ta c th gn cho bin mt gi tr bng ton t "=".

    i = 10;

    Ta cng c th khai bo bin v khi to gi tr cho bin nh sau:

  • 8/6/2019 C# - Tran Thong - DaLat

    13/111

    12

    int i = 10;

    Chng ta c th khai bo nhiu bin c cng kiu d liu nh sau:

    int x = 10, y = 20;

    int x = 10;

    bool y = true ; // khai bo trn ng

    int x = 10, bool = true // khai bo trn c li

    Mt hng (constant) l mt bin nhng gi tr khng th thay i trong sut thi gianthc thi chng trnh. i lc ta cng cn c nhng gi tr bao gicng bt bin.

    const int a = 100; // gi tr ny khng th b thay i

    Hng c nhng c im sau:

    Hng bt buc phi c gn gi tr lc khai bo. Mt khi c khi gn thkhng th vit ln.

    Tr ca hng c thc tnh ton vo lc bin dch. Do khng th gn mthng t mt tr ca mt bin. Nu mun lm th th phi s dng read-only field.

    Hng bao gicng static, tuy nhin ta khng tha t kho static vo khi khaibo hng.

    C ba thun li khi sdng hng:

    Hng lm cho chng trnh c d dng hn, bng cch thay th nhng con s vcm bi nhng tn mang y ngha hn.

    Hng lm cho chng trnh d sa hn.

    Hng lm cho vic trnh li d dng hn, nu bn gn mt tr khc cho mt hngu trong chng trnh sau khi bn gn gi tr cho hng, th trnh bin dch sthng bo li.

    2. 3 Kiu dliu cbn

    C# l mt ngn ngc kim sot cht ch v mt kiu d liu, ngoi ra C# cn chiacc kiu d liu thnh hai loi: kiu gi tr(value type) v kiu tham chiu(reference type). Ngha l trn mt chng trnh C# d liu c lu tr mt hoc haini ty theo c th ca kiu d liu.

    Ch th nht l stack: mt vng b nhdnh lu tr d liu vi chiu di cnh,chng hn s nguyn chim dng 4 bytes. Mi chng trnh khi ang thc thi uc cp pht ring mt stack m cc chng trnh khc khng c truy cp ti.Khi mt hm c gi thc thi th tt c cc bin cc b ca hm c a votrong stack v sau khi gi hm hon thnh th nhng bin cc b ca hm u by ra khi stack.

    Ch th hai l heap: mt vng b nhdng lu tr d liu c dung lng thay inh kiu chui chng hn, hoc d liu c thi gian sng di hn phng thc camt i tng. Chng hn, khi to th hin ca mt i tng, i tng uc lutr trn heap, v n khng b tng ra khi hm hon thnh ging nh stack, m

    nguyn ti ch v c th trao cho cc phng thc khc thng qua mt tham chiu.

  • 8/6/2019 C# - Tran Thong - DaLat

    14/111

    13

    Trn C#, heap ny c gi l managed heap, v c b dn rc (garbagecollector) chuyn lo thu hi nhng vng nhkhng c tham chiu n.

    Kiu gi trc nh ngha trc

    Kiu s nguyn(integer):

    C# h tr8 kiu d liu s nguyn sau:Tn Kiu M t Min(min:max)

    sbyte System.SByteS nguyn c du 8-

    bit-128:127 (-27:27-1)

    short System.Int16S nguyn c du

    16-bit-32,768:32, 767 (-

    215:215-1)

    int System.Int32S nguyn c du

    32-bit

    -2,147,483,648:2,147,483,647 (-231:231-1)

    long System.Int64 S nguyn c du64-bit

    -9,223,372,036,854,775,808: 9,223, 372,036,854, 775,807 (-

    263:263-1)

    byte System.ByteS nguyn c du 8-

    bit0:255 (0:28-1)

    ushort System.UInt16S nguyn c du

    16-bit0:65, 35 (0:216-1)

    uint System.UInt32S nguyn c du

    32-bit0:4,294,967,295

    (0:232-1)

    ulong System.UInt64 S nguyn c du64-bit 0:18,446,744,073,709,551,615(0:264-1)

    V d:

    long x = 0x12ab;// ghi theo hexa

    uint ui = 1234U;

    long l = 1234L;

    ulong ul = 1234UL;

    Kiu dliu s thc du chm di ng (Floating Point Types):

    Tn Kiu M t Min

    Float System.Single 32-bit 1.5 10-45n 3.4 1038

    Double System.Double 64-bit 5.0 10-324n 1.7 10308

    V d:

    float f = 12.3F;

    Kiu dliu s thp phn (Decimal Type):

  • 8/6/2019 C# - Tran Thong - DaLat

    15/111

    14

    Tn Kiu M t Min

    decimal System.Decimal 128-bit 1.0 10-28n 7.9 1028

    V d:

    decimal d = 12.30M ; //c th vit decimal d = 12. 30m;

    Kiu Boolean:

    Tn Kiu Gi tr

    Bool System.Boolean true hoc false

    Kiu Character Type:

    Tn Kiu Gi tr

    char System.Char Dng unicode 16 bit

    Kiu tham chiu nh ngha trc:

    C# h trhai kiu d liu c nh ngha trc:

    Tn Kiu M t

    object System.Object Kiu cha ca tt c cc kiu trong CLR

    string System.String Chui k t unicode

    Cc k tescape thng dng:

    Tht K t

    \' Nhy n

    \" Nhy kp

    \\ Du xuyt

    \0 Null

    \a Cnh bo

    \b Phm lui

    \f Form feed

    \n Xung hng

    \r Xung hng

    \t Tab

    \v Tab dc

    2. 4 iu khin lung

  • 8/6/2019 C# - Tran Thong - DaLat

    16/111

    15

    C php:

    if ( biu thc)

    lnh 1

    else

    lnh 2

    V d minh ha lnh r nhnh

    using System;

    class Values

    {

    static void Main( )

    {

    int valueOne = 10;

    int valueTwo = 20;

    if ( valueOne > valueTwo )

    {

    Console.WriteLine("Gi tr mt: {0} ln hn gi tr hai:{1}", valueOne, valueTwo);

    }

    else

    {

    Console.WriteLine("Gi tr hai: {0} ln hn gi tr mt:{1}", valueTwo, valueOne);

    }valueOne = 30; //gn li gi tr mi

    if ( valueOne > valueTwo )

    {

    valueTwo = valueOne++;

    Console.WriteLine("\nGn gi tr mt cho gi tr hai, ");

    Console.WriteLine("v tng gi tr mt ln hai. \n");

    Console.WriteLine("Gi tr mt: {0}, Gi tr hai: {1}",valueOne, valueTwo);

    }

    else

    {

    valueOne = valueTwo;

    Console.WriteLine("Gn hai gi tr bng nhau v bng gitr hai. ");

    Console.WriteLine("Gi tr mt: {0} gi tr hai: {1}",

    valueOne, valueTwo);

    }

    }

  • 8/6/2019 C# - Tran Thong - DaLat

    17/111

    16

    }

    Lnh switch

    C php:

    switch (biu thc)

    {case biu_thc_hng:

    lnh

    lnh_nhy

    [default: lnh]

    }

    V d:

    class Values

    {

    static void Main( )

    {

    int chonThucDon;

    chonThucDon = 2;

    switch (chonThucDon)

    {

    case 1:

    System.Console.WriteLine(" Chn mn 1");

    break;

    case 2:

    System.Console.WriteLine(" Chn mn 1");

    break;

    default:

    System.Console.WriteLine(" Phi chn mn c trong thc n 1");

    break;

    }

    }

    }

    Lnh lp

    Lnh goto

    s dng lnh goto chng ta cn:

    To nhn Goto trn nhnV d minh ha s dng lnh goto

    using System;

  • 8/6/2019 C# - Tran Thong - DaLat

    18/111

    17

    public class Tester

    {

    public static int Main( )

    {

    int i = 0;

    repeat: // gn nhn cho lnh goto

    Console.WriteLine("i: {0}", i);

    i++;

    if (i < 10)

    goto repeat;

    return 0;

    }

    }

    Lnh lp whileC php:

    while (biu thc) lnh;

    V d dng lnh while

    using System;

    public class Tester

    {

    public static int Main( )

    {

    int i = 0;

    while (i < 10)

    {

    Console.WriteLine("i: {0}", i);

    i++;

    }

    return 0;

    }

    }

    Lnh dowhile

    C php:

    do biu_thc while lnh;

    using System;

    public class Tester

    {

  • 8/6/2019 C# - Tran Thong - DaLat

    19/111

    18

    public static int Main( )

    {

    int i = 11;

    do

    {

    Console.WriteLine("i: {0}", i);

    i++;

    } while (i < 10);

    return 0;

    }

    }

    Lnh forC php:

    for (khi to; biu_thc; lp)

    lnh;

    V d:

    using System;

    public class Tester

    {

    public static int Main( )

    {

    for (int i=0;i

  • 8/6/2019 C# - Tran Thong - DaLat

    20/111

    19

    V d:

    using System;

    public class Tester

    {

    public static int Main( )

    {

    string signal = "0";

    while (signal != "X")

    {

    Console.Ghi("Nhp vo tn hiu: ");

    signal = Console.ReadLine( );

    Console.WriteLine("Tnh hiu va nhp: {0}", signal);

    if (signal == "A")

    {Console.WriteLine("Li, b qua\n");

    break;

    }

    if (signal == "0")

    {

    Console.WriteLine("Bnh thng. \n");

    continue;

    }

    Console.WriteLine("{0}To tn hiu tip tc !\n",signal);

    }

    return 0;

    }

    }

    2. 5 Kiu lit k

    Kiu ny b sung nhng tnh nng mi thun tin hn kiu hng. Kiu lit k l mt

    kiu gi tr phn bit bao gm mt tp cc tn hng. V d chng ta to hai hng linquan nhau:

    const int NhietDoDongLanh = 32; // Farenheit

    const int NhietDoSoi = 212;

    Chng ta c th b sung mt s hng khc vo trong danh sch nh:

    const int NhietDoCoTheBoi= 72; // Farenheit

    Qu trnh ny thc hin rt cng knh. Do , chng ta c th dng danh sch lit k gii quyt vn :

    enum NhietDo

  • 8/6/2019 C# - Tran Thong - DaLat

    21/111

    20

    {

    NhietDoDongLanh = 32;

    NhietDoSoi = 212;

    NhietDoCoTheBoi= 72;

    }

    Mi kiu lit k phi c mt kiu bn di, chng c th l (int, short, long. .. ) ngoitr kiu char.

    V d sau minh ha dng kiu enum nh ngha mt thc n cho chng trnh:

    enum Menu

    {

    Thoat=5,

    VeTamGiac,

    VeTamGiacLatNguoc,

    VeTamGiacGiuaManHinh,

    VeTamGiacRong

    };

    static void ThucDon()

    {

    while(true)

    {

    int menu=0;

    Console.WriteLine("Nhap {0} de ve tam giac", (int)Menu.

    VeTamGiac);

    Console.WriteLine("Nhap {0} de ve tam giac giua man hinh",(int)Menu. VeTamGiacGiuaManHinh);

    Console.WriteLine("Nhap {0} de ve tam giac lat nguoc ",(int)Menu. VeTamGiacLatNguoc);

    Console.WriteLine("Nhap {0} de ve tam giac rong ", (int)Menu.VeTamGiacRong);

    Console.WriteLine("Nhap {0} de thoat ", (int)Menu. Thoat);

    menu = int.Parse(Console.ReadLine());

    switch (menu)

    {

    case (int)Menu. VeTamGiac:

    VeTamGiac();

    break;

    case (int)Menu. VeTamGiacGiuaManHinh:

    VeTamGiacGiuaManHinh();

    break;

    case (int)Menu. VeTamGiacLatNguoc:

    VeTamGiacLatNguoc();

  • 8/6/2019 C# - Tran Thong - DaLat

    22/111

    21

    break;

    case (int)Menu. VeTamGiacRong:

    VeTamGiacRong();

    break;

    default:

    return;

    }

    }

    }

    2. 6 Mng

    Mng l mt cu trc d liu cu to bi mt s bin c gi l nhng phn t mng.Tt c cc phn t ny u thuc mt kiu d liu. Bn c th truy xut phn t thngqua ch s . Ch s bt u bng 0.

    C nhiu loi mng (array): mng mt chiu, mng nhiu chiuC php:

    kiu[ ] tn+mng;

    V d:

    int[] myIntegers; // mng kiu s nguyn

    string[] myString ; // mng kiu chui ch

    Bn khai bo mng c chiu di xc nh vi t kho new nh sau:

    int[]integers = new int[32];

    integers[0] = 35;// phn tu tin c gi tr 35

    integers[31] = 432;// phn t 32 c gi tr 432

    Bn cng c th khai bo nh sau:

    int[] integers;

    integers = new int[32];

    string[] myArray = {"phn t 1", " phn t 2", " phn t 3"};Chng trnh minh ha dng mng 1 chiu:

    using System;

    using System.Collections.Generic;

    using System.Text;

    namespace Mang1Chieu

    {

    class Program

    {

    static void Main(string[] args)

    {

    int[] a = new int[10];

  • 8/6/2019 C# - Tran Thong - DaLat

    23/111

    22

    int len =0;

    Console.Write("Nhap vao chieu dai mang");

    len = int.Parse(Console.ReadLine());

    for(int i=0; i< len; i++)

    {

    Console.Write("Nhap a[{0}] = ", i);

    a[i] = int.Parse(Console.ReadLine());

    }

    for (int i = 0; i < len; i++)

    Console.Write("\t{0}", a[i]);

    }

    }

    }

    2. 7 Khng gian tn (Namespace)

    Namespace cung cp cho ta cch t chc quan h gia cc lp v cc kiu khc nhau.y l kthut cho php .NET trnh vic cc tn lp, tn bin, tn hm... ng vtrng tn vi nhau gia cc lp.

    khai bo khng gian tn chng ta s dng t kha namespace. V d:

    namespace Programming_C_Sharp

    {

    using System;

    public class Tester

    {

    public static int Main( )

    {

    for (int i=0;i

  • 8/6/2019 C# - Tran Thong - DaLat

    24/111

    23

    {

    using System;

    public class Tester

    {

    public static int Main( )

    {

    for (int i=0;i

  • 8/6/2019 C# - Tran Thong - DaLat

    25/111

    24

    Ty chn Xut

    /t:winexe Mt ca sng dng

    V d tp tin MathLibrary.cs c ni dung nh sau:

    public class MathLib

    {

    public int Cong(int x, int y)

    {

    return x + y;

    }

    }

    }

    Chng ta bin dch file C# trn thnh th vin lin kt ng (DLL) .NET bng cch sdng cu lnh sau:

    csc /t:library MathLibrary.cs

    S dng th vin trong cc chng trnh MathClient.cs nh sau:

    using System;

    class Client

    {

    public static void Main()

    {

    MathLib mathObj = new MathLib();

    Console.WriteLine(mathObj. Cong(7, 8));

    }

    }

    bin dch chng trnh

    csc MathClient.cs /r:MathLibrary. dll

    kt qu l 15

    2. 10 Xut nhp qua Console

    ng dng dng lnh l ng dng khng c giao din ngi dng. Vic xut nhpthng qua dng lnh chun. Phng thc Main() trong v d Hello World vit chuiChuong Trinh Dau Tien ln mn hnh. Mn hnh c qun l bi mt i tng tnConsole. i tng ny c mt phng thc WriteLine() nhn mt chui v xutchng ra thit b xut chun (mn hnh).

    c mt k t vn bn t ca s console, chng ta dng phng thc:

    Console.Read(): gi tr tr v s l kiu int hoc kiu string.Hai phng thc dng xut chui k t:

    Console.Write() - Vit mt gi tr ra ca s.

  • 8/6/2019 C# - Tran Thong - DaLat

    26/111

    25

    Console.WriteLine() - tng t nh trn nhng s tng xung hng khi kt thclnh.

    V d sau s cho gi tr nhp kiu int v gi tr xut ra kiu chui

    int x = Console.Read();

    Console.WriteLine((char)x);

    Gi tr tr v kiu string:

    string s = Console.ReadLine();

    Console.WriteLine(s);

    Gi s c on m nh sau:

    int i = 10;

    int j = 20;

    Console.WriteLine("{0} cng {1} bng {2}", i, j, i + j);

    Kt qu hin th nh sau:10 cng 20 bng 30

    int i = 940;

    int j = 73;

    Console.WriteLine(" {0, 4}\n+{1, 4}\n ----\n {2, 4}", i, j, i + j);

    Kt qu:

    940

    + 73

    ----1013

    2. 11 Sdng ch thch

    Nh chng ta lu lc u, C# s dng kiu truyn thng ca C cho vic ch thch.Dng // cho hng n v /**/ cho mt khi lnh. Cc a m lnh trong chngtrnh C# cng c th cha nhng dng ch thch. V d:

    // Ch thch trn 1 dng/* Ch thch

    trn 2 dng */Console.WriteLine(/* Kim tra ch thch! */ "Bin dch bnh thng");

    DoSomething(Width, /*Height*/ 100);

    string s = "/* y l chui khng phi ch thch*/";

    2. 12 Ch dn tin xl trong C#

    Tnh danh l tn dng cho vic t tn bin cng nhnh ngha kiu s dngnh cc lp, cu trc, v cc thnh phn ca kiu ny. C# c mt s quy tc nh rcc tnh danh nh sau:

    Chng phi bt u bng k t khng b gch di.

  • 8/6/2019 C# - Tran Thong - DaLat

    27/111

    26

    Chng ta khng c s dng t kho lm tnh danh.Trong C# c sn mt s t kho (keyword).

    abstract do implicit params switch

    as double in private this base else int protected throw

    bool enum interface public true

    break event internal readonly try

    byte explicit is ref typeof

    case extern lock return uint

    catch false long sbyte ulong

    char finally namespace sealed unchecked

    checked fixed new short unsafeclass float null sizeof ushort

    const for object stackalloc using

    continue foreach operator static virtual

    decimal goto out string volatile

    default if override struct void

    delegate while

  • 8/6/2019 C# - Tran Thong - DaLat

    28/111

    27

    Chng 3: i tng v kiu

    Mc ch ca chng:

    S dng k tha, phng thc o. S dng np chng phng thc: C# cho php bn nh ngha nhng dng khc

    nhau ca mt phng thc trong mt lp. Trnh bin dch s tng chn phngthc no thch hp nht da vo tham s truyn vo ca n.

    Phng thc to lp v phng thc hy: ch r mt s hnh ng tng kmtheo khi khi to i tng v tng gii phng khi kt thc i tng.

    Cu trc (struct): l nhng kiu gi tr cung cp nhng tin ch khi chng ta cnmt s tnh nng ca lp nhng khng cn vt v to ra mt thc th lp.

    Np chng ton hng : kim tra cch nh ngha nhng ton hng cho lp.

    Ch mc: cho php mt lp c x l ch mc khi n l mt mng v n ginho cch s dng nhng lp cha cc tp i tng.

    Giao din : C# h trk tha thng qua giao din.3. 1 Lp v cu trc

    Kh nng to cc kiu d liu mi l c trng ca ngn ng lp trnh hng itng. Chng ta c th to ra kiu mi bng cch khai bo v nh ngha lp. Th hinca mt lp gi l mt i tng. i tng c to trong b nhkhi chng thc

    thi.Mt thun li ln nht ca cc lp trong ngn ng lp trnh hng i tng l chngc kh nng ng gi cc c trng v kh nng ca mt thc th vo trong mt nv m chng trnh.

    nh ngha lp (class)

    nh ngha mt kiu mi hay mt lp chng ta u tin khai bo n v sau nhngha cc phng thc v trng ca n. Chng ta khai bo lp s dng t kha class.

    C php:

    [thuc_tnh] [b_t_truy_xut] class nh_danh [:lp_c_s ]{

    Ni dung lp

    }

    Thng thng mt lp s dng b_t_truy_xut l t kha public

    nh_danhl tn ca lp. Ni dung ca lp c nh ngha trong phn{}.

    Trong C# mi th xy ra trong mt lp. V d sau nh ngha mt lp Tester:

    public class Tester

    {

  • 8/6/2019 C# - Tran Thong - DaLat

    29/111

    28

    public static int Main( )

    {

    /...

    }

    }

    Lc khai bo mt lp mi, chng ta nh ngha thuc tnh ca tt ci tng cngnh nhng hnh vi ca lp . V d: mt lp SinhVien c cc thuc tnh: maSV,tenSV, ngaySinh, tuoi v cc hnh vi nh sau: XemDiem, XemThongTinHocPhi.

    Ngn ng lp trnh hng i tng php chng ta to mt kiu mi SinhVien, ngthi ng gi nhng c trng (thuc tnh) v kh nng (phng thc) ca chng. Lc, lp SinhVien c th c cc bin thnh vin(trng) nh maSV, tenSV, ngaySinh,tuoi v cc hm thnh vin XemDiem(), XemThongTinHocPhi().

    Lp SinhVien c thc khai bo nh sau:

    public class SinhVien

    {

    public string maSV;

    public string tenSV;

    public DateTimengaySinh;

    public int tuoi;

    public void XemDiem()

    {

    ///Noi dung ham

    }public void XemThongTinHocPhi()

    {

    ///Noi dung ham

    }

    }

    Chng ta khng th gn d liu n kiu SinhVien, u tin chng ta phi khai bomt i tng kiu SinhVien theo on m sau.

    SinhVien sv1;

    Mt khi chng ta to mt th hin ca lp SinhVien chng ta c th gn d liu ncc trng ca n. Dng t kha new to i tng.

    sv1 = new SinhVien();

    sv1.maSV =012345;

    Xt mt lp theo di v hin th thi gian ca ngy. Trng thi bn trong ca lp phic kh nng biu din nm, thng, ngy, gi, pht v giy hin ti. Chng ta mun thigian hin thnhiu dng khc nhau. Chng ta c th thc hin c yu cu ca lptrn bng cch khai bo mt lp nh ngha mt phng thc v su bin nh sau:

    using System;

  • 8/6/2019 C# - Tran Thong - DaLat

    30/111

    29

    public class Time

    {

    // phng thc public

    public void HienThi( )

    {

    Console.WriteLine("Hin th thi gian hin ti");

    }

    // bin private

    int Nam;

    int Thang;

    int Ngay;

    int Gio;

    int Phut;

    int Giay;

    }

    public class Tester

    {

    static void Main( )

    {

    Time t = new Time( );

    t. HienThi( );

    }

    }

    Phng thc HienThi() c nh ngha tr v kiu void. N khng tr v gi tr chophng thc gi n. Trong hm Main() th hin ca lp Time c to v a ch can c gn n i tng t. Bi v t l th hin ca i tng Time nn n c th sdng phng thc HienThi() gi phng thc hin th thi gian:

    t. HienThi ( );

    3. 2 Thnh vin ca lp

    Kiu truy xut

    Kiu truy xut xc nh cc thnh vin (bao gm trng, thuc tnh, phng thc, skin, y nhim) ca lp c thc nhn thy v s dng ti cc thnh vin bn tronghay bn ngoi lp hay khng. Bng sau lit k cc kiu truy xut v phm vi cachng:

    Kiu truy xut Hn ch

    Public Khng hn ch. Thnh vin c nh du public c nhn

    thy bi bt k phng thc ca bt k lp

  • 8/6/2019 C# - Tran Thong - DaLat

    31/111

    30

    private Cc thnh vin trong lp A c nh du private c truy

    xut ch trong cc phng thc ca lp A. Mc nh cc thnh

    vin c khai bo private.

    protected Cc thnh vin trong lp A c nh du protected c truyxut trong cc phng thc ca lp A v cc lp dn xut t A

    internal Cc thnh vin trong lp A c nh du internal c truy

    xut trong cc phng thc ca bt k lp trong assembly ca

    A

    protected internal Tng ng vi protected or internal

    Bin thnh vin ca lp nn c khai bo nh sau:

    int Nam;

    int Thang;

    int Ngay;

    int Gio;

    int Phut;

    int Giay;

    Tham s ca phng thc

    Phng thc c th c s tham s bt k. Tham s khai bo theo sau tn phng thc,mi tham s phi c gn mt kiu d liu. V d sau nh ngha mt tn phngthc PhuongThuc v tr v gi tr void, n nhn hai tham s kiu int v Button:

    void PhuongThuc (int thamso1, Button thamso2)

    {

    // ...

    }

    Bn trong phn thn ca phng thc, tham s hot ng nh l mt bin cc b. Vd sau minh ha cch truyn gi tr vo mt phng thc, trong trng hp ny gi trca tham s c kiu int v float

    using System;

    public class MyClass

    {

    public void PhuongThuc(int ts1, float ts2)

    {

    Console.WriteLine("Cc tham s nhn c: {0}, {1}", ts1, ts2);

    }

  • 8/6/2019 C# - Tran Thong - DaLat

    32/111

    31

    }

    public class Tester

    {

    static void Main( )

    {

    int n = 5;

    float pi = 3. 14f;

    MyClass mc = new MyClass( );

    mc.PhuongThuc (n, pi);

    }

    }

    To i tng

    Trong chng trc chng ta phn bit gia kiu gi tr v kiu tham chiu. Cc kiu

    cbn trong C# l kiu gi tr v chng c to trn stack. i tng v n l mtkiu tham chiu nn c to trn heap. V d:

    Time t = new Time();

    Trong trng hp ny t khng tht s cha i tng Time, n ch cha a ch cai tng Time c to trn Heap. t ch tht s l mt tham chiu ca i tng .

    Phng thc to lp

    Trong lnh sau:

    Time t = new Time();

    Mt phng thc c gi bt c lc no chng ta to mt th hin cho mt i tnggi l phng thc to lp. Nu chng ta khng nh ngha n trong phn khai bo lp,CLR s cung cp mt phng thc mc nh i din cho n. Nhim v ca phngthc to lp l to i tng ch bi lp v t i tng vo trong trng thi sn sng.Trc khi phng thc to lp chy, i tng cha tn ti trong b nh, sau khi

    phng thc to lp thc hin hon thnh, b nhs lu tr mt th hin hp l camt lp.

    Trong v d lp Time, chng ta khng nh ngha mt phng thc to lp, trnh bindch s tng to mt phng thc to lp mc nh cho n. Khi s dng phng

    thc to lp mc nh cc bin c khi to gi tr mc nh nh sau:Kiu Gi tr mc nh

    Kiu s (int, long. . ) 0

    Bool False

    Char \0

  • 8/6/2019 C# - Tran Thong - DaLat

    33/111

    32

    Enum 0

    Reference null

    Thng thng chng ta nh ngha ring mt phng thc to lp v cung cp tham scho phng thc to lp khi to cc bin cho i tng ca chng ta.

    nh ngha mt phng thc to lp, chng ta khai bo mt phng thc c tntrng vi tn lp m chng ta khai bo. Phng thc ny khng tr v bt c gi trno v thng thng c khai bo public. Tham s s dng trong phng thc tolp cng nh nhng tham s trong phng thc khc.

    V d sau khai bo mt phng thc to lp cho lp SinhVien v chp nhn cc thams c cc kiu d liu khc nhau:

    using System;

    namespace QuanLySinhVien{

    public class SinhVien

    {

    private float _diem;

    public string maso;

    public string ten;

    public bool gioitinh;

    public float diem;

    public SinhVien(string maso, string ten, bool gioitinh, float diem)

    {

    this.maso = maso;

    this.ten = ten;

    this.gioitinh = gioitinh;

    this.diem = diem;

    }

    private string GT(bool gt){

    return gt?"Nam":"Nu";

    }

    public override string ToString()

    {

    return maso + "\t" + ten + "\t" + GT(this.gioitinh) +"\t" + diem.ToString();

    }

    }

  • 8/6/2019 C# - Tran Thong - DaLat

    34/111

    33

    static void Main(string[] args)

    {

    //Khi to mt bin s thuc kiu sinh vin

    SinhVien s = new SinhVien(001, Thanh, false, 8);

    //Xut thng tin sinh vin ra mn hnh

    Console.WriteLine(s);

    }

    }

    Khi to gi tr cho cc bin

    Thay v khi to gi tr cc bin thnh vin thng qua phng thc to lp chng ta cth thc hin gn gi tr trc tip cho bin. Phng thc to lp ca chng trnh trnc thc vit nh sau:

    public void SinhVien()

    {Console.Ghi("Nhap maso ");

    maso = Console.ReadLine();

    Console.Ghi("Nhap ten ");

    ten = Console.ReadLine();

    Console.Ghi("Nhap gioi tinh 1 cho Nam, 0 cho Nu ");

    int i = int.Parse(Console.ReadLine());

    if(i==1)

    this.gioitinh = true;

    else

    this.gioitinh = false;

    Console.Ghi("Nhap diem ");

    diem = float. Parse(Console.ReadLine());

    }Phng thc to lp sao chp

    Phng thc to lp sao chp to mt i tng mi bng cch chp cc bin ti

    tng hin ti n i tng mi cng kiu. V d chng ta mun truyn mt itng SinhVien b n mt i tng SinhVien a ca phng thc to lp nhm to rai tng mi c cng gi tr vi i tng c. C# khng cung cp phng thc tolp sao chp, do chng ta phi t to. V d:

    public SinhVien(SinhVien sv)

    {

    this.maso = sv.maso;

    this.ten = sv.ten;

    this.gioitinh = sv.gioitinh;

    this.diem = sv.diem;

  • 8/6/2019 C# - Tran Thong - DaLat

    35/111

    34

    }

    Da trn vic khai bo phng thc to lp bn trn ta c th to mt i tng sinhvin b t mt i tng sinh vin a nh sau:

    SinhVien a = new SinhVien(001, Thanh, false, 8);

    SinhVien b = new SinhVien(a)

    Tkha this

    T kha this ch ra trng thi hin ti ca i tng. Tham chiu this (con tr this) lmt con trn n cc hm khng tnh (khng khai bo t kha static) ca lp. Mi

    phng thc c th tham chiu n cc phng thc v cc bin khc da trn thamchiu this.

    Tham chiu this c th s dng theo ba trng hp sau:

    Trnh xung t tn. Truyn i tng hin ti l tham s ca mt phng thc khc. Dng vi ch mc.Sdng cc thnh vin tnh

    Thuc tnh v phng thc ca mt lp c th l thnh vin ca th hin hay thnhvin tnh. Thnh vin th hin c kt hp vi th hin ca kiu, trong khi thnh vintnh c coi l phn ca lp. Chng ta truy xut cc thnh vin tnh thng qua tn lpchng ta khai bo.

    using System;

    namespace Test

    {

    class Mang1Chieu

    {

    static int []a = new int[100];

    static int n = 0;

    static void Main(string[] args)

    {

    Nhap();

    //Chng ta cng c th gi phng thc tnh nh sau

    Mang1Chieu.Xuat();

    Console.WriteLine("Tong cac phan tu mang la " +TinhTong(). ToString());

    Console.ReadLine();

    }

    void NhapNgauNhien()

    {

    Console.Ghi("Nhap vao chieu dai cua mang n = ");

    n = int.Parse(Console.ReadLine());

  • 8/6/2019 C# - Tran Thong - DaLat

    36/111

    35

    Random r = new Random();

    for(int i=0; i < n; i++ )

    a[i] = r.Next(10);

    }

    static void Nhap()

    {

    Console.Ghi("Nhap vao chieu dai cua mang n = ");

    n = int.Parse(Console.ReadLine());

    for(int i=0; i < n; i++ )

    {

    Console.Ghi("a[{0}] = ", i);

    a[i] = int.Parse(Console.ReadLine());

    }

    }

    static int TinhTong()

    {

    int sum = 0;

    int i = 0;

    while(i

  • 8/6/2019 C# - Tran Thong - DaLat

    37/111

    36

    Trong v d trn phng thc NhapNgauNhien l phng thc khng tnh, do phic truy cp thng qua i tng nh sau:

    V d:

    static void Main(string[] args)

    {

    Mang1Chieu a = new Mang1Chieu();

    a.NhapNgauNhien();

    Xuat();

    Console.WriteLine("Tong cac phan tu mang la " + TinhTong().ToString());

    Console.ReadLine();

    }

    Sdng phng thc to lp tnh

    Nu chng ta khai bo mt phng thc to lp tnh, chng ta phi m bo phngthc to lp tnh s chy trc khi th hin ca lp c to.

    V d, chng ta c th thm phng thc to lp tnh vo lp Mang1Chieu

    static Mang1Chieu( )

    {

    }

    Chng ta khng c khai bo kiu truy xut trc phng thc to lp tnh. Hn na,

    v y l mt phng thc thnh vin tnh, chng ta khng th truy xut vo binthnh vin khng tnh, do tt c cc bin mun c truy cp thng qua cc thnhvin tnh phi c khai bo static.

    Sdng trng tnh

    Dng bin thnh vin tnh l cch ph bin theo di s th hin hin ti ca lp. Vd:

    using System;

    public class Meo

    {

    public Meo( )

    {

    thehien ++;

    }

    public static void SoMeo( )

    {

    Console.WriteLine("S th hin ca mo la{0} ", thehien);

    }

    private static int thehien = 0;

  • 8/6/2019 C# - Tran Thong - DaLat

    38/111

    37

    }

    public class Tester

    {

    static void Main( )

    {

    Meo.SoMeo( );

    Meo Tom= new Cat( );

    Meo.SoMeo( );

    Meo Linda = new Cat( );

    Meo.SoMeo( );

    }

    }

    Hy i tng

    C# cung cp mt cch dn rc hy cc i tng mt cch tng v do chng ta khng cn mt phng thc hy r rng xa cc i tng trong b nh.Phng thc Finalize() c gi bi b dn rc khi i tng ca chng ta b hy.Hm ny ch gii phng cc ti nguyn m i tng ny ang gi v n khng thamchiu n cc i tng khc.

    V d khai bo phng thc hy:

    ~ Mang1Chieu ()

    {

    ///M

    }

    Hay

    Mang1Chieu.Finalize()

    {

    ///M

    }

    Truyn tham s

    Mc nh cc kiu gi trc truyn vo trong cc phng thc bi gi tr. Tuy nhintrong nhiu trng hp chng ta mun truyn gi tri tng theo tham chiu. C#cung cp 2 cch truyn tham chiu i tng vo trong phng thc:

    Dng t kha ref. Dng t kha out, i tng truyn vo khng cn khi gn.

    Ngoi ra, C# cn cung cp t kha params cho php mt phng thc truyn stham s ty .

  • 8/6/2019 C# - Tran Thong - DaLat

    39/111

    38

    Truyn tham chiu

    Mt phng thc ch c th tr v mt gi tr, do khi mun phng thc tr vnhiu hn mt gi tr, chng ta dng cch thc truyn tham chiu.

    V d, thc hin on chng trnh sau:

    using System;

    namespace Bien

    {

    class Class1

    {

    static int a = 1;

    static int b = 2;

    static void GiaTri(int a, int b)

    {

    a = 10;

    b = 20;

    }

    static void Main(string[] args)

    {

    int a = 1;

    Console.WriteLine("a = {0}, b = {1}", a, b);

    GiaTri(a, b);

    Console.WriteLine("a = {0}, b = {1}", a, b);

    Console.ReadLine();

    }

    }

    }

    Kt qu th hin chng trnh l a =1, b =2 v a=1, b=2

    Nhng nu chng ta khai bo phng thc GiaTri nh sau:

    static void GiaTri(ref int a, int b)

    {

    a = 10;

    b = 20;

    }

    th kt qu thc hin chng trnh s l a =1, b =2 v a=10, b=2. Ta thy gi tr cabin a thay i nhng gi tr ca bin b khng thay i sau khi chng ta thc hin giphng thc GiaTri v bin a c truyn theo kiu tham bin cn bin b c truyntheo kiu tham tr.

  • 8/6/2019 C# - Tran Thong - DaLat

    40/111

    39

    Truyn tham s dng tkha out

    Mc nh C# quy nh tt c cc bin phi c gn tham s trc khi s dng. Trongv d trn nu chng ta khng khi to bin a trong hm Main, chng trnh thngdch s thng bo li bin cha c khi gn nh sau Use of unassigned localvariable 'a'. Chng ta c th trnh bng cch dng t kha out v khai bo nh sau:

    using System;

    namespace Bien

    {

    class Class1

    {

    static int a = 1;

    static int b = 2;

    static void GiaTri(out int a, int b)

    {

    a = 10;

    b = 20;

    }

    static void Main(string[] args)

    {

    int a = 1;

    GiaTri(out a, b);

    Console.WriteLine("a = {0}, b = {1}", a, b);

    Console.ReadLine();

    }

    }

    }

    Np chng phng thc

    Thng thng chng ta mun khai bo nhiu hm vi cng tn. C# cho php khai bocc hm trng tn nhng du hiu phi khc nhau. V d chng ta mun dng nhiu

    phng thc to lp khc nhau khi to cc kiu i tng khc nhau. Du hiu camt phng thc c nh ngha bi tn v danh sch tham s. Hai phng thc cdu hiu khc nhau nu c tn v danh sch tham s khc nhau.

    Tham s khc nhau bi s tham s hay kiu khc nhau. V d cc hm sau c cc duhiu khc nhau:

    void PhuongThuc(int p1);

    void PhuongThuc (int p1, int p2);

    void PhuongThuc (int p1, string s1);

    V d minh ha s dng qu ti hm cho phng thc to lp ca lp MaTran

  • 8/6/2019 C# - Tran Thong - DaLat

    41/111

    40

    using System;

    namespace MaTran

    {

    public class MaTran

    {

    public double[, ] mt;

    public int hang;

    public int cot;

    #region Phuong thuc tao lap

    public MaTran()

    {

    //Phuong thuc tao lap mac dinh

    }

    public MaTran(int h, int c)

    {

    this.hang = h;

    this.cot = c;

    mt = new double[h, c];

    }

    public MaTran(MaTran a)

    {

    mt = new double[a. hang, a. cot];

    this.hang = a.hang;

    this.cot = a.cot;

    for (int i = 0; i < a.hang; i++)

    for (int j = 0; j < a.cot; j++)

    this.mt[i, j] = a.mt[i, j];

    }

    public MaTran(MaTran a, int h, int c)

    {

    mt = new double[h, c];

    this.hang = h;

    this.cot = c;

    for (int i = 0; i < h; i++)

    for (int j = 0; j < c; j++)

    this.mt[i, j] = a.mt[i, j];

    }

    public void Nhap()

    {

  • 8/6/2019 C# - Tran Thong - DaLat

    42/111

    41

    Console.WriteLine("Nhap mot ma tran cap {0}x{1} ",this.hang, this.cot);

    for (int i = 0; i < this.hang; i++)

    for (int j = 0; j < this.cot; j++)

    {

    //Console.Ghi("Nhap phan tu thu [{0}, {1}] = ", i,j);

    this.mt[i, j] = i + j;

    }

    }

    public void Nhap(int h, int c)

    {

    mt = new double[h, c];

    for (int i = 0; i < h; i++)

    for (int j = 0; j < c; j++){

    Console.Ghi("Nhap phan tu thu [{0}, {1}] = ", i,j);

    this.mt[i, j] = double.Parse(Console.ReadLine());

    }

    }

    public override string ToString()

    {

    string kq = "";for (int i = 0; i < this.hang; i++)

    {

    kq += "\n";

    for (int j = 0; j < this.cot; j++)

    {

    kq += "\t" + this.mt[i, j].ToString();

    }

    }

    return kq;

    }

    public MaTran Tong(MaTran a, MaTran b)

    {

    MaTran kq = new MaTran(a. hang, a. cot);

    for (int i = 0; i < b.hang; i++)

    for (int j = 0; j < b.cot; j++)

    kq.mt[i, j] = a.mt[i, j] + b.mt[i, j];

    return kq;

  • 8/6/2019 C# - Tran Thong - DaLat

    43/111

    42

    }

    public void Tong(MaTran b)

    {

    for (int i = 0; i < b.hang; i++)

    for (int j = 0; j < b.cot; j++)

    this.mt[i, j] = this.mt[i, j] + b.mt[i, j];

    }

    }

    }

    Trong v trn chng ta khai bo ba phng thc to lp khc nhau cho vic khi tomt i tng kiu MaTran. Tng t chng ta cng nh ngha nhiu phng thcTong vi cc tham s khc nhau cho vic cng hai ma trn.

    ng gi dliu vi thuc tnh

    Cc thuc tnh cho php cc client truy xut ti trng thi ca lp nh l truy xut cctrng thnh vin trc tip ca lp. Truy xut thuc tnh tng t nh truy xutphng thc ca lp. Ngha l cc client c th truy xut trc tip n trng thi cai tng (thuc tnh) m khng cn thng qua vic gi thc thi cc phng thc. Tuynhin, nhng ngi thit k lp hay mun che du trng thi bn trong ca cc thnhvin lp v ch mun cc thuc tnh ch trc truy xut gin tip thng qua phngthc ca lp.

    Bng cch phn tch thuc tnh vi cc phng thc ca lp, cc nh thit k c th tdo thay i gi tr hay trng thi ca cc thuc tnh bn trong ca i tng khi cn.Cho v d nh sau:

    using System;

    namespace DoiTuongDoiTuongHinhHoc

    {

    public class HinhTron

    {

    private double r;

    public HinhTron()

    {

    }

    public HinhTron(double bankinh)

    {

    this.R = bankinh;

    }

    public double DienTich()

    {

    return Math.Round(Math.PI*R*R, 2);

    }

    public override string ToString()

  • 8/6/2019 C# - Tran Thong - DaLat

    44/111

    43

    {

    return "Duong tron co ban kinh " + R + " dien tich " +this.DienTich();

    }

    }

    }

    Lc lp HinhTron c to, gi tr ca thuc tnh bn knh r c thc lu tr l mtbin thnh vin. Lc lp c thit k li, gi tr ca thuc tnh r c thc tnh tonli hay ly t csd liu. Nu client truy xut trc tip bin thnh vin r, nhng thayi gi tr tnh ton c th lm hng ng dng client. Bng cch phn tch v bt bucclient mun truy cp thuc tnh r phi s dng thng qua phng thc. Ta c th khaibo nh sau cho php i tng c th truy cp bin r thng qua phng thc:

    using System;

    namespace DoiTuongDoiTuongHinhHoc

    {public class HinhTron

    {

    private double r;

    public double R

    {

    get

    {

    return r;

    }

    set

    {

    r = value;

    }

    }

    public HinhTron()

    {

    }public HinhTron(double bankinh)

    {

    this.R = bankinh;

    }

    public double DienTich()

    {

    return Math.Round(Math.PI*R*R, 2);

    }

    public override string ToString()

  • 8/6/2019 C# - Tran Thong - DaLat

    45/111

    44

    {

    return "Duong tron co ban kinh " + R + " dien tich " +this.DienTich();

    }

    }

    }

    Thuc tnh p ng c hai mc ch:

    Chng cung cp mt giao tip n gin vi client, xut hin nh l bin thnh vin. Chng thc hin nh l mt phng thc. Tuy nhin, chng cung cp cch che

    du d liu bi mt thit k hng i tng.

    khai bo thuc tnh, chng ta vit kiu thuc tnh v tn theo sau bi {}. Bn trong{} chng ta c th khai bo cch thc truy xut get hay set. Qua phng thc setchng ta c mt tham sn value.

    Trong v d trn R l mt thuc tnh, n khai bo 2 kiu truy xutpublic int R

    {

    get

    {

    return r;

    }

    set

    {r = value;

    }

    }

    Gi tr ca thuc tnh R c thc lu tr trong csd liu, trong bin thnh vinprivate thm ch lu tr ti mt my tnh hay mt dch v no trong mng.

    Truy xut get

    Phn thn ca truy xut get th tng t nh phn thn ca phng thc lp. Chng tr

    v mt i tng c kiu l kiu ca thuc tnh. Trong v d trn, truy xut get ca Rtr v gi tr double. N tr v gi tr ca bin thnh vin private r.

    Bt c lc no chng ta tham chiu n thuc tnh, truy xut get c yu cu cgi tr ca thuc tnh.

    HinhTron t = new HinhTron (1, 5);

    double bankinh = t.R;

    Truy xut set

    Truy xut set dng gn gi tr cho thuc tnh, n tng t nh mt phng thc lptr v kiu void. Lc chng ta nh ngha mt truy xut set, chng ta phi s dng t

  • 8/6/2019 C# - Tran Thong - DaLat

    46/111

    45

    kha value (tham sn) biu din tham s ni m gi trc truyn v lu trtrong thuc tnh:

    set

    {

    r = value;

    }

    Lc chng ta gn mt gi trn mt thuc tnh, truy xut set tng c yu cu vtham sn value c t gi tr m chng ta cn gn cho thuc tnh:

    V d ta c th dng lnh sau trong mt phng thc no ca lp HinhTron tnggi tr ca thuc tnh r ln 1:

    r++;

    Thun li ca cc tip cn ny l client c th truy xut trc tip thuc tnh m khngcn quan tm ti cc d liu n bn trong.

    Cc trng chc (readonly)Nu chng ta mun to mt phin bn ca lp ThoiGian sau c nhim v cung cpmt gi tr tnh, biu din ngy v thi gian hin ti. Chng ta c th dng khai boreadonly khai bo cc thuc tnh:

    public class ThoiGian

    {

    static ThoiGian()

    {

    System.DateTimedt = System.DateTime.Now;Nam = dt.Year;

    Thang = dt.Month;

    Ngay = dt.Day;

    Gio = dt.Hour;

    Phut = dt.Minute;

    Giay = dt.Second;

    }

    public static int Nam;

    public static int Thang;

    public static int Ngay;

    public static int Gio;

    public static int Phut;

    public static int Giay;

    }

    public class Tester

    {

    static void Main()

  • 8/6/2019 C# - Tran Thong - DaLat

    47/111

    46

    {

    System.Console.WriteLine("This Nam: {0}",

    ThoiGian.Nam.ToString());

    ThoiGian.Nam = 2002;

    System.Console.WriteLine("This Nam: {0}",

    ThoiGian.Nam.ToString());

    }

    }

    Trong trng hp ny, gi tr ca bin Nam s vn thay i khi chng ta thc hinphp gn Nam = 2002. Chng ta mun nh du cc gi tr tnh l hng nhng khngth v chng ta khng khi gn gi tr cho chng cho ti khi phng thc to lp tnhc thc hin. C# cung cp t kha readonly dng cho mc ch ny. Nu chng tathay i khai bo bin thnh vin ca lp nh sau:

    publicstaticreadonlyintNam;

    publicstaticreadonlyintThang;

    publicstaticreadonlyintNgay;

    publicstaticreadonlyintGio;

    publicstaticreadonlyintPhut;

    publicstaticreadonlyintGiay;;

    v khng dng lnh:

    // ThoiGian. Year = 2002; // Thc hin lnh ny s gy ra li

    Trnh bin dch thc hin v chy theo ng yu cu ca chng ta.

    3. 3 Cu trc (Struct)

    Lm vic vi kiu cu trc

    Kiu d liu tham chiu lun c to trn heap. Trong mt s trng hp, mt lpcha qu t d liu cn s qun l ca heap. Tt nht trong trng hp ny bndng cu trc. Bi v cu trc c lu tr trong stack, iu ny gim bt chc nngqun l b nh.

    Cu trc cng c ring trng, phng thc to lp v phng thc ging lp (nhngkhng ging kiu lit k). Tuy nhin n l kiu gi tr khng phi kiu tham chiu.

    Cc kiu cu trc ph bin

    Trong C#, cc kiu s cbn nh int, long, float l tn hiu ca cu trc System.Int32,System.Int64, v System.Single. Ngha l chng ta c th gi phng thc trn binthuc kiu ny. V d, tt c cu trc ny cung cp phng thc ToString chuyn ssang chui. Cc lnh sau l hp l trong C#:

    int i = 99;

    Console.WriteLine(i. ToString());

    Console.WriteLine(55. ToString());

    float f = 98.765F;

  • 8/6/2019 C# - Tran Thong - DaLat

    48/111

    47

    Console.WriteLine(f. ToString());

    Console.WriteLine(98.765F. ToString());

    Console.WriteLine s tng gi phng thc ToString khi cn. S dng phngthc tnh trong cu trc rt ph bin. V d phng thc tnh Int32.Parse thng cdng chuyn mt chui sang s:

    string s = "42";

    int i = Int32.Parse(s);

    Trong nhng cu trc trn cng cha nhng trng tnh hu ch nh Int32.MaxValue ly gi tr ln nht ca bin int v Int32. MinValue ly gi tr nh nht ca bin int.

    Bng sau hin th kiu d liu cbn trong C#, n c th tng ng kiu lp haycu trc:

    Tkha Kiu tng ng Lp hoc cu trc

    bool System.Boolean Cu trc byte System.Byte Cu trc

    decimal System.Decimal Cu trc

    Double System.Double Cu trc

    Float System.Single Cu trc

    Int System.Int32 Cu trc

    Long System.Int64 Cu trc

    Object System.Object Lp

    Sbyte System.SByte Cu trc

    Short System.Int16 Cu trc

    String System.String Lp

    Uint System.UInt32 Cu trc

    Ulong System.UInt64 Cu trc

    Ushort System.UInt16 Cu trc

    Khai bo kiu cu trc

    khai bo kiu cu trc, bn khai bo t kha struct theo sau bi tn v phn thntrong du {}. V d, y l cu trc tn ThoiGian cha 3 trng public: Gio, Phut,v Giay.

  • 8/6/2019 C# - Tran Thong - DaLat

    49/111

    48

    struct Time

    {

    public int Gio, Phut, Giay;

    }

    Tng t nh lp, nh du public cho cc trng khng c khuyn khch trong

    hu ht trng hp v khng c cch m bo trng public cha gi tr hp l. Vd, bn c th gn tr ca Phut hay Giay > 60. Cch tt hn l nh du trng privatev cung cp truy xut cu trc ca bn qua phng thc to lp hay phng thc nhsau:

    struct ThoiGian

    {

    public ThoiGian (int hh, int mm, int ss)

    {

    Gio= hh % 24;

    phut = mm % 60;

    giay = ss % 60;

    }

    public int Gio()

    {

    return gio;

    }

    ...

    private int gio, phut, giay;}

    Khi bn sao chp mt bin kiu gi tr, bn c hai bn sao ca gi tr. Ngc li, lcbn sao chp mt bin kiu tham chiu, bn c hai tham chiu n cng i tng.

    Tm hiu skhc nhau gia lp v cu trc

    Bn khng th khai bo phng thc to lp mc nh (phng thc to lp khngc tham s) cho cu trc. V d sau s bin dch nu ThoiGian l lp nhng vi cutrc th khng:

    struct ThoiGian

    {

    public ThoiGian () {... } // Li bin dch

    ...

    }

    Bi v trnh bin dch lun to phng thc to lp mc nh cho cu trc. Trong khitrong lp, trnh bin dch ch to n khi khng c khai bo phng thc to lp tronglp.

    Trnh bin dch to phng thc to lp mc nh cho mt cu trc lun gn 0, false,

    null ging nh lp cho cc kiu d liu tng ng. Do bn mun khi to cc gi

  • 8/6/2019 C# - Tran Thong - DaLat

    50/111

    49

    tr khc cho trng bn phi dng phng thc to lp khng mc nh ca bn. Tuynhin bn phi khi to tt c cc trng trong cu trc, nu khng trnh bin dch sthng bo li. V d sau sc bin dch nu ThoiGian l mt lp v giay c gn

    bng 0 nhng v ThoiGian l cu trc nn li khi bin dch:

    struct ThoiGian

    {public ThoiGian (int hh, int mm)

    {

    gio = hh;

    phut = mm;

    } // li thi gian bin dch: giay cha c khi to

    ...

    private int gio, phut, giay;

    }

    Trong mt lp bn c th khi to trng lc khai bo nhng trong cu trc bnkhng th. V d sau sc bin dch nu ThoiGian l mt lp nhng vThoiGian l cu trc nn li khi bin dch:

    struct ThoiGian

    {

    ...

    private int gio = 0; // li bin dch

    private int phut;

    private int giay;}

    Bng sau tm tt s khc nhau gia lp v cu trcCu hi Cu trc Lp

    Kiu ca n l g? Cu trc l kiu gi trLp l kiu thamchiu

    Th hin ca n lu trn stack hay heap?

    Th hin ca cu trc

    c gi l gi tr vlu trn stack

    Th hin ca lp l

    i tng c lutrn heap

    Bn c th khai bo phng thc to lpmc nh?

    Khng C

    Nu bn khai bo phng thc to lpring bn, trnh bin dch s to phngthc to lp mc nh?

    C Khng

    Nu bn khng khi to trng trong

    phng thc to lp ring bn, trnh binKhng C

  • 8/6/2019 C# - Tran Thong - DaLat

    51/111

    50

    Cu hi Cu trc Lp

    dch s tng khi to cho bn?

    Bn c php khi to trng th hinlc khai bo?

    Khng C

    Cn mt s khc nhau khc gia lp v cu trc l lp c th k tha t lp csnhng cu trc th khng.

    Khai bo bin cu trc

    Sau khi bn nh ngha mt kiu cu trc, bn c th dng n nh cc kiu khc. Vd, nu bn nh ngha cu trc ThoiGian bn c th to bin, trng, tham s kiuThoiGian nh sau:

    struct ThoiGian

    {

    ...

    private int gio, phut, giay;

    }

    class ViDu

    {

    public void PhuongThuc(ThoiGian para)

    {

    ThoiGian bienCucBo;

    ...}

    private ThoiGian thoiGianHienTai;

    }

    Khi to cu trc

    Gi s chng ta nh ngha lp nh sau:

    struct Time

    {

    ...private int hours, minutes, seconds;

    }

    V cu trc l kiu d liu nn bn c th to bin cu trc m khng cn gi phngthc to lp nh v d sau:

    Time now;

    Trong v d ny, bin c to nhng trng bn tri ca n trng thi cha cto. Nu bn truy xut gi tr ca trng ny s gy ra li bin dch. Hnh sau m ttrng thi ca trng trong bin now:

  • 8/6/2019 C# - Tran Thong - DaLat

    52/111

    51

    Nu bn gi mt phng thc to lp, quy tc khi to m bo tt c cc bin ckhi to:

    Time now = new Time();

    Lc ny phng thc to lp mc nh c gi khi to tt c cc trng trong cutrc nh hnh sau:

    Nu bn mun vit phng thc to lp ring, bn c th dng n khi to bin cutrc. Mt phng thc to lp ca cu trc phi lun khi to tt c cc trng ca n.V d:

    struct Time

    {

    public Time(int hh, int mm)

    {

    hours = hh;

    minutes = mm;

    seconds = 0;

    }

    ...

    private int hours, minutes, seconds;

    }

    Trong v d sau khi to now bi gi phng thc to lp ngi dng nh ngha:

  • 8/6/2019 C# - Tran Thong - DaLat

    53/111

  • 8/6/2019 C# - Tran Thong - DaLat

    54/111

    53

    3. 4 Lp Object

    Trong C#, nu bn khng ch r mt lp k tha t mt lp khc th trnh bin dch stng hiu rng lp ca bn k tha t lp Object. Ngha l ngoi nhng thuc tnhv phng thc m bn nh ngha th bn c th truy cp n nhng phng thc

    protected v public ca lp Object v nhng phng thc ny cng c trong tt c lp

    m bn nh ngha.

    Mt s phng thc c nh ngha trong lp Object l:

    Phng thc B ttruy cp Chc nng

    string ToString() public virtual Tr v mt chui m t cai tng

    int GetHashTable() public virtual c s dng nu thc thi tin

    bool Equals(object obj) public virtual So snh cc thc th ca itng

    bool Equals(object objA, objectobjB)

    public static So snh cc thc th ca itng

    bool ReferenceEquals(objectobjA, object objB)

    public static So snh hai s tham kho nmt i tng

    Type GetType() public Tr v chi tit kiu ca mti tng.

    object MemberwiseClone() protected to ra mt bn copy ca itng

    void Finalize() protected virtual y l mt dng Destructorca.NET

    Phng thc Tostring():

    ToString() l mt cch tin li ly mt chui m ti tng. V d:

    int i = -50;

    string str = i.ToString(); // returns "-50"

    Thm mt v d khc:enum Mau {Do, Cam, Vang};

    Mau m = Mau.Cam;

    string str = m.ToString(); // tr v "Cam"

    Object.Tostring() c khai bo l hm o. Trong C#, cc kiu d liu c sn chng hm (override) phng thc ToString() gip cho chng ta c th ly c chuim t ca cc kiu . Nu khng nh ngha chng hm phng thc ToString()trong lp th lp s k tha s thc thi phng thc ToString() ca lpSystem.Object v tr v tn lp. Nu mun phng thc ToString() tr v mt chui

  • 8/6/2019 C# - Tran Thong - DaLat

    55/111

    54

    cha ni dung thng tin v gi tr ca i tng ca mt lp, chng ta phi ghi chngphng thc ToString(). Xem v d sau:

    using System;

    class ViDu

    {

    static void Main(string[] args)

    {

    Tien tienMat = new Tien();

    tienMat.SoLuong = 40M;

    Console.WriteLine("tienMat.ToString() tra ve: " +tienMat.ToString());

    tienMat = new TienKhac();

    tienMat.SoLuong = 40M;

    Console.WriteLine("tienMat.ToString() tra ve: " +

    tienMat.ToString());Console.ReadLine();

    }

    }

    class Tien

    {

    private decimal soluong;

    public decimal SoLuong

    {

    get

    {

    return soluong;

    }

    set

    {

    soluong = value;

    }}

    }

    class TienKhac: Tien

    {

    public override string ToString()

    {

    return "$" + SoLuong.ToString();

    }

    }

  • 8/6/2019 C# - Tran Thong - DaLat

    56/111

    55

    Trong phng thc Main(), chng ta khi to u tin l i tng Tien(), sau li tng TienKhac (). Trong c hai trng hp ta u gi ToString() nhng vi itng Tien() th s thc thi phng thc ca System.Object cn vi i tngTienKhac () th s thc thi phng thc m chng ta override. Kt qu sau khi chyon m trn l:

    tienMat. ToString() tra ve: TientienMat. ToString() tra ve: $40

  • 8/6/2019 C# - Tran Thong - DaLat

    57/111

    56

    Chng 4: Sk tha

    Mc ch ca chng:

    Cung cp kin thc v s dng tnh ng gi trong chng trnh. S dng tnh k tha v a hnh trong chng trnh. S dng giao tip (interface) trong qu trnh pht trin ng dng.4. 1 Cc kiu k tha

    Sk tha (Inheritance) l g?

    K tha trong ngn ng lp trnh lin quan s phn lp, chnh l mi quan h giacc lp. V d, c voi hay nga l nhng ng vt c v. C voi v nga c mi c

    c trng m ng vt c v c nhng n cng c ring nhng c trng ca tng loi(nga c mng cn c voi th khng).

    Trong C#, bn c th m hnh iu ny bng cch to hai lp, mt lp tn DongVat vmt lp tn Ngua v khai bo Ngua k tha t DongVatCoVu. S k tha s m hnhrng c mt quan h v m t s kin rng tt c nga l ng vt c v. Tng t,

    bn c th khai bo mt lp tn CaHeo cng k tha t DongVatCoVu. Nhng ctrng chung (nh ngy sinh, cn nng) c t trong lp DongVatCoVu. Thuc tnhnh l mng hay vy c t tng ng trong lp Ngua v CaHeo.

    Lp cs(base) v lp dn xut (Derived)

    C php khai bo mt lp k tha t mt lp khc nh sau:class Lp_Dn_Xut: Lp_C_S {

    ...

    }

    Lp dn xut k tha t lp cs. Trong C# ch cho mt lp k tha t mt lp khcduy nht, n khng cho dn xut t hai hay nhiu lp. Tr khi lp dn xut c khai

    bo l sealed, bn vn c th khai bo mt lp k tha t lp dn xut vi cng cphp:

    class Lp_Con_Dn_Xut: Lp_Dn_Xut {

    ...

    }

    Theo cch ny bn c th to mt phn cp k tha.

    Gi s chng ta vit mt trnh qun l cc i tng hnh hc. Trong chng ta qunl cc i tng nh l hnh tam gic, hnh vung, hnh trnChng ta c th khai

    bo mt lp DoiTuongHinhHoc trong nh ngha phng thc TinhDienTich v Venh sau:

    publicclass DoiTuongHinhHoc

    {

  • 8/6/2019 C# - Tran Thong - DaLat

    58/111

    57

    public floatX;

    public floatY;

    public DoiTuongHinhHoc(){}

    public DoiTuongHinhHoc(float x, float y){}

    public doubleTinhDienTich();

    public voidVe();

    }

    Chng ta c thnh ngha cc lp HinhTron, HinhVuong, HinhTamGiac k tha tlp DoiTuongHinhHoc nh sau:

    public class HinhTron: DoiTuongHinhHoc

    {

    }

    public class HinhTamGiac: DoiTuongHinhHoc{

    }

    public class HinhVuong: DoiTuongHinhHoc

    {

    }

    i tng System.Object l lp gc ca tt c cc lp. Tt c cc lp dn xut ngmnh t lp System.Object. Nu bn thc thi lp DoiTuongHinhHoc nh trn:

    Trnh bin dch s tng vit li theo m sau:

    class DoiTuongHinhHoc: System.Object

    {

    public DoiTuongHinhHoc()

    {

    ...

    }

    ...

    }

    Ngha l tt c cc lp bn nh ngha k tha tt c cc c trng ca lpSystem.Object. iu ny bao gm phng thc ToString chuyn mt i tngsang mt chui.

    Trong C#, quan h chuyn bit ha thng thng c thc hin thng qua s k tha.y khng phi l cch duy nht thc hin s k tha. Tuy nhin n l cc ph binv t nhin thc hin quan h ny.

    Chng ta ni HinhTron k tha t DoiTuongHinhHoc c ngha n l mtDoiTuongHinhHoc chuyn bit. DoiTuongHinhHoc c gi l mt lp cs(base)

  • 8/6/2019 C# - Tran Thong - DaLat

    59/111

    58

    v HinhTron gi l lp dn xut(derived ). Tht vy, HinhTron k tha nhng ctrng v hnh vi ca lp DoiTuongHinhHoc v ri chuyn bit ha nhng nhu curing ca n.

    4. 2 Thc thi sk tha

    Trong C# chng ta c th to mt lp dn xut bng cch thm du hai chm theo sau

    tn ca lp dn xut cng vi tn ca lp cs.public class HinhTron: DoiTuongHinhHoc

    Trong khai bo trn, khai bo HinhTron l lp dn xut t DoiTuongHinhHoc. Lpdn xut k tha tt c thnh vin ca lp cs. Lp dn xut c th t do thc hinnhng phin bn ring ca mnh i vi cc phng thc lp cs. N thc hin iuny bng cch nh du phng thc mi bng t kha new. Dng t kha ny chra lp dn xut mun che du v thay th phng thc lp cs.

    V d sau minh ha mt lp dn xut

    publicclass DoiTuongHinhHoc{

    publicfloatX;

    publicfloatY;

    publicDoiTuongHinhHoc() { }

    publicDoiTuongHinhHoc(floatx, floaty) {

    this.X = x;

    this.Y = y;

    }

    publicdoubleTinhDienTich()

    {

    return 0;

    }

    publicvoidVe()

    {

    Console.WriteLine("Ve tai vi tri {0} {1} ", X, Y);

    }

    }

    publicclass HinhTron:DoiTuongHinhHoc

    {

    publicHinhTron(){}

    publicHinhTron(floatx,floaty):base(x,y)

    {

    }

    publicnewvoidVe()

    {

    base.Ve();

  • 8/6/2019 C# - Tran Thong - DaLat

    60/111

    59

    }

    }

    class ViDu

    {

    staticvoidMain()

    {

    DoiTuongHinhHoc h = new DoiTuongHinhHoc(10, 10);

    h.Ve();

    HinhTron r = new HinhTron(20, 20);

    r.Ve();

    }

    }

    Gi phng thc to lp ca lp cs

    Trong v d trn lp HinhTron dn xut t lp DoiTuongHinhHoc v c phng thcto lp ring ca n vi hai tham s. Phng thc to lp ca lp HinhTron giphng thc to lp ca lp cha bng cch t du : sau danh sch tham s v gilp csvi t kho base:

    publicHinhTron(floatx,floaty):base(x,y)// mt cch thc khc giphng thc to lp ca lp c s

    Bi v cc lp khng th k tha phng thc to lp ca lp cs nn mt lp dnxut phi thc thi phng thc to lp ring ca mnh v chng c th s dng phngthc to lp ca lp cstheo cch r rng nh trn

    Ch trong v d trn lp dn xut HinhTron thc thi mt phin bn mi ca phngthc Ve();

    publicnewvoidVe();

    T kho new ch ra rng ngi lp trnh mun to ra mt phin bn mi ca phngthc ny trong lp dn xut.

    Nu lp csc mt phng thc to lp c th truy xut mc nh. Khi phng thcto lp ca lp dn xut khng yu cu phng thc to lp ca lp cs, khi

    phng thc to lp mc nh ca lp csc gi theo kiu khng tng minh.Tuy nhin nu lp cskhng c mt phng thc to lp mc nh, cc lp dn xut

    phi gi r rng mt phng thc to lp css dng t kha base.Gi phng thc lp cs

    Trong v d trn phng thc Ve() ca lp HinhTron n v thay th phng thc Ve()ca lp cs. Lc chng ta gi phng thc Ve() trong mt i tng kiu HinhTronth phng thc HinhTron.Ve() c gi ch khng phi phng thc HinhTron ()trong lp DoiTuongHinhHoc. Tuy nhin, trong lp HinhTron ta vn c th gi phngthc Ve() ca lp DoiTuongHinhHoc thng qua t kha base.

    4. 3 Tkha b tr

  • 8/6/2019 C# - Tran Thong - DaLat

    61/111

    60

    Hin th ca lp v cc thnh vin ca lp c thc hn ch bng cch khai bokiu truy xut nh public, private, protected, internal, protected internal.

    Cc lp v cc thnh vin ca n c thc thit k theo nhiu mc truy xut khcnhau. Nu mt thnh vin ca lp c nhiu mc truy xut khc nhau, mc hn chnht c chn. Tht vy, nu chng ta nh ngha mt lp ViDu nh sau:

    public class ViDu

    {

    //

    protected int giaTri;

    }

    Th truy xut i vi bin giaTri t cc i tng l protected mc d mc truy xutca lp ViDu l public.

    4. 4 a hnh (polymorphism)

    Hai kha cnh mnh nht ca k tha l kh nng s dng li m v a hnh(polymorphism). Poly c ngha l nhiu v morph ngha l hnh thc. Tht vy a hnhchnh l kh nng s dng nhiu hnh thc ca mt kiu m khng cn quan n chitit ca n.

    To kiu a hnh

    Bi v HinhTron l-mt DoiTuongHinhHoc v HinhVuong l-mt DoiTuongHinhHoc.y l nhng quan h k tha. Chng ta mong mun c th s dng mt trong haikiu ny trong tnh hung chng ta gi DoiTuongHinhHoc. V d, mt mng gi mttp tt c cc th hin ca DoiTuongHinhHoc. Chng ta mun tnh tng din tch ca

    tt c cc hnh c trong mng bng cch ly tng phn t trong mng v cng vo tngdin tch. Trong trng hp ny chng ta khng cn bit i tng trong danh sch lHinhTron hay HinhVuong, chng ta ch ly ra mt phn t v yu cu n t tnh dintch. Chng ta s x l tt c cc i tng DoiTuongHinhHoc theo c trng a hnh.

    To phng thc a hnh

    to phng thc h tra hnh, chng ta cn nh du dng t kha virtual tronglp csca n. V d ch ra phng thc Ve() trong l p DoiTuongHinhHoc lahnh chng ta dng t kha theo khai bo sau:

    public virtual void Ve( )

    By gicc lp dn xut t do thc hin cc phin bn ring ca lp Ve(). thchin iu ny chng ta n gin vit ln phng thc o ca lp csdng t khooverride trong lp dn xut HinhTron. V d:

    public override void Ve( )

    {

    base.Ve( ); // gi hm v ca s ca lp cha

    Console.WriteLine ("Hinh Tron);

    }

    Tng t chng ta c th thc hin iu ny cho lp HinhVuong.

  • 8/6/2019 C# - Tran Thong - DaLat

    62/111

    61

    Hm Main() ca chng trnh c thc vit li nh sau

    DoiTuongHinhHoc h = new DoiTuongHinhHoc (1, 2);

    HinhTron r = new HinhTron (3, 4);

    HinhVuong b = new HinhVuong (5, 6);

    h.Ve( );

    r.Ve( );

    b.Ve( );

    Chng trnh c th thc hin nh ta mong mun. i tng Ve c gi cho mi itng. Tuy nhin khng c tnh a hnh c s dng y. Mun s dng a hnhchng ta phi khai bo sau:

    DoiTuongHinhHoc [] a = new DoiTuongHinhHoc [3];

    a[0] = new DoiTuongHinhHoc (1, 2);

    a[1] = new HinhVuong(3, 4);

    a[2] = new HinhTron(5, 6);

    iu g xy ra khi ta gi phng thc DrawWindow()?

    V d hon chnh nh sau:

    using System;

    using System.Text;

    namespace ConsoleApplication3

    {

    publicclassDoiTuongHinhHoc

    {publicfloat X;

    publicfloat Y;

    public DoiTuongHinhHoc() { }

    public DoiTuongHinhHoc(float x, float y)

    {

    this.X = x;

    this.Y = y;

    }

    publicvirtualfloat TinhDienTich()

    {

    return 0;

    }

    publicvirtualvoid Ve()

    {

    Console.WriteLine("Ve tai vi tri {0} {1} ", X, Y);

    }

    }

  • 8/6/2019 C# - Tran Thong - DaLat

    63/111

    62

    publicclassHinhTron : DoiTuongHinhHoc

    {

    float bk = 0;

    public HinhTron() { }

    public HinhTron(float x, float y, float r)

    : base(x, y)

    {

    bk = r;

    }

    publicoverridevoid Ve()

    {

    base.Ve();

    Console.WriteLine("Duong tron co ban kinh " + bk);

    }

    publicoverridefloat TinhDienTich()

    {

    return (float)Math.PI * bk * bk;

    }

    }

    publicclassHinhVuong : DoiTuongHinhHoc

    {

    float canh = 0;

    public HinhVuong() { }

    public HinhVuong(float x, float y, float r)

    : base(x, y)

    {

    canh = r;

    }

    publicoverridevoid Ve()

    {

    base.Ve();

    Console.WriteLine("Hinh vuong co canh " + canh);

    }

    publicoverridefloat TinhDienTich()

    {

    return canh * canh;

    }

    }

    classViDu

    {

  • 8/6/2019 C# - Tran Thong - DaLat

    64/111

    63

    staticvoid Main()

    {

    DoiTuongHinhHoc[] a = { newHinhTron(1, 1, 2), newHinhVuong(10,10, 4), newDoiTuongHinhHoc(5, 5) };

    float tongDT = 0;

    for (int i = 0; i < a.Length; i++)tongDT += a[i].TinhDienTich();

    Console.WriteLine("Tong dien tich cac hinh la " + tongDT);

    for (int i = 0; i < a.Length; i++)

    a[i].Ve();

    }

    }

    }

    Phn bit gia tkha new v override

    Trong C#, quyt nh ca lp trnh vin nhm ghi mt phng thc o ca lp cbn c thc hin r rng qua t kha override. iu ny cho php chng ta to ramt phin bn mi trong m chng ta. Nhng thay i trong m ca lp cskhng

    ph vnhng on m trong lp dn xut.

    Trong C# mt hm o lun c xem l gc ca cc hm o gi i. Tht vy, khi C#tm mt phng thc o, n khng tm kim trong phn cp k tha. Nu mt hm oc a vo trong lp DoiTuongHinhHoc, hnh vi thc thi ca lp HinhTron vnkhng thay i.

    trnh vic khai bo phng thc o b chng cho, chng ta c th s dng t khanew ch ra khng c phng thc ghi ln phng thc o ca lp cs.

    Lp tru tng (abstract)

    Mi lp con ca DoiTuongHinhHoc nn thc thi phng php Ve() ca ring n,nhng cc lp dn xut khng bt buc thc hin iu ny trong on chng trnhtrn. yu cu tt c cc lp dn xut thc thi mt phng php ca lp cschngta cn ch ra phng thc l tru tng (abstract).

    Phng thc c khai bo tru tng khng cn nh ngha hay khai bo ni dungthc thi ca n. N ch nhm to mt tn phng thc v nh du rng n phi c

    thc thi trong tt c cc lp dn xut t n.Chng ta dng t kha abstract nh ngha phng thc tru tng:

    abstract public void Ve();

    V d s dng phng php v lp tru tng

    using System;

    using System.Text;

    namespace ConsoleApplication3

    {

    publicabstractclassDoiTuongHinhHoc

  • 8/6/2019 C# - Tran Thong - DaLat

    65/111

    64

    {

    publicfloat X;

    publicfloat Y;

    public DoiTuongHinhHoc() { }

    public DoiTuongHinhHoc(float x, float y)

    {

    this.X = x;

    this.Y = y;

    }

    publicabstractfloat TinhDienTich();

    publicabstractvoid Ve();

    }

    publicclassHinhTron : DoiTuongHinhHoc

    {

    float bk = 0;

    public HinhTron() { }

    public HinhTron(float x, float y, float r)

    : base(x, y)

    {

    bk = r;

    }

    publicoverridevoid Ve()

    {

    Console.WriteLine("Duong tron co ban kinh " + bk);

    }

    publicoverridefloat TinhDienTich()

    {

    return (float)Math.PI * bk * bk;

    }

    }

    publicclassHinhVuong : DoiTuongHinhHoc

    {

    float canh = 0;

    public HinhVuong() { }

    public HinhVuong(float x, float y, float r)

    : base(x, y)

    {

    canh = r;

    }

  • 8/6/2019 C# - Tran Thong - DaLat

    66/111

    65

    publicoverridevoid Ve()

    {

    Console.WriteLine("Hinh vuong co canh " + canh);

    }

    publicoverridefloat TinhDienTich()

    {

    return canh * canh;

    }

    }

    classViDu

    {

    staticvoid Main()

    {

    DoiTuongHinhHoc[] a = { newHinhTron(1, 1, 2), newHinhVuong(10,

    10, 4), newHinhTron(5, 5,5) };

    float tongDT = 0;

    for (int i = 0; i < a.Length; i++)

    tongDT += a[i].TinhDienTich();

    Console.WriteLine("Tong dien tich cac hinh la " + tongDT);

    for (int i = 0; i < a.Length; i++)

    a[i].Ve();

    }

    }

    }

    Gii hn ca tru trng

    Mc d thit k tru tng Ve() bt buc tt c cc lp dn xut thc thi phng thctru tng ca n. iu ny s gy kh khn nu lp dn xut t lp HinhTron khngmun thc thi phng thc Ve();

    Lp Sealed

    Ngc li ca abstract l sealed. Dng t kha sealed, mt lp c th khng cho phpcc lp khc dn xut t n.

    Gc ca tt c cc lp l Object

    Tt c cc lp trong C# u c dn xut t lp Object. Lp gc l lp trn nhttrong cy phn cp k tha. Trong C#, lp gc l Object. Object cung cp mt s cc

    phng thc m cc lp con c th ghi . Chng gm cc phng thc sau:

    Phng thc ngha

    Equal() Kim tra hai i tng c tng ng nhau khng

  • 8/6/2019 C# - Tran Thong - DaLat

    67/111

    66

    GetHashCode() Cho php i tng cung cp hm Hash ring s dng trongkiu tp hp.

    GetType() Cung cp truy xut n kiu i tng.

    ToString() Cung cp chui biu din i tng.

    Finalize() Xa i tng trong b nh.

    MemberwiseClone() To copy ca i tng.

    V d sau minh ha s dng phng thc ToString() trong lp Object cng nh trongcc kiu d liu cbn k tha t Object:

    using System;

    public class ViDu

    {public ViDu (int val)

    {

    giatri = val;

    }

    public override string ToString( )

    {

    return giatri.ToString( );

    }

    private int giatri;

    }

    public class KiemTra

    {

    static void Main( )

    {

    int i = 5;

    Console.WriteLine("Gi tr ca bin i la: " + i));

    ViDu s = new ViDu(7);

    Console.WriteLine("Gi tr ca bin s la " +s );

    }

    }

    Trong trng hp trn hm ToString() ca i tng s v I sc gi tng.

    4. 5 Giao din

    C# h trgiao din (interface). Khi k tha t mt giao din, mt lp dn xut s phithc thi tt c cc thnh vin trong giao din. Chng ta s minh ha v giao din thngqua vic gii thiu mt giao din c Microsoft nh ngha, System.IDisposable.

    IDisposable cha mt phng thc Dispose() dng xo m.

  • 8/6/2019 C# - Tran Thong - DaLat

    68/111

    67

    public interface IHinhHoc

    {

    float DienTich();

    }

    Trn v d trn ta thy vic khai bo mt giao din lm vic ging nh vic khai bo

    mt lp tru tng, nhng n khng cho php thc thi bt k mt thnh phn no cagiao din. Mt giao din ch c th cha nhng khai bo ca phng thc, thuc tnh,ch mc v s kin.

    Bn khng th khi to mt giao, n khng c phng thc to lp hay cc trng vn khng cho php cha cc phng thc ghi chng.

    N cng khng cho php khai bo nhng b t trn cc thnh phn trong khi nhngha mt giao din. Cc thnh phn bn trong mt giao din lun lun l public vkhng th khai bo virtual hay static.

    nh ngha v thc thi mt giao din

    Gi s chng ta vit m cho php cc my in ton chuyn khon qua li gia ccti khon. C nhiu cng ty tham gia vo h thng ny ti khon v u ng vinhau l phi thc thi mt giao din ITaiKhoan c cc phng thc np hay rt tin vthuc tnh tr v s ti khon.

    bt u, ta nh ngha giao din ITaiKhoan:

    public interface ITaiKhoan

    {

    void GuiTien(decimal soLuong);

    bool RutTien(decimal soLuong);

    decimal SoTien

    {

    get;

    }

    }

    Ch : Tn ca giao din thng phi c k t I ng u nhn bit l mt giaodin.

    Khai bo lp TaiKhoanTietKiem k tha t ITaiKhoanpublic class TaiKhoanTietKiem: ITaiKhoan{

    private decimal soTien;

    public void GuiTien (decimal soLuong){

    soTien += soLuong;}

    public bool RutTien(decimal soLuong){

    if (soTien >= soLuong){

  • 8/6/2019 C# - Tran Thong - DaLat

    69/111

    68

    soTien -= soLuong;return true;

    }Console.WriteLine("Rut tien bi loi. ");return false;

    }

    public decimal SoTien{

    get{

    return soTien;}

    }public override string ToString(){

    return String. Format("Tien tiet kiem: so tien = {0, 6:C}",soTien);

    }}

    Trong v d trn chng ta duy tr mt trng private soTien v iu chnh s lng nykhi tin c np hay rt. Ch chng ta xut ra mt thng bo li khi thao tc rttin khng thnh cng v thiu s tin trong ti khon.

    Xt dng lnh sau:

    public class TaiKhoanTietKiem: ITaiKhoan

    Chng ta khai bo lp TaiKhoanTietKiem k tha giao din ITaiKhoan. Ta cng cth khai bo mt lp k tha t mt lp no v t nhiu giao din theo c php nhsau nh sau:

    public class Lp_Dn_Xut: Lp_C_S, IGiaoDien1, IGiaoDien12

    Tha k t ITaiKhoan c ngha l TaiKhoanTietKiem ly tt c cc thnh phn caITaiKhoan nhng n khng th s dng cc phng thc nu n khng nh nghali cc hnh ng ca tng phng thc. Nu b qun mt phng thc no th trnh

    bin dch s bo li.

    minh ha cho cc lp khc nhau c th thc thi cng mt giao din ta xt v d vmt lp khc l TaiKhoanVang.

    public class TaiKhoanVang: ITaiKhoan{

    // vv

    }

    Chng ta khng m t chi tit lp TaiKhoanVang bi v v cbn n ging ht lpTaiKhoanTietKiem. im nhn mnh y l TaiKhoanVang c th rt tin thm chtrong ti khon ca h khng cn tin.

    Chng ta c phng thc main():

  • 8/6/2019 C# - Tran Thong - DaLat

    70/111

    69

    class ViDu

    {

    static void Main()

    {

    ITaiKhoan tk1 = new TaiKhoanTietKiem();

    ITaiKhoan tk2 = new TaiKhoanVang();

    tk1.GuiTien(200);

    tk1.RutTien(100);

    Console.WriteLine(tk1.ToString());

    tk2. GuiTien(500);

    tk2. RutTien(600);

    tk2. RutTien(100);

    Console.WriteLine(tk2.ToString());

    }

    }

    Kt qu xut ra l:

    Tien tiet kiem: so tien = 100. 00Rut tien bi loi.Tien tiet kiem: so tien = 400. 00

    Chng ta c th trn bt k th hin ca bt k lp no thc thi cng mt giaodin. Nhng chng ta chc gi nhng phng thc l thnh phn ca giao dinthng qua s tham kho n giao din ny. Nu mun gi nhng phng thc mkhng l thnh phn trong giao din th ta phi tham kho n nhng kiu thch hp.

    Nh v d trn ta c th thc thi phng thc ToString() mc d n khng l thnhphn c khai bo trong giao din ITaiKhoan bi v n l thnh phn caSystem.Object.

    Mt giao din c th tham kho n bt k lp no thc thi giao din .

    V d ta c mt mng kiu giao din no th cc phn t ca mng c th thamkho n bt k lp no thc thi giao din :

    ITaiKhoan[] taiKhoan = new ITaiKhoan[2];

    taiKhoan[0] = new TaiKhoanTietKiem();taiKhoan[1] = new TaiKhoanVang();

    Tha k giao din

    C# cho php mt giao din c th k tha cc giao din khc. Khi mt giao din ktha mt giao din khc th n c th cha tt c cc phng thc nh ngha tronggiao din cha v nhng phng thc ca n nh ngha. V d ta to ra mt giao dinmi k tha giao din ITaiKhoan:

    public interface ITaiKhoanChuyenTien: ITaiKhoan

    {

  • 8/6/2019 C# - Tran Thong - DaLat

    71/111

    70

    bool ChuyenDen(ITaiKhoan dich, decimal soLuong);

    }

    Nh vy giao din ITaiKhoanChuyenTien phi c tt c cc phng thc trong giaodin ITaiKhoan v phng thc ChuyenDen.

    Chng ta s minh ho ITaiKhoanChuyenTien bng mt v d bn di v mt currentaccount. Lp TaiKhoanHienThoi c nh ngha gn ging ht vi cc lpTaiKhoanTietKiem v TaiKhoanVang:

    public class TaiKhoanHienThoi: ITaiKhoanChuyenTien

    {

    private decimal soTien;

    public void GuiTien(decimal soLuong)

    {

    soTien += soLuong;

    }public bool RutTien(decimal soLuong)

    {

    if (soTien >= soLuong)

    {

    soTien -= soLuong;

    return true;

    }

    Console.WriteLine("Rut tien loi. ");

    return false;

    }

    public decimal SoTien

    {

    get

    {

    return soTien;

    }

    }

    public bool ChuyenDen(ITaiKhoan dich, decimal soLuong)

    {

    bool kq;

    if ((kq = RutTien(soLuong)) == true)

    dich.GuiTien(soLuong);

    return kq;

    }

    public override string ToString()

    {

  • 8/6/2019 C# - Tran Thong - DaLat

    72/111

    71

    return String.Format("Tai khoan hien thoi: so tien = {0, 6:C}",soTien);

    }

    }

    static void Main()

    {ITaiKhoan tk1 = new TaiKhoanTietKiem();

    ITaiKhoanChuyenTien tk2 = new TaiKhoanHienThoi();

    tk1.GuiTien(200);

    tk2.GuiTien(500);

    tk2.ChuyenDen(tk1, 100);

    Console.WriteLine(tk1. ToString());

    Console.WriteLine(tk2. ToString());

    }

    Khi thc thi on m trn bn s thy kt qu nh sau:

    TaiKhoanHienThoi

    Tien tiet kiem: so tien = 300. 00

    Tai khoan hien thoi: so tien = 400. 00

  • 8/6/2019 C# - Tran Thong - DaLat

    73/111

    72

    Chng 5: Ton tv chuyn kiu

    Mc ch ca chng:

    S dng ton t trong cc biu thc, u tin thc hin cc php ton. nh ngha cc ton t trong lp. Chuyn i kiu tng minh v khng tng minh.5. 1 Ton t

    Tm hiu ton t

    Chng ta dng ton t kt hp cc ton hng vi nhau trong mt biu thc. Miton t c ring ng ngha da trn kiu m chng lm vic. V d, ton t + ngha l

    cng i vi kiu d liu s nhng li l ni chui i vi kiu d liu string.Mi ton t c mt u tin khc nhau. V d ton t * c u tin cao hn ton t+.

    Mi ton t c mt kt hp vi n t tri qua phi hay t phi qua tri. V d, ton t= l kt hp phi (t phi qua tri) v a = b= c cng a = (b=c).

    Ton t mt ngi l ton t ch c mt ton hng. V d, ton t tng (++) l mt tont mt ngi.

    Ton t nh phn l ton t c hai ton hng. V d ton t * l ton t nh phn.

    Rng buc ton tC# cho php bn np chng hu ht cc ton t hin ti theo kiu ring ca bn. Khithc hin iu ny ton t ca bn thc thi theo cc lut sau:

    Bn khng th thay i u tin v s kt hp ca mt ton t. u tin v skt hp da trn k hiu ton t (v d +), khng da trn kiu (v d int) m khiu ton tang c s dng. V vy, biu thc a + b * c th ging a + (b*c)khng lin quan n kiu a, b, c.

    Bn khng th thay i s s hng ca ton t. V d, * l ton t nh phn. Nubn khai bo mt ton t * cho kiu ca bn, n phi l ton t nh phn.

    Bn khng th to k hiu ton t mi. V d, bn khng th to mt k hiu ton tmi nh l ** tnh m s ca mt s vi mt s khc. Bn phi to mt phngthc thc hin iu .

    Bn khng th thay i ngha ca cc ton t khi bn dng n cho cc kiu dngsn. V d, biu thc 1 + 2 c mt ngha nh ngha trc v bn khng cphp ghi ngha ny. Nu bn lm iu ny, mi th trnn phc tp.

    C mt s k hiu ton t m bn khng th qu ti. V d, bn khng th qu titon t . .

    5. 2 Chuyn kiu an ton

  • 8/6/2019 C# - Tran Thong - DaLat

    74/111

    73

    Kiu ng hp(Boxing) v mhp (unboxing)

    ng hp v mhp l qu trnh x l cho php cc kiu gi trc x l nh lkiu tham chiu. ng hp chnh l chuyn gi tr vo trong mt i tng v mhptr v kiu gi tr ca i tng . l cch cho php chng ta gi phng thcToString() trn s nguyn trong cc v d trn.

    ng hp l dng khng tng minhng hp chuyn mt kiu gi trn mt kiu Object khng tng minh. ng hpmt gi tr s thc hin cp pht mt th hin ca Object v chp gi tr vo trong thhin ca i tng mi nh trong hnh v sau:

    V d minh ha:

    using System;

    class DongHop

    {

    public static void Main( )

    {

    inti = 123;

    objecto =i;

    Console.WriteLine("Gia tri cua doi tuong la = {0}", o);

    }

    }

    Mhp tng minh

    ly gi tr ti tng, mhp tr v mt kiu gi tr, chng ta phi thc hin m

    hp r rng. Chng ta nn thc hin hai bc sau: m bo th hin ca i tng l mt gi tr c cng kiu vi kiu c a vo

    khi ng hp.

    Chp gi tr t th hin ca i tng n bin kiu gi tr.Minh ha nh trong hnh v sau:

  • 8/6/2019 C# -