huong dan lap trinh vb.net

Upload: minh-tri

Post on 16-Oct-2015

39 views

Category:

Documents


3 download

TRANSCRIPT

  • 1

    HNG DN LP TRNH

    VISUAL BASIC .NET Tc gi

    www.vivosoft.com

  • 2

    Bi 1

    Microsoft .NET Framework

    Xin co li: rt tic l server chng ti khng cho php cha cc files MP3 nn chng ti s tm cch khc cho c gi download sau. Nu cc bn c kin hay v cch

    cho download cc MP3 files ny th xin lin lc vi webmaster. Thu m bi ging (MP3) download size

    Week 1.1 Week 1.2 Week 1.3 Week 1.4 Week 1.5 Week 1.6 Week 1.7 Week 1.8

    1.2 mb 1.2 mb 0.6 mb 1.2 mb 1.2 mb 1.2 mb 1.4 mb 1.4 mb

    Ci t Visual Studio.NET Beta 2

    Visual Studio.NET nm trong 3 CDs, gm c 4 files:

    EN_VS_NET_BETA2_WINCUP.exe EN_VS_NET_BETA2_CD1.exe EN_VS_NET_BETA2_CD2.exe EN_VS_NET_BETA2_CD3.exe

    Chy EN_VS_NET_BETA2_WINCUP.exe Unzip n vo mt folder trong mt harddisk (eg: E:\CD\WINCUP) . Ln lt chy EN_VS_NET_BETA2_CD1.exe, EN_VS_NET_BETA2_CD2.exe v EN_VS_NET_BETA2_CD3.exe Unzip chng vo chung mt folder trong mt harddisk (eg: E:\CD ). Vic Unzip files c th rt lu, bn phi kin nhn ch cho n khi n kt thc. Nu khng, khi ci t c th b than phin l thiu files. K , trc ht chy Setup.exe ca Windows Component Update nh di y, click No khi Warning dialog hin ra:

  • 3

    Tip theo, chy Setup.exe ca Visual Studio.NET:

  • 4

    Bn nn c CPU Pentium III, 500MHz tr ln, vi 256 MB RAM v t nht 10GB Harddisk. V OS bn nn dng Windows 2000 (Professional hay Server) hay Windows XP. L do chnh l cc versions Windows ny h tr Unicode v c Internet Information Server (IIS) h tr ASPX ta dng cho ASP.NET. M cc Samples ca QuickStart

    Trc khi expand Samples ca Quickstart bn cn phi ci t IIS. Nu cha lm vic y bn b CD ca Windows2000 hay WindowsXP vo install IIS component. QuickStart Samples ca .NET Framework cha cc gii thch cn bn v nhiu th d. expand cc Samples doubleclick Webpage Starthere.htm nh trong hnh di y:

  • 5

    Khi trang Web ca QuickStart hin ra, click QuickStart, tutorials and samples ri sau theo ch dn tng bc.

    Trang Framework SDK QuickStart Tutorials cho ta cc bi tp ca ASP.NET, Windows Forms v How Do I...

  • 6

    Nh nguyn cc folders ca Unzipped files (E:\CD, E:\CD\WINCUP), ng delete chng, v .NET s cn dng chng. Ngoi ra, nu sau ny .NET b corrupted v conflict vi cc application software khc, bn c th ci t .NET li.

    Gii hn ca Software Tools hin gi

    Architect ca application software hin gi c ni chung ba tng (three tiers): tng giao din (Presentation Tier), tng gia (Middle Tier) v tng d kin (Data Tier): Presentation Tier: Trong desktop Client ta dng VB6 v ni vi middle tier qua DCOM. Trong browser based Client ta dng Javascript hay Java applet. T browser based Client ta dng http ni vi middle tier qua IIS/ASP (c th dng COM y). Middle Tier: Cha cc rules validate data trn client v cc business rules khc. Ta dng VB6 y, nhng cch trin khai COM vi nhng Object Oriented Programming concepts rc ri hn bnh thng. Ta phi thit k sao cho cc components scale well (dng cho mi c). C khi dng Microsoft Transaction Server trn Windows NT hay COM+ Services trn Windows 2000. Lp rp cc versions ca components l mt thch thc ln. Nhiu khi middle tier cn ni chuyn vi cc database qua HTTP, ADO v CDO (Collaborative Data Objects), .v.v.. Data Tier: Thng l relational database nh Microsoft SQL Server hay Oracle. Ngoi ra cn c Exchange hay cc database xa ca mainframe. Do ta thy:

    Desktop tools khng thch hp cho Distributed System hay Internet Phi dng nhiu th codes nh VB6 Code, VBScript, JavaScript, Dynamic HTML, Cascading Style Sheet, VC++, Stored Procedures (Transact-SQL trong SQLServer hay PL-SQL trong Oracle).

    Ty thuc qu nhiu vo central database: Ngay c ADO d l tin dng cng i hi Client lun lun connect vi Server. iu ny khng thch hp cho Internet applications, v bn cht ca Internet l stateless (khng gi trng thi), mi ln cn lm vic mi connect li mt cht thi.

    DLL "Hell": Cc ActiveX cn phi c registered vi Windows Registry, ch c mt version c chp nhn. Nu version mi nht ca mt DLL khng compatible vi cc versions trc m applications trn my ang cn th c rc ri.

    Gii hn ca VB6

  • 7

    Thiu kh nng inheritance (tha k) v mt s Object Oriented features khc. Kh nng Error handling gii hn: On Error Goto ..., On Error Resume Next Nhiu khi cn phi gi Windows API lm nhng vic VB6 khng h tr: vic ny khng t nhin v i

    khi nguy him. Khng c multi-threading: khng th on trc response ca code chy trong cc windows ca cng mt

    VB6 application. Ngay c gii quyt vn multitasking bng Timers cng khng ng tin cy. Khng d dng chung vi cc ngn ng khc nh VC++. Khng tin cho Web development: WebClass khng thnh cng lm. t ai chu cho ta ci ActiveX trn my

    ca h.

    .NET Framework

    .NET c developed t u nm 1998, lc u c tn l Next Generation Windows Services (NGWS). N c thit k hon ton t con s khng dng cho Internet. Vin tng ca Microsoft l xy dng mt globally distributed system, dng XML (cha nhng databases t hon) lm cht keo kt hp chc nng ca nhng computers khc nhau trong cng mt t chc hay trn khp th gii. Nhng computers ny c th l Servers, Desktop, Notebook hay Pocket Computers, u c th chy cng mt software da trn mt platform duy nht, c lp vi hardware v ngn ng lp trnh. l .NET Framework. N s tr thnh mt phn ca MS Windows v s c port qua cc platform khc, c th ngay c Unix. Mc du hy cn l Beta, .NET Framework rt stable v Visual Studio.NET rt t bugs, c th dng cho software development ngay t by gi. Hin nay c mt s sch v lp trnh .NET do Wrox v Oreilly xut bn.

  • 8

    Cc phn chnh ca Microsoft.NET Framework:

    .NET application c chia ra lm hai loi: cho Internet gi l ASP.NET, gm c Web Forms v Web Services v cho desktop gi l Windows Forms. Windows Forms ging nh Forms ca VB6. N h tr Unicode hon ton, rt tin cho ch Vit v tht s Object Oriented. Web Forms c nhng Server Controls lm vic ging nh cc Controls trong Windows Forms, nht l c th dng codes x l Events y ht nh ca Windows Forms. im khc bit chnh gia ASP (Active Server Pages) v ASP.NET l trong ASP.NET, phn i din visual components v code nm ring nhau, khng ln xn nh trong ASP. Ngoi ra ASP.NET code hon ton Object Oriented. Web Services ging nh nhng Functions m ta c th gi dng t cc URL trn Internet, th d nh Credit Card authorisation. ADO.NET l mt loi cache database nho nh (gi l disconnected database) thay th ADO. Thay v application connects vnh vin vi database m qua ADO, application trong .NET lm vic vi portable

  • 9

    database ch cha mt hai tables, l copy t database m. Khi no cn, portable database ny (ADO.NET) s c reconciled vi database m update cc thay i. Hai tables trong ADO.NET c th c related nhau trong Master/Details relationship. V ADO.NET c cha original data ln data mi nht nn Rollback trong ADO.NET rt d dng v nh k. XML c ym tr ti a. Nm pha sau ADO.NET l XML. XML c th l Table of records trong ADO.NET hay Tree of nodes trong DOM (Document Object Model). IO c h tr bng ton b Stream k c Memory Stream v StreamReader/StreamWriter. Thm vo l DataFormatting cho Serialisation cha Object xung binary file hay text file. TCP/IP v http l hai protocols thng dng nht trong .NET, nhng chng lm vic pha sau sn khu gip ta gi mt remote procedure (nm trn computer khc) d dng nh mt local procedure. K thut y gi l Remoting. Security h tr Cryptography, Permissions v Policy. Diagnostics cho ta Debug v Trace. Threading rt tin v n gin implement Lightweight Process. Vn Timing trong .NET program rt linh ng, hiu qu v chnh xc. Vic thit k Common Language Runtime nhm vo cc mc tiu chnh sau y:

    Vic trin khai n gin v nhanh hn: developers s dnh th gi quyt nh rp nhng software components no li vi nhau nhiu hn l lp trnh tht s.

    Cc cng tc thit yu ("plumbing") nh memory management, process communication .v.v. c lo liu t ng.

    Cc cng c h tr rt y (no more API): .NET Framework Base classes rt phong ph cho file, network, serialisation, m ha, XML, database, v.v..

    Ci t n gin v an ton (no more DLL "hell"): ch cn xcopy files, ging nh thi vng son ca DOS. L do l .NET application chy trn .NET framework, mt khi ta ci .NET framework vo my ri th c y mi .DLL cn thit. C l trong tng lai Microsoft ci .NET framework chung vi Windows.

    Dng cho t WindowsCE n Desktop, n Web (scalability).

    Metadata

    Metadata l cc d kin ct ngha cho ta bit v d kin. Th d XML Schema ca mt XML file l metadata ct ngha v data structure ca data trong XML file. Chnh ci XML Schema cng l mt XML file. Cc .NET application components, gi l Assembly, cha rt nhiu metadata ct ngha v chnh n (self describing). Tm bit v mt .NET application c th lm vic vi n th gi l Reflection.

    H tr v phi hp mi ngn ng lp trnh

    Common Language Runtime (CLR) l trung tm im ca .NET Famework, n l hm my chy cc nng tnh ca .NET. Trong .NET, mi ngn ng lp trnh u c compiled ra Microsoft Intermediate Language (IL) ging ging nh byte code ca Java. Nh bt buc mi ngn ng u phi dng cng cc loi data types

  • 10

    (gi l Common Type System) nn Common Language Runtime c th kim sot mi interface, gi gia cc components v cho php cc ngn ng c th hp tc nhau mt cch thng sut. Tc l trong .NET, VB.NET program c th inherit C# program v ngc li mt cch hon ton t nhin. iu ny chng nhng gip cc VC++ hay Java programmers bt u dng C# mt cch d dng m cn lm cng mt d n vi VB.NET programmers na. Nu VC++ linh ng v hiu nng hn VB6, th C# chng khc g VB.NET. Bn c th port C# code qua VB.NET code rt d dng. V source code VC++ v Java gn gi C# hn VB6 vi VB.NET nn ngoi i c nhiu C# code hn VB.NET. Do , mc du hai ngn ng VB.NET v C# u ngang c nhau, nu dng C# bn c li im c nhiu source code sn v nht l lu nay ngi ta vn mang n tng rng VC++ hay Java programmers mi tht s l cc cao th lp trnh, v c khuynh hng tr lng cc guru VC++/Java cao hn VB programmers. Khi chy .NET application, n s c compiled bng mt JIT (Just-In-Time) compiler rt hiu nng ra machine code chy. im ny gip .NET application chy nhanh hn Java interpreted code trong Java Virtual Machine. Just-In-Time cng c ngha l ch phn code no cn x l trong lc y mi c compiled. IL code chy trong CLR uc ni l managed code. .NET code c th chy chung vi ActiveX, nhng code trong ActiveX c gi l unmanaged code, tc l CLR khng chu trch nhim. Ngoi vic allocation v management of memory, CLR cn gi cc refrerence n objects v rc (handle garbage collection), tc l thu li cc mnh vn memory khi chng khng cn dng na. Trc y, mi khi mt DLL uc loaded vo memory, system s ghi nhn c bao nhiu task dng n khi task cui cng chm dt th system unload DLL v tr li phn memory n dng trc y system dng cho chuyn khc. Ch nu allocate memory dng m khng nh dispose n th s b memory leak (r ), ln ln ta dng ht memory, b bt buc phi reboot OS. Nhng by gi .NET dng mt process c lp lm vic garbage collection. Ci phn ng ph ca vic ny l khi ta Dispose mt Object ri, ta vn khng bit chc chn chng no n mi tht s bin mt. V garbage collector l mt low priority process lm vic trong background, ch khi no system memory gn cn n mi nng cao priority ln. D nhin, nu mun, ta c th i hi system Dispose mt Object ngay lp tc.

    Assembly

    .NET application xy dng t cc assemblies. Mi assembly phi c mt manifest. C th n nm ring trong mt file hay nm bn trong mt module. Manifest cha nhng metadata sau y:

  • 11

    Tn v Version number ca assembly Nhng assembly khc (k c version number ca assembly) m assembly ny ty thuc vo chy Types (classes v members) m assembly ny cho xut khu Assembly ny i hi iu kin an ninh no (security permissions)

    Manifest cho php ta dng hn mt version ca assembly (tng ng vi DLL trc y) cng mt lc. T y khng cn register DLL na. Thay vo , ta ch cn copy cc assembly vo mt subfolder /bin ca chng trnh chnh.

    Quyt nh ca bn

    Sau khi bit qua v .NET, cu hi bn s t ra l bn c nn hc lp trnh trn .NET hay khng. Ni chung, v lp trnh c nhiu tn gio nh VC++/Java, VB6, Delphi ..v.v.. Bn c th chn gia C# v VB.NET. i vi VB6 programmers, hc lp trnh VB.NET s mt mt thi gian, nhng khng kh. Nn nh rng .NET khng phi ch cho ta cc ngn ng lp trnh, m c mt h thng trin khai phn mm ch trng vo mc tiu hn l cch thc. Cc li ch .NET cng hin cho bn cch thc tin l:

    K thut .NET s honh hnh trn giang h trong t 5 n 10 nm ti. Tnh trung bnh, lp trnh trong .NET s tit kim th gi cho bn t 25% n 50% so vi trc y. L do l

    trong .NET bn s nghin cu dng component no nhiu hn l tht s vit code. Hn na, hu nh code no bn cn phi vit, bn s dng n li trong tng lai. V bo tr .NET code th li cng khe hn trc y, v chnh bn c vit bao nhiu code (c th b bugs) u m bo tr.

    Do , c l trong tng lai .NET programmers chng ta s ng n 10 gi sng mi thc, mt ngy ch cn lm vic vi ting, rnh rang lm vn, cu c. Trong bi ti ta s hc v Visual Studio.NET interface v bt u vit th mt program Demo

    Bi 2

    Visual Studio.NET Visual Studio.NET

    chy VisualStudio.NET bn cn phi Set Time ca Windows li trc cui thng 7,2001, eg: 1-July-2001. Visual Studio.NET Beta 2 hin nay c Service Pak 2, n cho php ta dng Visual Studio.NET Beta 2 sau ngy 31-July-2001, tc l khng c time-bomb. Nu VS.NET version ca bn b gii hn v thi gian ni trn, t trong VS.NET bn c th download Service Pak 2 ci t bng cch dng IDE Menu Command Help | Check for Updates. C hai cch bt u mt project mi trong VS.NET. Hoc Click New Project trong trang Web StartPage nh di y:

    Hoc dng Menu command File | New | Project ging nh trong VB6 IDE:

  • 12

    Khi Add New Project, Name s l subfolder name ca New Project. Bn c th chn VB.NET, C# hay VC++.NET project. Trong tng lai chng ta s ch nhm vo VB.NET v C# thi. Ngoi ra SetUp and Deployment by gi l mt loi project nm trong IDE ca Visual Studio.NET, ta khng cn phi chy ring chng trnh Package and Deployment bn ngoi VB6 IDE nh trc y. Solution trong VS.NET c th cha hn mt Project v bao gm tt c nhng files bn lit ra l cn thit cho Solution. Nu mt trong nhng files y b thay i bn ngoi VS.NET, khi VS.NET khm ph ra n s load vo trong VS.NET cho bn nu bn ng .

    m mt Solution/Project c sn, bn c th click link ca tn project trn trang StartPage, hay dng Menu command File | Open | Project , hay Menu Command File | Recent Projects.

    Visual Studio.NET IDE

  • 13

    Giao din ca VS.NET c nhng c im ging nh Delphi v Visual InterDev ch code c generated t ng, Windows nm chung thnh Tab set hay float khp ni, v h tr Solution rt thch hp cho vic trin khai ca c i. Toolbox bn tri cha Controls cho Windows Forms, Web Forms, General Components, Data Components, HTML tags, XML Schema tools v.v... Khi mt Form ang hin th, click ln mt button trong Toolbox chn Tool Set bn cn. Toolbox trng thi Fixed displayed (nh trong hnh trn) khi cy ghim pha trn m xung. Bn c th click cy ghim cho n nm ngang v vertical Toolbox tab hin ra bn tri. Lc y, Toolbox trong trng thi Auto Hide (hin ra/rt vo) nh di y:

    Bn c th gi hu ht cc Windows hin th bng cch dng Menu commands View, View | Other Windows v Debug | Windows:

  • 14

    Cc Windows bn phi c th float, nm chng ln nhau thnh nhng Tabs trong mt Window set hay nm cnh nhau vertically tiled. Nm Tittle bar di nguyn mt Window set i. Nm Window Tab ca mt Window set ko ch mt Window ra. Bn c th chng hai Windows li vi nhau bng cch nm Tittle bar ca mt Window chng ln mt Window khc. Th nhch i, nhch li, trc khi bung Window ra lm quen vi kt qu. Pha di c Task List Window bn gi s sch v din tin ca d n v qun l c i. Khi bn dng menu command Build | Build compile program, nu c errors chng s c hin th trong Task List Window. Double click ln mt hng error mang cursor n ch gy ra error y trong code window. Trong hnh di y, ta c comment out hng Dim sw As StreamWriter:

    Ngoi ra, Debug by gi bn c Output Window in ra cc messages m trong VB6 bn dng Immediate Window. Th d trong VB6 bn vit:

  • 15

    Debug.Print "Count=" & CStr(Count) in ra trong Immediate Window, th trong VB.NET bn c th vit: Console.WriteLine("Count= {0}", Count) in ra trong Output Window. D nhin bn vn c th tip tc dng Immediate Window trong cng tc Debug nh trc y trong VB6. Cha ht, VS.NET cn cho bn Command Window ta c th enter nhng VS.NET commands manipulate IDE, x l macros, .v.v hin th Window ny bn dng menu command View | Other Windows | Command Window. tin hn, bn drag title bar ca n chng ln tab bar ca Task List v Output windows.

    Nu ta enter mt command nh: File.AddNewProject IDE s hin th Add New Project dialog. VS.NET h tr Macro bn c th record v playback mt chui cng tc. Phng tin Integrated Debugging cho ta Debug Menu, Call Stack Window, Breakpoints Window v Watch and Value Display Windows. Thng thng bn s Add Reference cc .NET components. Nhng bn cng c th dng ActiveX (c sn trong VB6) trong .NET application bng cch Add Reference COM (click Tab COM trn Add Reference Dialog). .NET s gi ActiveX thnh mt NET component (click Yes tr li cu hi "Would you like to have a wrapper generated for you?"). Ngoi ra dng Add Reference Projects refer n DLL ca cc User developed DLL.

  • 16

    Demo Program

    Trong chng trnh biu din ny, ta dng giao din hu nh hon ton bng ch Vit. Ta c th nh ch Vit (Unicode) cho Title Bar, Menu, TextBox, ListBox .v.v.. Nu bn cn mt key input software cho ch Vit h tr Unicode th download VPS, Vietkey hay Unikey. Cc documents nh Form, XML .v.v. trong .NET project u c Saved vi UTF-8 encoding. Bn c th Download source code ca program demo ny ti y. Trong program S th Saigon ny ta c hai Listboxes. Khi chy, bn c th drag tn cc loi th t Listbox1 (bn tri) drop vo Listbox2 (bn phi). Pha di l mt Label dng hin th ngy gi. C mt button Lu tr danh sch ta save data trong Listbox2 vo file animal.txt trong subFolder bin. Ngoi ra bn cng c th dng Main menu Item c danh sch Load data t file animal.txt vo Listbox2.

  • 17

    Nhng components khng cn phi hin ra lc runtime nh Timer, Menu, Tooltip .v.v. nm trong mt Component Tray (mm) ring. Mun Edit MainMenu, click ln MainMenu1 icon ri nh trc tip vo MainMenu. Thm cc menuitems mi bng cch nh thng vo cc ch c ch Type Here. Lu cc Tabs bn trn Editing Area khi bn m nhiu forms.

    Edit MainMenu, insert mt Separator

    Ch danh sch cc References c lit k trong Solution Explorer.

  • 18

    Edit Shortcut cho mt menu item.

    Button by gi chng nhng c th cha hnh m cn cho bn chn v tr ca hnh trong button bng ImageAlign na.

    Bn c th Anchor mt Button n dnh vo mt gc ca form khi form resizes th Button chy theo gc y ca form. y ta click hai thanh Di v Phi cho chng tr nn mu en chn Anchor Bottom v Right.

  • 19

    Trong lc thit k ta c th edit cc List items ca mt Listbox bng cch m property Items Collection ra v Edit vo mt trang.

    Walk Through Code

    Trong .NET, cc classes c chia ra thnh nhiu nhm nh System.IO, System.XML, System.Data, System.Drawing ..v.v.. Ngoi ra trong mi nhm li cn chia thnh nhng nhm con, chu nh System.Windows.Forms, System.Windows.Collections, System.Windows.Diagnostics, .v.v.. Mc du mt khi Project | Add Reference cc .NET components y ta c th dng chng trong program nhng vn phi bin mt tn di nh System.IO.StreamReader trnh ln ln. c th vit tn class gn hn ta dng Imports nh Imports System.IO, sau ta ch cn vit StreamReader l . Cng vic Imports ny c gi l importing Namespace (ca System.IO). Tng t nh th, c th tip tc dng cc Functions Left, Right, Mid ca VB6 trong .NET ta c th thm cu Imports VB6 = Microsoft.VisualBasic u chng trnh. Sau ta c th vit: AppPath = VB6.Left(AppPath, Pos) Nguyn program chng ta ti y l Public Class Form1. Form1 tha k standard form class ca .NET Framework nn ta declare:

  • 20

    Inherits System.Windows.Forms.Form

    Imports System.IO Imports VB6 = Microsoft.VisualBasic Public Class Form1 Inherits System.Windows.Forms.Form Dim AppPath As String Private Sub MenuItem4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem4.Click End ' Terminate the program End Sub Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load ' Obtain the folder where this program EXE resides and initialise tooltip Dim AppPath As String Dim Pos As Integer ' Fetch full pathname of the EXE file AppPath = System.Reflection.Assembly.GetExecutingAssembly.Location ' Locate the last slash in the pathname string Pos = InStrRev(AppPath, "/") ' Extract the part up to the backslash AppPath = VB6.Left(AppPath, Pos) ' Initialise the tooltip for Listbox1 ToolTip1.SetToolTip(ListBox1, "Xin nm ko tn mt con th qua Listbox bn phi") End Sub

    Hy xem cch vit mt Event Handler nh: Private Sub MenuItem4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem4.Click Khc vi VB6, n c thm cc ch Handles MenuItem4.Click pha cui ni handling event Click ca MenuItem4. Mi Event Handler u c passed cho hai parameters: ByVal sender As System.Object v ByVal e As System.EventArgs. Parameter th nht, sender, l Object ch ng chuyn RaiseEvent, cn e l Event c cha nhiu d kin khc nhau ty theo tnh hung. Khi edit code bn c th nh Intellisense ca IDE gip cho bit parameter e cha nhng d kin g. Trong .NET, vn handling event khng phi l mt iu b him nh trong VB6. Khi mt control c th RaiseEvent th chng nhng mt, m nhiu controls khc u c th ng k (Register) c Thng bo (Notified) khi Event y xy ra. Control RaiseEvent c gi l Publisher (Nh Xut Bn), cc controls mun handle event c gi l Subcribers (nhng Ngi t Mua di hn) . D nhin cch handle event ca mi control u khc nhau, du rng c passed cho cng hai parameters. Cc EventHandlers ny c gi l Delegates (nhng Nh i Din lnh trch nhim gii quyt mt s c). Do , ta c th dng vn vn mt EventHandler handle nhiu Event khc nhau, xut pht t nhiu Objects. Ni cho n gin ra, sau khi ta ng k mt hay nhiu Delegates (tc l EventHandler Subs), th khi Event xy ra, cc EventHandler Subs y s c x l. Nu bn vn cn thy kh hiu th hy c th d ny. Tng tng bn lm bing nu n nn t nh hng giao cm mi ngy n tn nh. C hai cch bn nhn "g-mn" cm:

    1. Ngi giao cm s "g-mn" cm trc nh, cnh bn hp th. Khi i lm v, bn s mang n v nh. Trong trng hp ny bn x l cng vic khi no tin, tc l lc v n nh. Cch ny c im bt li l hm no bn i lm v tr th cm c th b thiu v tri nng.

    2. Bn a cha kha nh cho ngi giao cm gi. Khi giao cm, ngi y s t ng m ca v nh "g-mn" thng vo trong t lnh. Trong cch ny Event GiaoCm c handled bng EventHandler Sub OpenDoorPutIntoFridge, do ngi giao cm x l, ch khng phi chnh bn. Nh th, l Subscriber (ngi n cm thng giao tn nh) bn register EventHandler "Sub OpenDoorPutIntoFridge" vi ngi giao cm qua vic a cha kha. Khi Event "GiaoCm" xy ra, ngi giao cm t ng executes Sub OpenDoorPutIntoFridge. K

  • 21

    thut giao AddressOf Sub cho mt Object khc n execute khi cn cn c tn l CallBack.

    Do , ngay c trong lc runtime (khng phi khi design), Register EventHandler Sub MenuItem4_Click vi system handle Event Click ca MenuItem4 ta c th execute code: AddHandler MenuItem4.Click, AddressOf MenuItem4_Click Lu cch ta dng control ToolTip1 register Tooltip Text vi Listbox1. Ta c th dng ch mt control ToopTip1 register nhiu Tooltip Texts vi nhng controls khc nhau nh TextBox, ComboBox .v.v.. Bn c th thay th hng: AppPath = VB6.Left(AppPath, Pos) bng AppPath = AppPath.SubString(0,Pos) Trong VB6, Visual components ca mt form c cha di dng Text din t cc controls rt d c ngay u form file, nhng n khng phi l VB6 code. Trong .NET, Visual components ca mt form c cha di dng code tht s. Tc l, nu khng c VS.NET ta c th dng Notepad vit code nh th v sau khi compile, n vn chy y ht nh trong trng hp ta dng VS.NET. im ny ging nh trong Java, ta c th vit code bng Notepad v dng Command line compile v link code file vi cc components khc. Th d nh khi ta vit mt VB.NET program n gin chy trn trong DOS Console, ta c th compile n nh sau: vbc /t:exe /r:system.dll mysource.vb vbc l VisualBasic Compiler, /t: c ngha target tc l EXE chy trong DOS console. /r: c ngha reference n DLL. Nu mun chy trong Windows, ta dng: vbc /t:winexe /r:system.dll /r:system.windows.forms.dll mysource.vb Bnh thng generated code c du trong Region khi chon ch, hay khu gi chng ta sa i. Click du + bn l tri m mt Region hay Sub/Function. Click du - ng li. i khi ta cng c th Edit generated code, nhng bn nh backup code trc, ri form khng th hin th v b error, ch cho ta mt trang giy trng, th ta cn c ng restore.

  • 22

    Mi class u c t nht mt Sub New, gi l Constructor (ging nh Class_Initialize ca VB6 class) v Sub Dispose, gi l Destructor. l hai Sub dng to ra v ph hy Object. V Form1 tha k t Standard Form nn trong Sub New trc ht phi gi constructor MyBase.New() ca cha n, v trong Sub Dispose sau ht phi gi destructor MyBase.Dispose ca cha n. M Class View Window

    Bn c th Navigate trong Code qua Class View. DoubleClick ln tn ca Object hay Sub/Function trong Class View mang cursor n code ca n trong trang Edit.

  • 23

    Biu din DragDrop

    Code ca DragDrop, lu ta phi vit thm Sub ListBox2_DragEnter handle Event DragEnter.

    Private Sub ListBox1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles ListBox1.MouseDown ' Start the DragDrop process Dim ItemIndex As Integer ' Identify the Listbox item that has mousedown using mouse coordinates ItemIndex = ListBox1.IndexFromPoint(New System.Drawing.Point(e.X, e.Y)) ' Start the DragDrop process passing along the ListboxItem as ListBox1.Items(ItemIndex) ListBox1.DoDragDrop(ListBox1.Items(ItemIndex), DragDropEffects.Copy Or DragDropEffects.Move) End Sub Private Sub ListBox2_DragEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles ListBox2.DragEnter ' Apply the copy effect ' AND remember to set the property Allow Drop of Listbox2 to TRUE If (e.Data.GetDataPresent(DataFormats.Text)) Then e.Effect = DragDropEffects.Copy Else e.Effect = DragDropEffects.None End If End Sub Private Sub ListBox2_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles ListBox2.DragDrop Dim LItem As String ' Obtain the Source ListItem String LItem = e.Data.GetData(DataFormats.Text).ToString ' Add it to Listbox2

  • 24

    ListBox2.Items.Add(LItem) ' Remove the Item from Listbox1 ListBox1.Items.RemoveAt(ListBox1.FindString(LItem)) End Sub

    Khi Load data vo Listbox ta dng StreamReader Open mt File as Input. Khi Save data ca Listbox vo mt Text file ta dng StreamWriter Open mt File as Output (hay Append nu ta cho thm Option Append=True):

    Private Sub MenuItem2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem2.Click ' Read the list of animals from a text file into Listbox2 Dim sr As StreamReader Dim Pos As Integer Dim TStr As String ListBox2.Items.Clear() ' Clear Listbox2 ' Use a StreamReader to open the UTF-8 file to read. sr = New StreamReader(AppPath & "animals.txt") ' Read each line in the file. ' When the end of the file is reached, return the value "-1". Dim x As String While sr.Peek -1 x = sr.ReadLine() ' Read a line ListBox2.Items.Add(x) ' Add it to Listbox2 End While sr.Close() ' Close the file End Sub Private Sub SaveAnimalList() ' Save the content of Listbox2 into a UTF-8 Text file Dim i As Integer Dim sw As StreamWriter ' Open the file to write in UTF-8 mode, using a StreamWriter. sw = New StreamWriter(AppPath & "Animals.txt") ' Write each line in the Listbox. For i = 0 To ListBox2.Items.Count - 1 sw.WriteLine(ListBox2.Items(i)) Next sw.Close() ' Close the file End Sub

    Ta hin th ngy v gi bng cch dng Timer1 v Shared Function DateTime.Now formated bng hai Functions c sn ToLongDateString v ToLongTimeString.

    Private Sub Timer1_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Timer1.Tick ' Display Date and Time every half a second Label3.Text = DateTime.Now.ToLongDateString & " " & DateTime.Now.ToLongTimeString End Sub

    Bn cng c th hin th ngy gi trong format khc bng cch vit:

    Label3.Text = DateTime.Now.ToString("ddd dd/MM/yyyy hh:mm:ss")

    c: WED 18/07/2001 09:16:42

    trong Format string ta dng MM cho Month v mm cho Minute

    Bi 3

  • 25

    Xin co li: rt tic l server chng ti khng cho php cha cc files MP3 nn chng ti s tm cch khc cho c gi download sau. Nu cc bn c kin hay v cch

    cho download cc MP3 files ny th xin lin lc vi webmaster. Thu m bi ging (MP3) download size

    Week 3.1 Week 3.2 Week 3.3 Week 3.4 Week 3.5 Week 3.6 Week 3.7 Week 3.8 Week 3.9 Week 3.10

    1.2 mb 1.2 mb 1.2 mb 1.2 mb 1.2 mb 1.2 mb 1.2 mb 1.2 mb 1.0 mb 0.8 mb

    Nhng khc bit gia VB.NET vi VB6 V B.NET, cn gi l VB7, chng qua l C# vit theo li Visual Basic. Nay VB7 hon ton l Object Oriented, tc l cho ta dng li (reuse) classes/forms theo cch tha k tht thoi mi, nn n khc VB6 nhiu lm.

    Du vy, i vi VB6 programmers hc VB.NET khng kh. L do l VB.NET khng cho thm nhiu t mi (reserved words). Ni chung cc nim mi trong VB.NET u d lnh hi, nht l khi em ra p dng cch thc t. l nh Microsoft vn gi nguyn tc du v lm sn (ca VB6) nhng g rc ri pha sau sn khu, ta c th tp trung vo vic tm kim mt gii php, thay v qu bn tm vo cch thc lm mt vic g. Chnh nguyn tc y gip Microsoft chiu m c 3 triu VB6 programmers trn khp th gii. VB.NET cng hin cho VB programmers mt cng c rt hu hiu dng cho mi hon cnh, t database, desktop, distributed, internet cho n real-time hay mobile (pocket PC). Nhng u im (features) ca VB.NET n t chc nng ca .NET Framework. N mang n phng tin lp trnh cho mng cch Object Oriented nh XML, Remoting, Streaming, Serialisation, Threading .v.v... Nhng th ny tuy l nhng khng kh hc, ngc li s tit kim rt nhiu th gi. Mc du VB6 l mt ngn ng lp trnh trng thnh v hiu nng, chc chn hy cn tn ti trong nhiu nm na, nhng hc thm VB.NET l mt u t tng i t tn km v m bo hu li gp bao nhiu ln trong hng thp nin ti. Trong bi ny ta s bn v nhng im khc nhau gia VB6 v VB.NET t quan im ngn ng lp trnh. Trong mt bi khc ta s bn v nhng chc nng i tng (Object Oriented) ca VB.NET. Namespaces

    Namespaces l mt cch t tn gip sp t cc Classes ta dng trong program mt cch th t hu d tm kim chng. Tt c code trong .NET, vit bng VB.NET, C# hay ngn ng no khc, u c cha trong mt namespace. im ny cng p dng cho code trong .NET system class libraries. Chng hn, cc classes ca WinForms u nm trong System.Windows.Forms namespace. V cc classes dng cho collections nh Queue, Stack, Hashtable .v.v.. u nm trong System.Collections namespace. Tt c code ta vit trong program ca mnh cng u nm trong cc namespaces. Trc y trong VB6, mi khi nhc n mt Class trong mt COM tn CompName ta vit CompName.classname (cn gi l PROGID) , tc l cng dng mt dng namespace. Tuy nhin phng php ny c mt vi gii hn:

    a ch ca class b buc cng vo component ang cha n. Nhng classes khng nm trong mt COM component th khng c "namespace".

  • 26

    Cch gi tn PROGID ch c mt bc thi, khng c bc con, bc chu. Tn ca Component lun lun c hiu lc trn khp c computer.

    Namespaces trong .NET khc phc c mi gii hn ni trn trong VB6. Nhiu assemblies c th nm trong cng mt namespace, ngha l classes tuyn b trong cc components khc nhau c th c chung mt namespace. iu ny cng p dng xuyn qua cc ngn ng, gip cho mt class vit trong VB.NET c th nm trong cng mt namespace vi mt class vit trong C#, chng hn. Hn na, trong mt assembly c th c nhiu namespaces, d rng thng thng ta ch dng mt namespace duy nht cho tt c cc classes trong y.

    Nh l mt assembly trong .NET th i khi tng ng vi mt COM component. Tt c code trong .NET u nm trong nhng assemblies.

    By default, tn ca project c dng lm namespace. Nu bn right click ln project name NETListbox trong Solution Explorer ca program Demo, ri chn Properties trong popup menu, IDE s hin th Property Pages dialog nh di y:

    Bn thy Root namespace ca project l NETListbox. Bn c th thay i tn namespace y nu bn mun. Namespaces c th c phn chia th bc ging nh Folders trong mt File Directory. N s gip user sp t cc classes theo ng nhm cho trong sng v d c. Th d bn ang vit mt program cho mt hng sn xut, bn s dng namespace NhSnXut root level. Bn trong namespace y bn s to thm cc nhnh ca chng trnh nh:

    NhSnXut.TnKho NhSnXut.SnPhm NhSnXut.KTon.ChiPh NhSnXut.KTon.ThuNhp

    Nh th ta nh ngha mt base namespace tn NhSnXut, vi nhng namespaces con, chu bn trong, mi namespace c cha classes, modules, enums, structures v cc

  • 27

    namespaces khc. Mi namespace cha nhng phn ca code thch hp cho n trong program ni chung. Trong File Directory, ta c th c hai files d mang cng tn nhng nm trong hai folders khc nhau. Ging nh vy, trong .NET ta c th c hai classes c cng mt tn nhng nm trong hai namespaces khc nhau. l v khi ta vit tn ca mt class vi c namespace ca n th c th phn bit vi mt class khc vi cng tn.

    Local v Global Namespaces

    Khc vi COM components vi "namespace" ca chng p dng cho khp c computer, namespaces ca .NET thng thng l Local, ch c application program ca n thy m thi. .NET cng h tr Global namespace, nhng phi c k tn (digitally signed) v ng k vi .NET runtime cha n trong global assembly cache. Cng vic lm mt namespace Global rc ri nh th gim thiu trng hp ta tr v tnh trng DLL hell trc y.

    Dng Namespaces

    Ta c th dng namespaces bng cch ni thng ra (explicitly) vi nguyn tn (Direct Addressing) hay hm (implicitly) vi Import keyword. Nhng iu tin quyt l ta phi reference ci assembly cha namespace m ta mun dng. Ta thc hin vic y vi Menu command Project | Add References. Khi Add References dialog hin ra, chn Tab .NET cho standard .NET components hay Tab Projects cho DLL ca mt .NET project khc , highlight DLL bn mun ri click Select button, on click OK.

    Chng hn ta mun read v write t stdio (ci console input/output stream). Ci namespace ta cn s l System.Console. Trong cch Direct Addressing ta s code nh sau vit hng ch "Cho th gii":

    System.Console.WriteLine ("Hello world!")

    Nu ta dng Import keyword bng cch nht vo cu Imports System.Console u code module, ta c th code gn hn:

  • 28

    WriteLine ("Hello world!")

    Di y l mt s namespaces thng dng:

    Namespace Chc nng Classes in hnh

    System.IO c/Vit files v cc data streams khc FileStream, Path, StreamReader, StreamWriter

    System.Drawing ha Bitmap, Brush, Pen Color, Font, Graphics

    System.Data Qun l data DataSet, DataTable, DataRow, SQLConnection, ADOConnection

    System.Collection To v qun l cc loi collections ArrayList, BitArray, Queue, Stack, HashTable

    System.Math Tnh ton Sqrt, Cos, Log, Min

    System.Diagnostics Debug Debug, Trace

    System.XML Lm vic vi XML, Document Object Model XMLDocument, XMLElement, XMLReader, XMLWriter

    System.Security Cho php kim sot an ninh Cryptography, Permission, Policy

    Aliasing Namespaces (dng b danh)

    Khi hai namespaces trng tn, ta phi dng nguyn tn (k c gc tch) phn bit chng. in hnh l khi ta dng nhng namespaces lin h n VB6 nh Microsoft.Visualbasic. Thay v code:

    Microsoft.Visualbasic.Left ( InputString,6)

    ta tuyn b:

    Imports VB6= Microsoft.Visualbasic

    Sau ta c th code:

    VB6.Left ( InputString,6)

    Dng Namespaces keyword

    Trong th d v program c Root Namespace l NhSnXut nh ni trn, nu ta mun t ra mt namespace con l TnKho, ta phi dng NameSpace keyword trong code nh sau:

    ' Root Namespace l NhSnXutNamespace TnKho Class PhngLnh ' Code cho Phng Lnh End Class End Namespace

    By gi mun ni n class PhngLnh bn trong namespace TnKho ta s code nh sau: NhSnXut.TnKho.PhngLnh

  • 29

    Thay i trong Data Types Tt c u l Object

    Mt thay i ln cho Data Type ca VB.NET, l nhng variables dng Data Type a phng nh Integer, Single, Boolean,.v.v.. u l nhng Objects. Chng u c derived (xut pht) t Class cn bn nht tn Object trong VB.NET. Nu bn th dng Intellisense xem c bao nhiu Functions/Properties mt Object loi Integer c, bn s thy nh di y:

    Trong .NET, Integer c bn loi: Byte (8 bits, khng c du, tc l t 0 n 255), Short (16 bits, c du cng tr, tc l t -32768 n 32767), Integer (32 bits, c du) v Long (64 bits, c du). Nh vy Integer by gi tng ng vi Long trong VB6, v Long by gi ln gp i trong VB6.

    Floating-Point Division (Chia s ni)

    Vic chia s ni (Single, Double) trong VB.NET c lm theo ng tiu chun ca IEEE. Do nu ta vit code nh sau:

    Dim dValueA As Double Dim dValueB As Double dValueA = 1 dValueB = 0 Console.WriteLine(dValueA / dValueB)

    Trong VB6 ta bit mnh s gp Division by Zero error, nhng y program s vit trong Output Window ch Infinity (v cc). Tng t nh vy, nu ta vit code:

    Dim dValueA As Double Dim dValueB As Double dValueA = 0 dValueB = 0 Console.WriteLine(dValueA / dValueB)

    Kt qu s l ch NaN (Not a Number) hin th trong Output Window.

    Thay th Currency bng Decimal

    VB.NET dng Decimal data type vi 128 bits thay th Currency data type trong VB6. N c th biu din mt s ti 28 digits nm bn phi du chm cho tht chnh xc. H cng nhiu digits nm bn phi du chm th tm tr s ca Decimal cng nh hn.

    Char Type

    VB.NET c c Byte ln Char data type. Byte c dng cho mt s nh 0-255, c th cha mt ASCII character trong dng con s.

  • 30

    Char c dng cha mt Unicode (16 bit) character. Char l mt character ca String.

    String Type

    Nhn lt qua, String trong VB.NET khng c v khc VB6 bao nhiu. Nhng tr khi ta mun tip tc dng cc Functions nh InStr, Left, Mid and Right trong VB6, ta nn xem String l mt object v dng nhng Properties/Functions ca n trong VB.NET cho tin hn. Sau ny ta s hc thm v String ca VB.NET trong mt bi ring. nim fixed-length (c chiu di nht nh) String trong VB6 khng cn dng na. Do ta khng th declare:

    Dim myString As String * 25

    Object thay th Variant

    Mt trong nhng data types linh ng, hiu nng v nguy him trong VB6 l Variant. Mt variable thuc data type Variant c th cha gn nh th g cng c (tr fixed-length string), n t ng thch nghi bn trong cha tr s mi. Ci gi phi tr cho s linh ng y l program chy chm v d c bugs to ra bi s bin i t data loi ny qua loi khc khng theo d tnh ca ta. VB.NET thay th Variant bng Object. V trn phng din k thut tt c data types trong .NET u l Object nn, ging nh Variant, Object c th cha th. Ni chung, du Object ging nh Variant, nhng trong .NET ta phi ni r ra (explicitly) mnh mun lm g. Ta th xem mt th d code trong VB6 nh sau:

    Private Sub Button1_Click() Dim X1 As Variant Dim X2 As Variant X1 = "24.7" X2 = 5 Debug.Print X1 + X2 ' Cng hai s vi operator + Debug.Print X1 & X2 ' Ghp hai strings li vi operator &End Sub

    Kt qu hin th trong Immediate Window l :

    29.7 24.75

    Trong VB.NET, ta phi code cho r rng hn nh sau c cng kt qu nh trn hin th trong Output Window:

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim X1 As Object Dim X2 As Object X1 = "24.7" X2 = 5 Console.WriteLine(CSng(X1) + CInt(X2)) Console.WriteLine(CStr(X1) & CStr(X2)) End Sub

    CType Statement

    Trong VB.NET c Option Strict by default. N bt ta phi thn trng trong cch dng data types. V Object c th cha bt c th g, khi ta mun dng n nh mt loi data type hay class no, ta phi i Object ra th y bng CType, th d:

  • 31

    Class Product Public Description As String End Class Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim X As Object X = New Product() ' Treat X like an actual product CType(X, Product).Description = "Soft Drink" Console.WriteLine(CType(X, Product).Description) End Sub

    Mc d X c instantiated nh mt Product, n vn c xem nh mt Object variable. Do mi khi mun dng n nh mt Product ta phi nh n CType. T chuyn mn trong programming gi l Type Casting.

    Thay i trong cch tuyn b Variables Tuyn b nhiu Variables

    Trong VB6 ta c th Declare nhiu variables trn cng mt hng nh:

    Dim i, j, k As Integer

    Kt qu l ch c k l Integer, cn i v j l Variant (c th l iu bn khng ng). Trong VB.NET th c ba i,j v k u l Integer, v nh th hp l hn.

    Tuyn b tr s khi u

    Trong VB6, sau khi declare variable ta thng cho n mt tr s khi u nh:

    Dim X As Integer X = 12

    By gi trong VB.NET ta c th gp chung hai statements trn li nh sau:

    Dim X As Integer = 12

    Tuyn b Constants

    Khi tuyn b Constants trong VB.NET ta phi khai r Data type ca n l String, Integer, Boolean ..v.v.:

    Public Const myConstantString As String = "happy" Public Const maxStudent As Integer = 30

    Dim As New

    Trong VB6 ta c khuyn khng nn code:

    Dim X As New Customer

    v VB6 khng instantiate mt Object Customer cho n khi X c dng n - chuyn ny rt nguy him v c th to ra bug m ta khng ng. Trong VB.NET ta c th yn tm code:

  • 32

    Dim X As New Customer()

    v statement ni trn lp tc to ra mt Object Customer.

    Tuyn b Variable trong Scope ca Block

    Trong th d di y, variable X c declared trong mt IF ..THEN...END IF block. Khi execution ra khi IF block y, X s b hy dit. Do , VB.NET s than phin l X undefined v n khng thy X bn ngoi IF block. Lut ny cng p dng cho nhng Blocks khc nh DO...LOOP, WHILE...END WHILE, FOR...NEXT, .v.v..

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim A As Integer = 5 Dim B As Integer = 5 If A = B Then Dim X As Integer ' X is declared in this IF block X = 12 End If A = X ' X has been destroyed, so it is undefined here End Sub

    C l bn hi Declare Variable trong FOR...LOOP c li g, ti sao ta khng Declare mt ln duy nht u? Th nht l Block gii hn scope (phm vi hot ng) ca mt variable n khng ng chm ai d gy nn bug, th hai l trng hp in hnh ta s cn feature ny l trong mt FOR...LOOP, c mi iteration ta mun instantiate mt Object mi. Khi y ta cn Declare mt Object variable, instantiate Object , ri cha n vo mt collection chng hn.

    Truy cp Variable/Class/Structure

    Trong VB.NET ta c th quyt nh gii hn vic truy cp mt Variable, Class, Structure .v.v. bng cch dng cc keywords sau:

    Loi truy cp Th d Ch thch

    Public Public Class ClassForEverybody Cho php u cng dng n c. Ta ch c th dng Public mc Module, Namespace hay File. Tc l ta khng th dng Public trong mt Sub/Function.

    Protected Protected Class ClassForMyHeirs Cho php cc classes con, chu c dng. Ta ch c th dng Protected mc Class.

    Friend Friend StringForThisProject As String

    Cho php code trong cng mt Project c dng.

    Private Private NumberForMeOnly As Integer

    Cho php code trong cng module, class, hay structure c dng. Lu l Dim coi nh tng ng vi Private, do ta nn dng Private cho d c.

    Ngoi ra, nh l nu container (Object cha) ca mt Variable/Class/Structure l Private th d ta c tuyn b mt Variable/Class/Structure nm bn trong container l Public ta cng khng thy n t bn ngoi.

    Thay i trong Array Array index t 0

  • 33

    Trong VB.NET khng c Option Base v mi Array u c index bt u t 0. Khi bn tuyn b mt array nh:

    Dim myArray(10) As Integer

    Kt qu l mt array c 11 elements v index t 0 n 10. UBound ca array ny l 10 v LBound ca tt c arrays trong VB.NET u l 0.

    Tuyn b Array vi nhng tr s khi u

    Bn c th tuyn b Array vi nhng tr s khi u nh sau:

    Dim myArray() As Integer = { 1, 5, 8, 16 } ' Note the curly brackets

    Statement lm hai chuyn: quyt nh size ca array v cho cc elements tr s khi u. dng feature ny, bn khng c ni r size ca array, m cho program t tnh.

    ReDim Preserve

    Trong VB.NET bn cng c th tip tc dng Preserve keyword gi nguyn tr s ca cc elements trong mt array khi bn ReDim n. Tuy nhin c mt gii hn cho array vi hn mt dimension - bn ch c th resize dimention cui (bn phi) , nn nhng hng code sau y hp l:

    Dim myArray(,) As String ReDim myArray(5, 5) ReDim Preserve myArray(5, 8)

    Thay i trong User-Defined Type nim User-Defined Type (UDT) rt tin cho ta gom cc mnh data lin h li thnh mt data type c cu trc. Trong VB6 ta dng n nh sau:

    Public Type UStudent FullName As String Age As Integer End Type

    VB.NET cng gi y c tnh ca UDT nhng thay i ch Type thnh Structure:

    Public Structure UStudent Public FullName As String Public Age As Integer End Structure

    Lu cc Structure Members (nh FullName , Age ) cn phi c Declared vi keyword Dim, Public, Private hay Friend, nhng khng th dng Protected v Structure khng th Inherit t mt Structure khc. S d, c dng Private l v bn trong Structure c th c Property, Sub/Function .v.v..

    Thay i trong Collections VB6 h tr Collection v sau ny Windows Scripting Host Library cho ta collection kiu Dictionary. VB.NET cho ta mt thnh phn collection rt hng hu trong Namespace System.Collections. V Collection l mt trong nhng cng c rt thng dng v hiu nng trong VB.NET nn ta s c mt bi dnh ring cho collection sau ny. Di y l danh sch cc collections ta s dng thng xuyn:

  • 34

    Collection Chc nng

    ArrayList Dynamic Array t ng ln ln khi elements c b vo.

    BitArray Array cha tr s Boolean (True/False).

    HashTable Collection cha nhng cp key-value data, cho ta dng lm t in.

    Queue Cha mt FIFO (First In, First Out) structure. Element c th l bt c Object loi no.

    Stack Cha mt LIFO (Last In, First Out) structure.

    SortedList Cha mt danh sch nhng cp key-value data c sp theo th t.

    Arithmetic Operators mi VB.NET cho ta thm cch vit Arithmetic Operator mi m C programmers rt thch t lu nay.

    X += 4 tng ng vi X = X + 4 Mess &= " text" tng ng vi Mess = Mess & " text"

    Arithmetic Operation Trong VB6 Cch vit tc mi

    Cng X = X +5 X += 5

    Tr X = X - 10 X -= 10

    Nhn X = X * 7 X *= 7

    Chia X = X / 19 X /= 19

    Chia Integer X = X \ 13 X \= 13

    Ly tha X = X ^ 3 X ^= 3

    Ghp Strings X = X & "more text" X &= "more text"

    Ta vn c th tip tc dng cch vit trong VB6, nhng by gi c thm mt cch vit gn hn.

    Short Circuit trong IF..THEN Statement Trong VB6, nu ta vit:

    Dim myInt As Integer myInt = 0 If (myInt 0) And (17 \ myInt < 5 ) Then

    Th s b Division by Zero error, v mc du phn (myInt 0) l False, nhng VB6 vn tip tc tnh phn (17 \ myInt < 5 ), v to ra error v 17 chia cho mt s 0. Trong vi ngn ng lp trnh khc, khi (myInt 0) l False th n khng tnh thm na, tc l n ni rng khi mt phn ca AND l False th nht nh kt qu ca Logical Statement trong IF phi l False. c tnh ny gi l Short-Circuit (i tc). Nu ta dng code ni trn trong VB.NET, n vn cho Division by Zero error ging nh VB6. Tuy nhin, nu ta mun dng c tnh Short-Circuit th ta ch cn thay th ch And bng AndAlso nh sau:

    Dim myInt As Integer myInt = 0 If (myInt 0) AndAlso (17 \ myInt < 5 ) Then

  • 35

    Short-Circuit cng p dng cho Logical OR khi ta thay th ch Or bng OrElse ni rng khi phn u ca OR l True th nht nh kt qu ca Logical Statement trong IF phi l True.

    Khng cn Set statement cho Object Trong VB6 ta c th vit:

    Set x = New Product Set w = x

    Trong VB.NET s c vit li nh sau:

    x = New Product() w = x

    By gi ta khng cn phi nh dng ch Set khi ni n Object.

    Thay i trong cch vit Property routines Dng mt Property duy nht

    Nu trong VB6 ta vit:

    Private mdescription as String Public Property Let Description (Value As String) mdescription = Value End Property Public Property Get Description() As String Description = mdescription End Property

    Trong VB.NET Let v Get uc hp li trong mt Property routine duy nht v ta li dng ch Set thay cho ch Let (mc du ch Set khng cn dng cho Object nh mi ni trn) nh sau:

    Private mdescription As String Public Property Description() As String Set (ByVal Value As String) mdescription = Value End Set Get Description = mdescription End Get End Property

    ReadOnly v WriteOnly property

    By gi nu Property l ReadOnly ta s vit:

    Public ReadOnly Property Age() As Integer Get Age = 3 End Get End Property

    hay WriteOnly ta s vit:

  • 36

    Private _data As Integer Public WriteOnly Property Data() As Integer Set (ByVal Value As Integer) _data = Value End Set End Property

    Default Properties

    Ta dng Default keyword to ra Default Property nh sau:

    Default Public Property Item(ByVal Index As Integer) As String

    VB.NET bt buc ta phi t nht mt parameter cho Default Property.

    Dng Reserved Word lm Procedure Name Trong VB.NET ta c th dng Reserved Word lm Procedure Name bng cch n gia ngoc vung. Gi t ta mun dng ch Compare lm tn mt Function, ta s vit nh sau:

    Public Function [Compare] (ByVal v1 As Integer, ByVal v2 As Integer) As Boolean

    Structured Error Handling TRY...CATCH...FINALLY

    VB.NET cho ta Structure TRY...CATCH...FINALLY...END TRY x l error. Th d nh trong bi ton chia di y, nu b Division by 0 error th ta s cho kt qu bng 0. D c error hay khng, program vn hin th kt qu trong Output Window qua statement Console.WriteLine( result) trong phn Finally:

    Try result = a / b ' if this section has error jump to Catch section Catch ' only get here if an error occurs between Try and Catch result = 0 Finally ' This section is optional, but is always executed whether there is an error or not Console.WriteLine( result) End Try

    Nu ta khng code g phn Catch th c ngha l chng ta c Handle Error nhng li khng lm g ht, do Program s khng t. Ngc li, nu ta khng dng Try..Catch, th program s t. Nu mun nhy ra khi Try Structure bt c lc no ta c th dng Exit Try,

    Nhng cch CATCH error

    Ta c th dng Catch ging nh Select Case c mt cch x l cho mi error:

    Try ' Main code goes here Catch When Err.Number=5 ' handle Error 5 Catch ' handle other errors End Try

    Ta c th Catch Error Exception data trong mt variable dng n nh sau:

  • 37

    Catch e as Exception MessageBox.Show (e.ToString)

    Hai cch code trn c th c gp li thnh:

    Catch e As Exception When Err.Number = 5

    Thay i trong cch vit Sub/Function Dng du ngoc khi gi Procedure

    Trong VB6, nu khng dng keyword Call ta khng dng du ngoc khi gi Sub. Trong VB.NET ta lun lun dng cp du ngoc, ngay c khi khng c parameter. Th d:

    ProcessData() x = New Customer()

    ByVal l Default cho mi Parameters

    Trong VB6, ByRef l default cho cc parameters passed v Sub/Function. Tc l, Sub/Function c th v tnh lm thay thi tr s nguyn thy ca parameter variables. Trong VB.NET, ByVal l default cho cc parameters passed v Sub/Function. Do , n s trnh li lm ni trn.

    Optional Parameter cn c tr s Default

    Trong VB6 ta c th dng IsMissing bit xem Optional parameter c hin din khng. VB.NET b IsMissing v bt buc ta phi cung cp tr s Default cho Optional parameter trong phn procedure declaration ging nh sau y :

    Public Sub VerifyInput (Optional ByVal InputData As String="")

    trong th d ny ta cho Default value ca Optional parameter InputData l Empty string.

    Return Statement

    Hy xem mt th d dng Function return mt Customer Object trong VB6:

    Public Function GetCustomer (ByVal CustID As Long) As Customer Dim objCust As Customer Set objCust = New Customer objCust.Load CustID Set GetCustomer = objCust End Function

    Trong VB.NET ta c th dng Return Statement Return kt qu ca mt Function thay v dng chnh tn ca Function.

    Public Function GetCustomer (ByVal CustID As Long) As Customer Dim objCust As New Customer(CustID) Return objCust End Function

    Delegate

    Delegate l mt cch gip ta pass mt procedure nh mt parameter vo trong mt method. nim ny c gi l Function Pointer hay Callback. Mt trng hp c in ta dng Delegate l cung cp mt dataArray sort vi mt Function so snh mi hai items trong array.

  • 38

    Trong VB.NET ta dng AddressOf operator pass mt procedure. Ta declare mt Delegate bng cch ni n l mt procedure di dng no, c bao nhiu parameters, mi parameter thuc loi data type no. Th d:

    Delegate Function IsGreater (ByVal v1 As Integer, ByVal v2 As Integer) as Boolean

    Khi vit code ta c yn tm s c cung cp mt Function c dng y v i khi code nh sau:

    Public Sub DoSort (ByRef DataArray() As Integer, Greater As IsGreater) Dim outer As Integer Dim inner As Integer Dim temp As Integer For outer = 0 To UBound(DataArray) For inner = outer + 1 To UBound(DataArray) If GreaterThan.Invoke( DataArray(outer), DataArray(inner)) Then temp = DataArray(outer) DataArray(outer) = DataArray(inner) DataArray(inner) = temp End If Next Next End Sub

    cch dng Method Invoke gi mt Delegate. By gi ta ch cn cung cp Delegate routine m ta ha:

    Public Function myIsGreater (ByVal v1 As Integer, ByVal v2 As Integer) as Boolean Return ( v1 > v2) End Function

    Tip theo y l cch ta dng Delegate ni trn:

    Dim myData() As Integer = { 2, 5, 8, 13, 26} DoSort (myData, AddressOf myIsGreater)

    Khi mt Subscriber registers vi mt Publisher mt routine Handle mt loi Event, ta cng dng delegate nh sau:

    AddHandler Button4.Click, AddressOf Button4_Click

    Khi mt Event Click xy ra Button4, system s execute Sub Button4_Click.

    Bi 4

    Nhng chc nng i Tng mi ca VB.NET (phn I) V B.NET khc phc nhng gii hn v i Tng (Object-Oriented) ca VB6 v mang n cho ta mt ngn ng lp trnh hon ton Object-Oriented (OO). Gn nh mi th trong VB.NET u lin h vi Object. Nu bn cn mi vi lp trnh theo hng i tng (Object Oriented Programming) th phn gii thch sau y s gip bn lm quen vi n.

    Classes v Objects, nguyn tc Abstraction

  • 39

    Theo phng php i tng, program c thit k mt phn code i din cho mt vt tng ng ngoi i. N c gi l Class. Khi lp trnh VB6 ta dng nhng controls t Toolbox nh Textbox, Label, Listbox ..v.v.. Textbox l Class ca cc Objects Text1, Text2. Cng nh Label1, Label2 l nhng Objects to ra t Class Label. Ta hay dng hai t Class v Object ln ln nhau. iu khng quan trng, min l ta bit rng Class l mt nim Tru tng (Abstraction), cn Object l mt vt thc hu. Ging nh Class CaS l mt nim tru tng, cn Object KhnhH ca Class CaS l mt ngi bng da, bng tht vi ting ht c nhiu ngi ngng m.

    Ta ni Object l mt Instance ca Class, v ta instantiate Class c mt Object. Thng thng khi ta phn tch mt vn thit k chng trnh th cc Danh t (Nouns) l nhng Classes. Gi d ta phn tch hot ng ca mt Nh Kho (warehouse). Ta c phng cha, ngn t, bi nhn hng, xe nng hng, nhn vin ..v.v., mi th u c th l mt Object nn ta s thit k mt Class cho n.

    Fields, Properties, Methods v Events, nguyn tc Encapsulation

    Class CaS din t CaS l ngi nh th no. Nh SBiHt l mt Public Variable ca Class, c gi l Field c th c c/vit trc tip. Cn Kiu tc (di, ngn, mu en, c sc nu ...), Ging ht (cao, trm, ..). l nhng Properties. Chng cng ging nh Field nhng c implemented (thi hnh) bng cch dng procedures Property Get v Property Set. Property Set c th c coded kim sot nu "Kiu tc" khng thch hp th s b loi b. Ngc li, nu "Kiu tc" thch hp v c p dng th ta s thy kt qu ngay l CaS li p thm ra. Thng thng Fields v Properties l cc Danh t (Nouns). Mt CaS c kh nng nCa, KTnLuNim, TrnhDin. Ta gi l nhng Methods m ta implemented bng Subs v Functions (th d nh Function KTnLuNim s return mt ch k). Thng thng Methods l nhng ng t (Verbs) i vi code bn trong Class th Property ging nh mt Method cn i vi Client (tc l program ang dng Class) th Property ging nh Field. i khi, nu trnh din lu, CaS cn mt ly nc. CaS s Raise Event KhtNc nhn vin trong hu trng phc v. Ta gi chung Fields, Properties, Methods v Events l nhng Class Members (Cc Thnh vin ca Class) C mt ngoi l v s khc bit gi Class v Member, l khi ta dng cc Shared Class Members ca mt Class th ta khng nht thit phi instantiate mt Object. Ta c th dng thng tn ca Class nh mt Object.

  • 40

    Ci li im ca Object Oriented Programming l ta c th gi tt c nhng c im, kh nng ca mt Class vo trong mt Unit of Code (n v m) t tc. Khi chng ta lch s yu cu th CaS nCa. Ta bit CaS ca th thu ht lng ngi, nhng ta khng cn bit lm sao CaS t n trnh nh vy. khng phi l chuyn chng ta quan tm. i vi ta Class CaS l mt Black Box, ta khng bit v khng cn bit chuyn g xy ra bn trong. Nu sau ny CaS thay i k thut n ca ht d v hay hn, iu khng nh hng g n chng ta. c tnh OO y gi l Encapsulation (Gi kn).

    Cch ta lp trnh vi Class ch khc cch ta lp trnh trc y mt cht thi. Nu trc y ta phi t lm, th by gi ta instantiate mt Object ca Class chuyn tr nhng chuyn ta mun lm, ri bo n lm cho ta. So vi ngoi i, th d bn c m mt tim photocopy. Sau mt nm bn t trng coi, cng chuyn lm n n nh v c kt qu tt. Bn mun m thm mt tim photocopy na ch khc. Trc khi i lo ch khc bn hun luyn ngh photocopy cho mt ngi lm cng trung thnh, ri giao cho ngi y lm qun l thay th bn. Ngi l mt Object ca Class QunLTimPhotoCopy. Tr li cch lp trnh, nhng cng vic bn lm hng ngy trong tim photocopy l nhng Methods. Tt c c, s sch ca tim l nhng Properties. Bn sp t mi tun phi gi ngi li qut dn tim, mi thng phi bo tr cc my photocopiers, l nhng Events. By gi bn gi tt c nhng th y li thnh Class QunLTimPhotoCopy. Ln u bn instantiate Class QunLTimPhotoCopy lm thnh ChTThng, ngi s thay th bn lm qun l tim photocopy u tin. Khi bn mun m thm tim th ba, bn s instantiate Class QunLTimPhotoCopy mt ln na lm thnh DSuHng , ngi s thay th bn lm qun l tim photocopy th nh. Khi phn chia trch nhim cc phn code thnh nhng Class, bn c th tp trung t tng vo tng Class mt, khng cn phi c nh mi th trong u khi gii quyt chuyn g. V code ca Class no ch lm vic v nh hng trong phm vi hot ng ca n, khng ng chm n ai khc. Nu c g trc trc, thng thng ta c th xc nh l li ca Class no

  • 41

    tng i d dng. C mt cu hi a rng theo phng php OO th: "Thay mt bng n cn bao nhiu programmers?". p: "Khng cn programmer no ht, bn bo n t thay bng ca n." (Li p khc: "Khng cn programmer no ht, Microsoft i tiu chun ra bng m.") Do , nu trc kia bn lp trnh t mnh lo liu cng chuyn th by gi hy giao cho cc Objects t lo cho chng. Tc l trc y, nu bn l ch in mi nm bn phi i gp la rung, th by gi bn bo cc t in phi t em np la vo trong kho cho bn. Sng khng? Ch trong th gii lp trnh OO, ta mi c th m mng nh vy.

    Inheritance (Tha K)

    Nguyn tc Encapsulation ni trn cho php ta dng nhiu Objects ca mt hay nhiu Classes mt cch an ton, tc l khng s Methods ca cc Objects gim chn ln nhau. Gi s ta mun dng li mt Class lm mt Class mi, c bit hn, th d nh ta mun lm nn mt Class CaS t Class NghS. Cch lm y gi l Inheritance (Tha k). Cng vic tha k ny c thc hin qua mt qu trnh gi l Subclassing. y ta dng li Class NghS m hon ton khng ng n Source Code (Ngun M) ca Class NghS. Nguyn tc y gi l Reusability (Dng li). Lu l nu ta dng li Source code m c sa i mt cht trong Source Code th khng th gi l Reuse c v c th vic sa i Source Code s gy ra bugs mi. Ta phi ch cn Inherit t Object Code ca mt Class cng c th mi tht s l Reuse. Ta dng Inheritance cho thm cc Class Members, tc l thm c tnh v chc nng. Th d NghS th c Property TmHn (NhyCm (Sentitive) , ThMng (Romantic),...), v Methods KTnLuNim, TrnhDin. Class CaS s gi y cc c tnh v chc nng y v thm Sub nCa, Function HtNhcYuCu, .v.v.. Tng t nh vy, ta cng c th tha k t Class NghS to ra Class HaS. Class HaS s gi y cc c tnh v chc nng ca Class NghS nhng thm Function VChnDung, Sub TrangTr. Trong th d ni trn, ngi ta gi Class NghS l Parent Class, Super Class hay Base Class. Cn Class CaS v Class HaS c gi l Child Class hay SubClass.

  • 42

    Nu ta li Inherit Class CaS to ra Class CaSTnNhc v Class CaSCNhc th trong trng hp ny CaS l Parent Class v CaSTnNhc vi CaSCNhc l Child Classes. Mi Cas l mt NghS nn ta c mi lin h "IS (L)" gia hai classes ny. N khc vi mi lin h "HAS (C)". Th d nu trong Class CaS c mt Object thuc Class uBp, th mt CaS c th cho ta mt ba n ngon nhng khng hn cho chnh CaS nu. N ging nh ngoi i CaS KhnhH mn mt u bp i khch. Ta s ni Class CaS c mi lin h HAS (C) vi Class uBp trong trng hp ny, ch khng phi Class CaS IS (L) mt Class uBp. Trong .NET ta ch c Single (n) Inheritance, tc l mt Class khng th Inherit t hai hay ba Classes khc. Ging nh ni Con tha k t Cha v Cha tha k t ngNi, khng c nhc g n M hay BNi. Mt Child Class ch c mt Parent Class, ngc li, mt Parent Class c th c nhiu Child Classes.

    Polymorphism (a dng)

    Polymorphism l kh nng dng Class Members trng tn ca Objects thuc v cc Classes khc nhau. Th d Objects KhchHng v NhnVin u c Property Name. Nu ta c th lp trnh dng Name m khng cn ni r n thuc v Object KhchHng hay NhnVin th l Polymorphism. Polymorphism th hin di nhiu hnh thc:

  • 43

    1. Late Binding (Hiu lc tr): C ngha l i n gi cht, khi execution, th code mi bit n ang lm vic vi loi Object no. Ch binding ni n "hiu lc", late binding l c hiu lc tr. iu ny c thc hin bng cch ha hn mt Object thuc Parent Class trong lc runtime ta c th giao cho code mt Object thuc Child Class. Th d ta ha vi khn gi s c mt CaS trnh din, lc m mn ta c th cung cp mt CaSTnNhc hay mt CaSCNhc.

    2. Overloading (Qu ti, c ri m cn cho thm) : Overloading cho php ta vit trong cng mt Class nhiu versions khc nhau ca Property hay Method. Chng c phn bit nh dng parameters khc data type hay con s parameters khc nhau. Th d mt version ca Sub c passed cho mt Integer Parameter, mt version khc c passed cho mt String Parameter, mt version khc li c passed cho hai parameters. Khi ta gi mt Method ca Class, n s da vo data type ca parameters ta pass v s parameters ta pass execute ng version ca Method. Mt th d v Overloading ngoi i l khi ta yu cu CaS n ca ta c php ngh CaS ht theo Karaoke, hay c Ban Nhc Sng ph ha, hay thm c mt nhm ca s khc ph ha .v.v..

    3. Overriding (Ln quyn) : Overriding p dng cho Child Class i vi Parent Class. Trong Child Class ta cung cp mt Method cng tn, cng s parameters v cng parameter data type vi mt Method trong Parent Class ( y khng nht thit phi l Cha, c th l ngNi hay nhiu i trc) dng n thay th cho Parent Class Method. Ta ni Child Class thay i behaviour (tnh tnh, cch x s) ca Parent Class. i khi ging nh c LLin trc y Ht nhc hi hc, by gi c KhnhH tha k t c nhng override Method Ht ca c v c implement mt Method Ht mi dng cho nhc tr tnh. Lc runtime, nu mt Object khng c implementation ca mt Method th CLR (Common Language Runtime) s dng Method ca Parent Class ca n. Trong th d trn v c KhnhH c mt implementation cho method Ht nn system s dng method , thay v dng method Ht ca c LLin.

    Dng OO trong VB.NET

    To mt Class mi

    Bn to mt Class mi trong VB.NET IDE bng cch dng Menu Command Project | Add Class. Dialog Add New Item s hin ra, chn Class trong s hnh cc Icons nm trong khung bn phi ca Dialog.

  • 44

    Source code ca Class mi ny s c cha trong mt VB source file vi extension vb. Trong VB.NET tt c mi VB source files u c extension .vb. System s nhn din ra loi VB file (form, class, module,.v.v..) nh c content ca file, ch khng da vo file extension. Nu bn mun t tn cho Class mi ny l TheClass chng hn, th bn c th sa tn n trong Dialog. Khi bn click button Open mt file mi s c cho thm vo trong Project v n cha hai hng code sau:

    Public Class TheClass End Class

    Bi 6

    Nhng chc nng i Tng mi ca VB.NET (phn III) Dng OO trong VB.NET

    Ngn cn Tha k

    Bnh thng (By default) class no cng c th c dng lm base class t ta tha k. Nhng i khi ta khng mun cho ai tha k t mt Class no , lm vic y ta dng keyword NotInheritable khi declare class:

    Public NotInheritable Class KhngCon

    End Class

    Khi ta dng keyword NotInheritable ri th khng class no c th dng keyword Inherits to mt subclass t class y.

    Tha k v Phm vi hot ng

  • 45

    Khi ta dng c tnh tha k to mt SubClass th class mi ny c mi methods, propertes v variables vi Access Modifier Public hay Friend ca SuperClass. Bt c th g declared l Private trong SuperClass th SubClass khng thy hay dng c.

    C mt ngoi l l New method. Cc Constructor methods cn phi c implemented (nh ngha)

    li trong mi SubClass. Mt chc na ta s bn vo chi tit v im ny.

    lm sng t vn SubClass c th dng Class Members no ca SuperClass, ta th code li Function Amount trong LineItem class bng cch khin n gi mt Private Function tn CalculateAmount tnh ra Amount thay v n tnh trc tip nh trc y:

    Public Function Amount() As Single Return CalculateAmount End Function

    Private Function CalculateAmount() As Single Return mintQuantity * msngPrice End Function

    Khi ta SubClass LineItem to ra ServiceLine class, bt c Object ServiceLine no cng tha k Function Amount v Function y c declared Public trong BaseClass LineItem. Ngc li, v Function CalculateAmount l Private nn c ServiceLine class ln bt c client code no dng mt LineItem Object u khng truy cp n c. Nh th, mc du ta gi Function Amount c, nhng n phin n gi Private Function CalculateAmount th c b tr ngi khng? Khng sao c. V Function Amount nm trong cng Class vi Private Function CalculateAmount nn n c th gi c, d rng ta gi Function Amount t ServiceLine hay client code. Th d trong client code ta c nhng hng code nh sau:

    Protected Sub BtnShowAmount_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles BtnShowAmount.Click Dim Service As ServiceLine Service = New ServiceLine() Service.Item = "Delivery" Service.Price = 50 Service.DateProvided = Now MessageBox.Show (Service.Amount.ToString, "Amount", MessageBoxButtons.OK, MessageBoxIcon.Information) End Sub

    Kt qu s c hin th trong message box, cho thy Function CalculateAmount c Function Amount gi dm cho client code d rng c client code ln ServiceLine code u khng th gi trc tip c. im ny nhc ti nh li khi cn b, c ln b con trong vn em ra ch cho ba m ti c thng xoi thm rt ngon. Bn ti li xm thy vy biu ti ln ly hai tri xoi n vn. V khng phi l ngi nh nn bn ti khng th ly uc xoi, bi Access Modifier ca thn xoi l Private trong nh ti. Nhng v ti l Public, nn bn ti c th nh ti ly dm.

    Protected Methods

    i khi Public hay Private thi cha . Nu ta declare th g Private th n hon ton gii hn trong class, ngc li nu ta declare n Public (hay Friend) th n c th c dng trong subclasses hay client code. Tuy nhin, c lc ta mun mt class member ch c th c dng trong subclasses thi, ch khng cho client code dng. Trong trng hp y ta dng keyword Protected. Th d:

    Public Class FatherClass

  • 46

    Protected DiSn As Single End Class

    Public Class SonClass Inherits FatherClass Public Function ChiaCa() As Single Return Disn End Function End Class

    y ta c BaseClass FatherClass vi Protected Field Disn. Khng c client code no c th thy Field DiSn c. Th nhng bt c SubClass no ca FatherClass cng u tha k v dng c DiSn. Trong th d trn, mt ln na SubClass c mt Public method (ChiaCa) c th return mt protected value - nhng chnh value y, DiSn, khng trc tip cho php client code dng.

    Overriding Methods

    Chng ta bit rng c tnh quan trng ca Inheritance l mt SubClass chng nhng tha k behaviours ca ParentClass m cn c th override (ln quyn) cc behaviours y na. Chng ta thy mt SubClass c th extend (thm ra) ParentClass bng cch cho thm cc methods Public, Protected v Friend. Hn na, khi dng overriding, mt SubClass c th alter (sa i) behaviours ca cc methods trong ParentClass. Bnh thng (By default), ta khng th override methods trong ParentClass tr khi cc methods y c declared vi keyword Overridable trong ParentClass. Th d:

    Public Class ClassCha Public Overridable Sub ChoHi() MessageBox.Show("Cho cc chu", "Class Cha") End Sub End Class

    Tip theo, khi to mt SubClass, nu mun ta c th override behaviour ca Sub ChoHi bng cch dng keyword Overrides nh sau:

    Public Class ClassCon Inherits ClassCha Public Overrides Sub ChoHi() MessageBox.Show("Tha cc Bc", "Class Con") End Sub End Class

    By gi ta c th vit client code nh sau:

    Private Sub BtnSubClassObject_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles BtnSubClassObject.Click Dim obj As New ClassCon() obj.ChoHi() End Sub

    Khi ta click button BtnSubClassObject program s hin th message dialog di y:

  • 47

    Virtual Methods

    Tuy nhin, hy xem trng hp ta code nh sau:

    Private Sub BtnParentClassObject_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles BtnParentClassObject.Click Dim obj As ClassCha obj = New ClassCon() obj.ChoHi() End Sub

    Trc ht, y c v k k, ti sao declare mt variable loi ClassCha m li instantiate mt object ClassCon. Chuyn hon ton bnh thng, v ClassCon l mt ClassCha. Tc l mt variable loi ClassCha hay ClassCon u c th cha, tht ra l hold references to (point to, ch ti), mt instance ca ClassCon. im ny p dng tng qut khi ta dng Inheritance. Mt variable loi SuperClass c th hold reference to bt c SubClass Object no tha k t SuperClass y. l mt cch ta implement tnh a dng (polymorphism). u c th lm ta ngc nhin l khi ta click button BtnParentClassObject ta cng thy hin th message " Tha cc Bc".

    Sao l vy? Variable obj c declared l ClassCha ti sao message khng phi l "Cho cc chu"? L do l Sub ChoHi ca ClassCon c gi thay v Sub ChoHi ca ClassCha. Ta ni Sub ChoHi l Virtual method. Tt c methods trong VB.NET u l virtual. nim virtual ni rng ci implementation ca con chu tr nht trong dng h c dng - khng cn bit l variable c data type l class ca th h no trong dng h. Tc l, nu variable dng trong client code hold references to ClassngNi, ClassCha, ClassCon hay ClassChu th method trong ClassChu c gi. Nu trong ClassChu khng c implementation ca method th ta gi method trong ClassCon, nu khng c th gi method trong ClassCha .v.v.. theo th t t b di ln b trn. Bn c th Download source code ca program ny ti y.

  • 48

    Keyword Me

    Keyword Me c dng khi ta mun ni r (explicitly) rng ta mun dng method ca chnh ci Class ang cha code y, ch khng phi mt implementation no khc ca method y. Cng c trng hp ta phi dng keyword Me ni ta mun dng class-level variable ch khng phi procedure-level variable c cng tn. Mt procedure-level variable, tc l local variable ca mt method, c cng tn vi mt class-level variable c gi l shadowed variable. Th d:

    Public Class TheClass Private strName As String Public Sub DoSomething() Dim strName As String strName = "Quang" End Sub End Class

    y, variable strName c declared class-level v bn trong Sub DoSomething. Bn trong method y local variables (k c shadowed variables) s c dng v chng che y class-level variables tr khi ta ni r rng phi dng variable ca class-level bng cch dng keyword Me:

    Public Class TheClass Private strName As String Public Sub DoSomething() Dim strName As String strName = "Quang" ' thay i value ca local (shadowed) variable Me.strName = "Kim" ' thay i value ca class-level variable End Sub End Class

    Keyword MyBase

    Keyword Me rt tin dng khi ta mun dng Class members ca chnh Class cha code. Tng t nh vy, i khi ta mun dng Class method ca BaseClass (cng gi l SuperClass), ch khng phi mt implementation ca method y trong SubClass. Nh l mt virtual method lun lun gi implementation ca Class tr nht. T trong mt SubClass, nu mun gi mt method ca BaseClass ta dng keyword MyBase nh sau:

    Public Class ClassCon Inherits ClassCha Public Overrides Sub ChoHi() MessageBox.Show("Tha cc Bc", "Class Con") MyBase.ChoHi() End Sub End Class

    By gi nu ta chy Sub ChoHi ca ClassCon ta s c hai messages, mt ci t ClassCon theo sau bi mt ci t ClassCha. MyBase ch ni n BaseClass trc tip, tc l Class cha thi ch khng ni n Class ng ni. Khng c cch no ni n hn mt th h. Du vy, keyword Mybase c th c dng cho bt c th g c declared Public, Friend hay Protected trong ParentClass. iu ny k lun c nhng th m ParentClass tha k t cc th h trc trong gia nh, tc l ClassngNi, ClassngC .v.v..

    Keyword MyClass

  • 49

    V l do virtual method, ta s gp nhng trng hp rc ri nh khi code ca ParentClass li chy code ca SubClasses. Khi vit code ca mt class, t method ny ta thng gi nhng methods khc nm trong cng class. Th d nh:

    Public Class ClassCha Public Sub V() ChoHi() End Sub

    Public Overridable Sub ChoHi() MessageBox.Show("Cho cc chu", "Class Cha") End Sub End Class

    Trong trng hp ny, V gi Sub ChoHi n tip. l v ChoHi c declared Overridable nn rt c th mt SubClass s implement method ChoHi v ln quyn n. Th d:

    Public Class ClassCon Inherits ClassCha Public Overrides Sub ChoHi() MessageBox.Show("Tha cc Bc", "Class Con") End Sub End Class

    V c tnh virtual ca ChoHi nn ta tng ClassCha execute chnh Sub ChoHi ca n nhng t ra n li execute code ca ChoHi trong ClassCon. Trong code di y, mt Object ClassCon gi Sub V ca ClassCha:

    Private Sub BtnSubClassObject_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles BtnSubClassObject.Click Dim obj As New ClassCon() obj.V() End Sub

    Trong ClassCha, Sub V gi ChoHi ca chnh n, tuy nhin Sub ChoHi y b overridden bi implementation ca ChoHi trong ClassCon. Do , program s hin th message "Tha cc Bc". Nu ta khng mun nh vy, ta mun V execute chnh code ca ChoHi trong ClassCha th phi dng keyword MyClass nh sau:

    Public Class ClassCha Public Sub V() MyClass.ChoHi() End Sub

    Public Overridable Sub ChoHi() MessageBox.Show("Cho cc chu", "Class Cha") End Sub End Class

    y ta khng th dng keyword Me v V c gi ChoHi class-level trong ClassCha ch khng phi trong mt SubClass, nhng b overridden. Hnh di y minh ha qu trnh gi V t client code:

  • 50

    Sub V tht ra nm trong ClassCha m ClassCon tha k nn V c executed trong ClassCha v gi Sub ChoHi trong cng class ( ClassCha). Nhng v ClassCon c mt implementation ca Sub ChoHi nn n overrides ChoHi ca ClassCha.

    Overridding Method New

    Chng ta thy ta c th override methods v dng cc keywords Me, MyBase v MyClass gi cc overriden methods trong dy chuyn tha k. Tuy nhin, i vi Constructor ca class th c nhng lut l c bit dnh ring cho method New. Nhng methods New khng t ng di truyn t BaseClass xung SubClass. Mi SubClass phi c mt implementation ring cho Constructor d rng, nu mun, n c th gi vo BaseClass vi keyword MyBase:

    Public Class ClassCon Inherits ClassCha Public Sub New() MyBase.New() ' thm cc code khc initialise ti y End Sub End Class

    Khi gi Constructor ca BaseClass, ta phi gi n trc nht - nu khng s b error. Tuy nhin ta khng cn gi Constructor ca BaseClass v Constructor ca BaseClass c gi t ng. C mt lut c bit l nu tt c methods New trong BaseClass u i hi parameters th ta phi implement t nht mt method New trong SubClass v ta phi t statement MyBase.New ngay pha u. D nhin l ta c th Overload method New trong SubClass, nhng ta phi t lo liu cch gi mt method New thch hp trong BaseClass.

    To BaseClasses v Abstract Methods

    Cho n gi ta bn v virtual method vi c tnh override trong nguyn tc tha k. Trong cc th d trc y BaseClass c instantiated thnh Object lm chuyn ny, chuyn kia. Nhng i khi ta mun to mt BaseClass ch dng cho tha k m thi.

    Keyword MustInherit (Phi c Tha K)

  • 51

    Tr li ci th d v Inheritance vi Class LineItem. S d ta t ra Class LineItem l v n cha nhng th chung cho c hai classes ProductLine v ServiceLine. Ch tht ra mt Object ca Class LineItem khng cha mi c tnh lm mt vic g thc t. Nu ta mun ni r rng Class LineItem ch c dng to nhng SubClasses bng cch tha k t n, ta c th declare nh sau:

    Public MustInherit Class LineItem

    Tc l ta ch thm keyword MustInherit thi, ch khng thay i g khc. Kt qu l t nay Client code khng th instantiate mt Object t Class LineItem. Do dng code sau s b syntax error:

    Dim myObject As New LineItem()

    Thay vo , nu mun dng LineItem ta phi to SubClass t n.

    Keyword MustOverride (Phi b Ln Quyn)

    Tng t vi nim Phi-c-tha-k trong Class, ta cng c MustOverride cho mt method. C th trong BaseClass ta khai bo mt method, nhng ta i hi method y phi c mt implementation trong SubClass. Ta declare nh sau:

    Dim MustOverride Sub CalculatePrice

    l y khng c thn th ca Sub CalculatePrice hay statement End Sub g c. Khi dng MustOverride ta khng c php cung cp mt implementation cho method trong BaseClass. Mt method nh th c gi l abstract method hay pure virtual function, v n ch c phn khai bo ch khng c phn nh ngha. Nhng abstract methods phi c overridden trong bt c SubClass no ca BaseClass th mi dng c. Nu khng, ta s khng c phn implementation ca method u c v khi compile s gp syntax error.

    Abstract Base Classes

    Nu hp c hai nim MustInherit v MustOverride li ta s to ra mt abstract base class. y l mt Class ch c khai bo ch hon ton khng c implementation. Ta phi SubClass t n th mi lm vic c, th d nh:

    Public MustInherit Class ClassCha Public MustOverride Sub V() Public MustOverride Sub ChoHi() End Class

    K thut ny rt thch hp ta code ci sn hay b cc ca program ngay trong lc thit k. Class no tha k ClassCha th phi implement c Sub V ln Sub ChoHi, nu khng s b syntax error. Nhn v mt phng din, abstract base class rt ging khai bo Interface. Nu dng Interface, chng ta c th khai bo nh sau:

    Public Interface ICha Sub V() Sub ChoHi() End Interface

    Bt c class no chu implement interface ICha th phi implement c Sub V ln Sub ChoHi, nu khng s b syntax error - do , ta thy Interface rt ging mt abstract base class. S khc bit chnh gia abstract base class vi Interface l ch tha k. Khi ta to mt class con bng cch SubClass t ClassCha, chnh class con y li cng c th c SubClassed.

  • 52

    My class chu ny s t ng tha k V v ChoHi t class con. Trong khi y ni v Interface, mi class phi t implement ICha mt cch c lp v phi cung cp hai Subs V v ChoHi ca chnh n. V th, nu ta khng c nh dng li code ca cc Subs khi ta to cc classes mi th ta c th dng interface. Ngc li nu ta mun dng li code trong SubClass theo nguyn tc tha k th ta nn dng abstract base class.

    Bi 5

    Nhng chc nng i Tng mi ca VB.NET (phn II)

    Dng OO trong VB.NET

    To mt Class mi

    Class Keyword

    Trong mt .vb file ta c th vit nhiu Classes, code ca mi Class nm trong mt Class ... End Class block. Th d:

    Public Class TheClass Public Sub Greeting() MessageBox.Show("Hello world", MsgBoxStyle.Information, "TheClass") End Sub End Class

    MessageBox.Show v MsgBoxStyle.Information trong VB.NET thay th MsgBox v vbInformation trong VB6.

    Classes v Namespaces

    Nhc li l .NET dng Namespace sp t cc Classes cho th t theo nhm, loi. Namespaces c declared vi mt Block Structure ging nh sau:

    Namespace Vovisoft Public Class TheClass Public Sub Greeting() MessageBox.Show("Hello world", MsgBoxStyle.Information, "TheClass") End Sub End Class End Namespace

    Mun ni n bt c Class, Structure, hay th g c declared bn trong mt Namespace...End Namespace block ta phi dng tn Namespace trc. Th d:

    Private myObject As Vovisoft.TheClass

    Mt source file c th cha nhiu Namespaces, v bn trong mi Namespace li c th c nhiu Classes. Ngoi ra, Classes thuc v cng mt Namespace c th nm trong nhiu files khc nhau trong mt VB.NET project. Th d ta c mt source file vi code nh sau:

  • 53

    Namespace Vovisoft Public Class TheClass ' Code End Class End Namespace

    V mt source file khc trong cng project vi code:

    Namespace Vovisoft Public Class TheOtherClass ' Code End Class End Namespace

    Vy th trong Namespace Vovisoft ta c hai Classes TheClass v TheOtherClass. Nh l, by default, Root Namespace ca mt VB.NET project l tn ca project y. Khi ta dng Namespace block structure l chng ta ang thm mt tng tn vo Root Namespace. Do , trong th d trn nu tn project l MyProject th, t bn ngoi project y, ta c th declare mt variable nh sau:

    Private myObject As MyProject.Vovisoft.TheClass

    To ra Methods

    Methods trong VB.NET c hai th: Sub v Function. Function th phi return mt kt qu. By default, parameters ca Method l ByVal ch khng phi ByRef. Tc l nu mun parameter no ByRef th phi nh khai ra r rng. Nhc li l khi mt variable c passed vo trong mt method bng ByVal th system cho method mt copy (bn sao) ca variable, do , tr s ca variable khng b thay i bi cng tc ca method. Ngc li, nu mt variable c passed vo trong mt method bng ByRef th method dng chnh variable , do , tr s ca variable c th b thay i bi cng tc ca method. Ta c th gii hn vic s dng mt method bng cch p t mt Access Modifier (sa i quyn truy nhp) hay cn gi l Scoping keyword (phm vi hot ng):

    Private - ch cho php code trong cng Class c gi. Friend - ch cho php code trong cng project/component c gi. Public - cho php ai gi cng c. Protected - cho php code trong subclasses (classes con, chu) c gi. Protected Friend - cho php code trong cng project/component hay code trong

    subclasses c gi.

    To ra Properties

    Trong VB.NET ta ch dng mt routine duy nht cho mi Property, vi hai ch Get v Set nh sau (khng cn dng ch Let ca VB6 na):

    Private mdescription As String Public Property Description() As String Set (ByVal Value As String) mdescription = Value End Set Get Description = mdescription End Get End Property

    ReadOnly v WriteOnly property

  • 54

    By gi nu Property l ReadOnly ta s ly phn Set ra v vit:

    Public ReadOnly Property Age() As Integer Get Age = 3 End Get End Property

    hay WriteOnly ta s y phn Get ra v vit:

    Private _data As Integer Public WriteOnly Property Data() As Integer Set (ByVal Value As Integer) _data = Value End Set End Property

    Default Properties

    Default Property l property ca Object m program dng khi ta ch cho tn ca Object v khng ni r property no. Th d trong VB6 khi ta code:

    TextBox1 = "The house of rising sun"

    VB6 hiu rng ta mun dng Default Property text ca Textbox1 nn code y tng ng vi:

    TextBox1.text = "The house of rising sun"

    Trong VB6 khi ta dng keyword Set vi tn ca Object, th d nh:

    Dim myTextBox As Textbox Set myTextBox = TextBox1

    program s hiu l ta mun ni n chnh Object myTextBox . Nu khng th n bit ta mun ni n Object Default Property m lm bing code cho r ra. Trong VB.NET Default Property phi l mt Property array. Mt Property array l mt property c Indexed (ni n tng Item bng con s Index) ging nh mt array. L do chnh ca s bt buc ny l khi ln ln gia hai trng hp ta ni n Default property ca mt Object hay chnh Object y, v trong VB.NET ta khng cn dng Set keyword cho Object assignment na (ta ch cn dng keyword Set trong Property m thi). By gi h mun ni n Default Property ca Object th phi dng Index. Th d ni n chnh Object, ta code:

    myValue = myObject

    ni n Default Property Item 3 ca Object, ta code:

    myValue = myObject(3)

    S thay i t VB6 ny c ngha l mt property array procedure phi nhn mt parameter. Th d:

    Private theData(100) As String Default Public Property Data(ByVal Index As Integer) As String Get Data = theData(Index)

  • 55

    End Get Set(ByVal Value As String) theData(Index) = Value End Set End Property

    T nay ta khng th code:

    TextBox1 = "Good morning!"

    nh trong VB6 c na, m phi code:

    TextBox1.text = "Good morning!"

    V Property Text khng cn l Default Property ca TextBox.

    Overloading methods

    Mt trong nhng chc nng a din (Polymorphism) hng mnh nht ca VB.NET l overload (qu ti, c ri m cn cho thm) mt method. Overloading c ngha l ta c th dng cng mt tn cho nhiu methods - min l chng c danh sch cc parameters khc nhau, hoc l parameter dng data type khc nhau (td: method ny dng Integer, method kia dng String), hoc l s parameters khc nhau (td: method ny c 2 parameters, method kia c 3 parameters). Overloading khng th c thc hin ch bng cch thay i data type ca Return value ca Function. Phi c parameter list khc nhau mi c. Di y l th d ta dng Overloading code hai Functions tm data, mt ci cho String, mt ci cho Integer:

    Public Function FindData(ByVal Name As String) As ArrayList ' find data and return result End Function Friend Function FindData(ByVal Age As Integer) As ArrayList ' find data and return result End Function

    l ta c th cho mi overloading Function mt phm vi hot ng (Scope on implementation) khc nhau. Trong th d trn ta dng Access Modifier Public cho Function u v Friend cho Function sau.

    Object Lifecycle

    Object Lifecycle (cuc i ca Object) c dng ni n khi no Object bt u hin hu v khi no n khng cn na. S d ta cn bit r cuc i ca mt Object bt u v chm dt lc no l trnh dng n khi n khng hin hu, tc l cha ra i hay khut bng ri.

    New method

    Trong VB6, khi mt Object thnh hnh th Sub Class_Initialize c executed. Tng ng nh vy, trong VB.NET ta c Sub New(), gi l Constructor. VB.NET bo m Sub New() s c CLR gi khi Object c instantiated v n chy trc bt c code no trong Object. Nu Sub Class_Initialize ca mt Class Object trong VB6 khng nhn parameter th Sub New() trong VB.NET chng nhng c nhn parameters m cn cho php ta nhiu cch gi n. S khc bit trong Constructors ca VB6 v VB.NET rt quan trng. Tng tng ta c mt Khun lm bnh bng lan; khun l Class cn nhng bnh lm ra t

  • 56

    khun s l cc Objects bnh bng lan. Nu ta mun lm mt ci bnh bng lan vi mt lp s-c-la trn mt th cng tc s gm c hai bc:

    1. Dng khun (Class) nng mt ci Object bnh bng lan (dng Sub Class_Initialize) 2. ln mt bnh mt lp s-c-la (dng class Public Sub ThoaScla)

    n y, mi chuyn tng i n tha. By gi, nu khch hng mun mt ci bnh bng lan dng trng vt thay v trng g th ta chu thua thi, v khng c cch no bo Sub Class_Initialize dng trng vt thay v trng g ngay trong lc ang to dng ra Object bnh bng lan. Sub New() trong VB.NET c th nhn parameters nn n c th nhn ch th dng trng vt ngay trong lc nng ci Object bnh bng lan. Ci dng n gin nht ca Sub New() m ta c th dng l khng pass parameter no c (trong trng hp ny th ging nh Sub Class_Initialize ca VB6). Ta code Sub New() trong Class nh sau:

    Public Class BanhBongLan Public Sub New() ' Code to initialise object here End Sub End Class

    Ta instantiate mt Object bnh bng lan nh sau:

    Dim myBanhBongLan As New BanhBongLan()

    cho Users c s la chn khi instantiate Object, ta c th code thm nhng Sub New khc, mi Sub dng mt danh sch parameter khc nhau. Th d:

    Public Class BanhBongLan Public Sub New() ' Code to initialise object here End Sub Public Sub New(ByVal LoaiTrung As String) Select Case LoaiTrung Case "Vit" ' Code for TrngVt here Case "Ga" ' Code for TrngG here End Select End Sub End Class

    Dng cng mt tn method implement nhiu methods khc nhau c gi l overload. l mt trng hp a dng (polymorphism) ca OO programming. Trong th d trn nu TrngVt v TrngG l hai loi Data Types khc nhau th ta cng c th dng:

    Sub New (ByVal TrngVt As TrngVtDataType)

    instantiate bnh TrngVt v

    Sub New (ByVal TrngG As TrngGDataType)

    instantiate bnh TrngG. Nh th ta khi bn tm vi Select Case LoaiTrung khi ch dng mt Sub New duy nht vi 1

  • 57

    parameter. Trong VisualStudio.NET, khi ta dng tn ca mt overloaded method, IntelliSense s hin th hng dn ta nh vo parameter list khc nhau ty theo method ta chn.

    Termination

    Trong VB6 mt Object s b hu dit khi ci reference (ch dng n Object) cui cng b ly i. Tc l khi khng c code no khc dng Object na th Object s b t ng hu dit. System gi mt counter m s clients ang dng Object. Cch ny hay ch khi counter tr thnh 0 th Object b hu dit ngay. Ta ni n c deterministic finalization, ngha l ta bit r rng khi no Object bin mt. Tuy nhin, nu ta c hai Object dng ln nhau (gi l circular references), th ngay c n lc chng khng cn hot ng na, chng vn hin hu mi trong b nh v ci Reference counter ca c hai Objects khng bao gi tr thnh 0. Nu trng hp ny xy ra thng ln ln system khng cn memory na, ta gi l memory leak (b r b nh) . .NET dng phng php khc qun l chuyn ny. C mi chc, mt program s chy kim xem c Object no khng cn reference na hu dit. Ta gi l Garbage Collection (nht rc). Ngay c trng hp hai Objects c circular references nhng nu khng c code no khc reference mt trong hai Objects th chng cng s c hu dit. C iu, cng tc nht rc chy in the background (pha sau hu trng) vi u tin thp, khi CPU rnh rang, nn ta khng bit chc mt Object s b hy dit n bao gi mi tht s bin mt. Ta ni n c nondeterministic finalization. Ta c th p CLR nht rc lp tc bng code:

    System.GC.Collect()

    Tuy nhin, ta ch lm vic y khi kt qu thi. Tt hn, ta duyt li design ca mnh cho php cc Objects ht xi c th ngi chi trong b nh ch n lc c hy dit.

    Dng Dispose Method

    Nu ta c mt Object dng nhiu ti nguyn (resources) nh b nh, database connection, file handle,.v.v. v ta cn phi th cc ti nguyn ra ngay sau khi Object khng cn hot ng na, ta cn implement mt Interface tn IDisposable vi Implements keyword nh sau:

    Public Class TheClass Implements IDisposable

    Bn phi vit code cho Sub Dispose ging nh sau:

    Private Sub Dispose() Implements IDisposable.Dispose ' Vit clean up code y th cc ti nguyn ra End Sub