Lap Trinh Window Voi C Sharp

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 618

"_r ...

Phuong Lan «u: bien) W



Tim. hU~u ki~n tritc .NETquaC#

Tao ting d1;1Dg Windows Forms, ADO.NET, Web Service, ASP.NET

GDI+~ COM~ AsselDbly (rong.NET

I I

I

I . I

i

Phuong Lan (Chu bien) Hoang DUe Hii

LAp TRiNH WINDOWS



, .

val



,. _,? ..... --

NHA XUAT BAN LAO f>QNG - XA HQI

... ?

LOINGO

Kinh thua quy Ban doc gan xa, Ban xuAt bin MKPUB trutrc het xin bay to long biet an va niem vinh hanh trudc nhiet tlnh cua dong dao Ban doc d6i voi tu sach MKPUB trong thoi gian qua.

Kh.lu hieu cua chung tOi Ia:

* Lao dong khoa hoc nghiern tuc,

* Cha.'t hrong va ngay cang chAt luong' han. * TAt ca vi Ban doc,

RAt nhieu Ban doc da gai mail cho chung tOi d6ng g6p rihieu y kien quy bau cho tu SIkh.

Ban xuat ban MKPUB xin dliqc kinh moi quy Ban doc tham gia cung nang cao chili luong tu sach cua chung ta:

Trong qua trinh doc, xin cac Ban ghi chu lai cac sai s6t (du nho, Ian) cua cuon sach hoac cac nhan xet cua rieng Ban, Sau d6 xin giii v~ dia chi:

E-mail: mk.book@cinet.vnnews.com;mk.pub@cinet.vnnews.com Hoac gm v~: Nha sach Minh Khai

249 Nguyen Thi Minh Khai, Q.I, Tp. H& Chi Minh Neu Ban ghi chu t.ruc tiep len cuon sach, r5i gm cuon sach d6 cho chung toi thi chung toi se xin holm Iai circe phi buu dien va gm lai cho Ban cunn sach khac,

Chung toi xin giii ti.\ng m9t cuon sach cua til sach MKPUB tuy chon lua cua Ban theo m9t danh muc thich hop se duoc gai tci Ban.

Vdi muc dich ngay cang nang cao chat hrong cua tu sach MK.PUB, chung toi rat mong nhan duoc sl! hop tac cua quy Ban doc gan xa.

" MK.PUB va Ban. doc cung lam l"

MK.PUB

MVCLVC

LOI NOO 3

Ml,JC Ll,JC 5

PhAn I M{$ DAU 13

MfJ DAU 15

Chtidng 1-1: BQ khung .NET (.NET Famework) 15

1. Giai thieu nhanh v~ .NET 15

. 2. Xoa bo huy~n thoai v~ mOt may ao .net 15

3. Ngon ngii' trung gian Microsoft (MSIL) 17

4. Quan ly bO nho .NET 18

5. Ht\\ thong kiii'u dulit\\u eua·.NET 18

6. Cac d6i tugng trong ht\\ th6ng eua khung .NET 19

7. C# - mot ngon ngil' l~p trinh maio 19

8. Cac doi tuong W rna ta nhu the nao? 20

9. Tuong tac vdi the gidi COM 20

10. Windows Forms, Web Controls.va GDI+ 20

Chu'dng 1.2: BQ thttc thi ngon ngU' Mng quat 21

1. T6ng quan 21

1.1. Dan gian hoa vit\\c phat triii'n 21

1.2. Cong cu h5 trq 21

1.3. Hli trq da ngon ngif : 22

1.4. Vit\\e triii'n khai duqc thuc hien d~ han 22

1.5. SI! tach bit\\t cac phan mern 22

1.6. Tinh an toan kiii'u va sl! kiii'm tra 23

1.7. Tinh bao ~t 23

2. Quan M cua CLR vdi .NET 23

2.1.' Chi tiet v~ CLR 23

2.2. CLR vao hie thuc thi 25

2.3. Cac kiii'u du)it\\u duqc cung cap bi1i CLR. 27

2.4. Dil' Iieu va rna l$nh cua .NET 28

2.5. Ma l$nh cua COM va viec truy xuat dil' lieu 29

2.6. Cac thanh phan rna r{lng cua .NET d6i vdi C++ 32

2.7. Cac ngoai 1$ (Exception) 35

2.8. H6 trq vit\\c giJ r6i.. 36

3. Ket chuong 36

!J6

MVC LVC

ChUdng 1.3 : Ngon ngii' trung gian IL : 37

1. Lien tac (INTER·OP) .ngon ng(1 38

2. HELLO IL 39

3. Ham (FUNCTIONS) : 41

4. Lap (CLASSES) 43

5. ILDASM < 45

6. METADATA : 48

7. REFLECTION API .49

8. Ket chuang 52

Chudng 1.4 : Lam vii;c vdib';' quan Iy C++ 53

1. Cac W khoa rna rong cua C++ 54

2. Sa dung trinh bien dich C++ cho Managed C++ 55

3. Cac lap thu gom rae (Garbage Collected) 56

4. ChI dan (Directive) #using 56

5. Chuni (String) " 58

6. Tron cac rna I(\nh diroc quan Iy (Managed) va khorig diroc quan ly

(Unmanaged) 59

7. Ch6t chat (Pinning) cac rna l(\nh Managed ..

.. ..... 59

8. Cac giao tiep duoc quan Iy (Managed Interface) 60

9. Tao ra cac killu gia tri 62

10. T,:,O va sLt dung cac mo hinh uy thac (Delegate) 65

11. G9i cac DLL .NET tuy bien W rna h~.uh Managed C++ cua ban 68

12. Sa dung DLL C++ dircc quan Iy va .khong duqe quan ly trong chuong trtnh

.NET cua ban ,'., 70

13 .. Dung cac thuQc ttnh (Properties) tr~ng cac Lap cua ban 74

14. Bao dam viec sAp xep va dong gci cac cau true C++ cua ban 76

15. Ket chuang 84

Chucng 1.5 : Gi8i thii;u VISUAL STUDIO, .NET 85

1. Tich hop moi truong phat tri~n (IDE) 85

2. DI! an (Projects) 88

3. Nhieu du an trorig ffiQt Solution dan:', 88

4. Cac file phu thuoc cua du an (ProjectDependencies) 90

5. Class View . 90

6. Resource View 91

7. Macro Explorer 91

8. Trinh giup do (Helpl., 91

9. Server Explorer 93

10. Clia s6 ket xuat thong tin (Output). : 94

CHUONG 1-1: BO khung .NET

71!J

11. Tim kiem cac ky hieu Mc trung 96

12. Chi rnuc va ke't qua tim kiern 97

13. Cua s5g6 loi (Debug) 97

14. Trinh trq giup dQng (Dynamic Help) 100

15. Clia s6 Favorite . : 101

16. Chuong trinh ga loi (Debugging) 101

17. Cai dat breakpoint nang cao 102

17.1. Conditional Breakpoints 103

17.2. Hit Counts . 104

18. Lam gl khi rna chuang trinh bi tarn ngung 104

19. GAn trlnh ga loi (Debugger) vao mot tien trinh (Process) 104

20. JIT Debugging..... . 105

21. Ke't chuong 106

Phdn II: Ngon.Nga CI : 107

Chuong 2.1 : Cac vdn dE! eo' ban cua C# 109

1. H~ thong killu trong C#........................... . 110

1.1. Cac kiilu gia tr] trong lap trmh : 111

1.2. Cac kieu tham chieu 114

1.3. Bao va kh6ng bao (Box va Unbox) 116

2. Cac khai niem lap trinh.....................................117

2.1. Kh6ng gian t€m (Namespace) 117

2.2. Cac phat bieu l~nh (Statements) 120

2.3. 'I'oan tt't di~u kien ?: . 123

2.4. 'I'oan tt't (Operators i.. ..

2.5. Arrays (Mang) .

. .... 134

. 137

2.6. Struct (efiu trucr.i..; . 140

3. Lap (Class) 143

3.1. Doi tinrng (Object)........... . 145

3.2. Phuong thirc (Method) :.......................... 145

3.3. Truyen tham 80 147

3.4. Thuoc ttnh (Properties) 151

3.5. Toan tu- (Operator) 153

4. Ke'thua (Inheritance) 160

5. Da hlnh (Polymorphism) 162

6. Giao dian (Interfaces) 165

7. M6 hinh chuyen giao (Delegates) 168

8. Ke't chuang 170

Ml)C LT,JC

Chtidng 2.2 : C# nang cao 171

1. T~p hop (Collection) cua .NET 171

1.1. Stack 171

1.2. Hang doi (Queue) .. 172

1.3. Bang bam Hashtable 173

2. Danh sach lien k€t (Link List) 174

3. Attributes (dac tinh) 178

4. XML Serialization 179

5. C# hi} tro XML Serialization 180

6. K€t chirong 192

Phiin III : WINDOWS FORMS 193

Chtidng 3.1: Windows Forms 195

1. Giai thieu vii Windows Forms coo kie'n true .NET 195

2. Windows Forms va U'ng dung Hello World 196

3. Tao va sli dung cac be) xu ly su kien (Event Handler). 198

4. Dinh nghta cac ki~u duong vien (Broder Style) cho Forms 201

5. Tao va them vao trlnh dan menu 202

6. Tao va them vao cac muc chon tiit (Shortcut Menu) 204

7. Xli Iy sl,l' kien phat sinh til Menu 205

7.1. SI,I' kisn dieu khien giao dien ngirci dung cua Menultems 206

7.2. Dinh nghia Menultems la thanh phan each (Seporator) 207

7.3. Xli Iy sl! kien Select.. 209

7.4. Thi€t k€ khung Menu 212

7.5. Hien thi Menu tU phai qua trai................................................. 214

7 .6. T~iO va sil' dung cac Menu ngu canh (ContextMenu) 214

7.7. Thay the, sao chep lai va trOn cac muc cua Menu 215

7.8. Tao va them vao cac Menu con (sub-Menu) 222

8. K€t chuang 224

Chtidng 3.2 : Xii' ly giao dil,;n db hoa (GUI) 225

1. Giffi thieu ve thanh phan giao dien d6 hoa (GUI) 225

2. HOp thoai (Dialog) 225

2.1. Sil' dung cac hop thoai thong dung (Common Dialog) 226

2.2. HQP thoai Print va Print Preview 236

3. Tao hOp thoai : 244

3.1. HQP thoai Model va Modeless 244

3.2. Chuyen du Iieu giua cac thanh phan trong hQp thoai . 247

3.3. Ki~m tra hrrp l~ (Validation) 249

ClludNG 1·1: BQ khung .NET

4. Sa dung cac dieu khien 252

4.1. Checkbox va nut Radio 252

4.2.6 soan thao Edit ,. 257

4.3. ListBox ,. 257

4.4. TreeView ,. ,. 257

4.5. Bang c1i~u khien Tab 258

4.6. Quan If cac thanh phan di~u khien dQng 258

5. Kilt chuong 284

Chlidng 3.3 : Rang buoc dii' lieu 285

1. Chien hroc rang buoc dali$u............................... . 285

2. Cac ngu6n du lieu rang buoc . 285

2.1. Giao tiep IList............................................ .. 285

2.2. Cac d6i nnmg .NET cai d$t lList 286

3. Rang buoc gian don 286

4. Rang buoc du li~u gian dan 291

5. Rang buoc dali~u phirc hop . 297

6. Rang buoc thanh phan dieu khien veii Co' sci du WiU su dung ADO.NET .. 301

7. Tao ra mot khung nhin Co' sd du lieu (Databse Viewer) vO'i Visual Studio vii

ADO.NET........ . 302

8. Kilt chuong 304

Chlidng 3.4 : xay d\l'llg Ung d~ng Windows Forms (Scribble .NET) 305

1. Cac tai nguyen trong .NET 305

2. Dia phirong h6a san pharn mot each d~ dang 306

3. Cac lrip quan Iy tai nguyen cua .Net 306

3.1. TIm mot van hoa 307

4. Tao lap cac tai nguyen van ban 308

4.1. Chu6i tai nguyen van ban 309

4.2. MQt chuang trlnh mAu dira tren tai nguyen 311

4.3. Tao li;tp va stl' dung goi ket hop :......................... . 312

5. Dung Visual Studio. NET M quoc te hoa 315

6. Tai nguyen hlnh anh.................................................................. 317

7. Sil dung danh sach hinh anh........................................................ . 318

8. Phuong each li).p trlnh truy xuat den cac tai nguyen. . 323

9. El9C vii viet ti).p tin XML RESX 329

10. KElt chirong 338

Chlidng 3.5: GDI+: Giao dien d6 hoa cua .NET 339

1. Cac nguyen If Co' ban ella GDI+ 339

Ml,1C Ll,JC

2. Hoi tuong Graphics 340

3. Cac h~ tea dQ do hoa 340

4. Ve duong thiing va cac hlnh don gian 341

5. Sa dung but ve (Pen) va co ve (Brush) chuyen mau gam mau 344

6. But ve va C9 ve c6 cha't lieu 346

7. Lam trrrn cac dau milt cua dUCrng thi'lng 347

8. DUCrng cong va cac durrng do thi 349

9. D6i tuong GraphicsPath _ 357

9.1. Them van ban <Text) va cRC duong do thi khac __ _._ .. 359

10. Ky thuat Cl'it bing duo-ng duo-ng do thi va vung (Region) 360

11. Cac phep bien d6i (Transformations) _ 365

12. Sv phoi mau voi gia tri Alpha (Alpha Blending).......... 374

13. Sv phoi mau vci gia tri Alpha cho hinh anh _ 376

14. Nhung thao tac xu ly khac trong khorig gian rnau 380

15. Kat chl1ang......................................................... . 384

ChuO'ng 3.6: Th1!c hanh dng dv.ng Windows Forms 385

1. Stl' dung thuoc tinh.................................... 385

2. Nang cap thuec tinh Experience 390

3. Giai thich ling dung : Formpaint.exe _.__ 393

4. Ket chuang 432

Phiin IV : Ky thu~t Web 433

Chirong 4.1 ; ASP.NET 435

1. Web mot hoi th6 mrii 435

2. Yeu d.u can thiet cho ASP.NET...... . 435

3. Hello ASP.NET .436

4. Them chut huong vi- __ __ .441

4.1. Kiem tra y tl1ang 441

5. Ket chuang __ __ .. __ ...._ .450

Chudng 4.2 : Truy xua't dll li~u tren .NET 451

1. Tang da lieu (Datal.ayer) 451

2. Lap Employee va lap Departrneut.. .462

3. Stored Procedures 462

4. Cai dat lap 463

5. Ki~m tra (Testing) , , 470

6. Hi) trg tim kiem gian dan 472

7. KetchLlang 478

Chudng 4.3: WebForms 479

CHudNG 1·1: Bi) khung ,NET

1. Gi6i thieu ASP,NET WebForms ."......" " , "

, .479

1.1. Cac UserControl .479

1.2. HeaderControl " " " 479

1.3. EmployeeViewPagelet: Mi)t each tie'p can khac , ,485

2. Cac trang ASPX" 492

21. EmployeeEdit................................ " '" .492

2.2. EmployeeListing ,............ . ,,, 498

2.3. Trang tim kiem: Noi b<'!t Mu tim thong tin" ..

. " 507

.3. Ket chuang " " ".

.., " 514

Chrrong 4.4 : Cac dich vu Web (Webserviees) 515

1. Dich V1,l Echo (Echo Service) " " , 515

2. Xay dung lrrp Proxy " , 520

3. Proxyfactory " ,. " ," " , , ..

. ....... 525

4. Cac chuang trinh Windows forms sLi dung WebService ...... " .. " ........ "",, .. 527

5. Tra v€' kieu do nginri dung dinh nghia 530

6. T~o Service." " " " .. , 530

7. T~o ra cac rang buoc cho Client " "" " " """ 533

8. Cac thuoc tinh XML , " .. "" " """ ,, ,' 536

9. Ket chuang ,." " , ,' 542

Philn V : GOI RET HOP 543

Chtidng 5.1 : Cac g6i ke't hQ'p (Assembly) 545

1. Goi ket hop (Assembly) la gt? " , ,,, .. ,. .." " .. ".545

1.1. NQi dung goi ket hqp."" """... .. , .. " , 545

1.2. Oinh vi goi ket hop ., ,.. ,.".................. 546

2, G6i ket hqp 100 trong mot t<j.p tin dan , , ".547

3. G6i ket hop [00 trong nhieu t~p tin " " 547

4. Cac thuoc tinh cua goi ket hop " 549

5. Tai nap goi ket hop khi chuang tri nh dang thuc thi ,.................. ,551

5.1. DI,f an FormHost " 551

5.2. Trinh duyet g6i (Assembly Viewer) don gian " 560

6. Ket chirong , , " " 568

Chuong 5.2: Chit ky s6 va phien ban 569

1. DlI hell................................ . 569

2. BO d~m (Cache) toan Cl,1C danh cho grii ket hop (Global Assembly Cache)

......................................................................... , " , , 569

3. Phien ban (Version) cua component. .

4. Cac g6i Assembly stl dung nhieu phien ban ..

. 570

. 573

~12

Ml,JC LVC

5. Rang buoc tuy bien: Cau hinh (rng dung 574

6. K8"t chirong 578

Chlidng 5.3 : Tlidng bie v6'i the' gi6'i COM ....................................................•.... 579

1. The giai cua com 579

2 .. NET h& trc com........ 579

2.1. Trinh Tlbimp.exe 581

2.2. Rang buoc scm <Early Binding) 585

2.3. Rang buoc muon (Late Binding) 585

2.4. IConnectionPoint .

2.5. Nhirng van ct§ v~ ti;}u trtnh (Thread) ..

. 587

. 589

2.6. So sanh kiern .NET va COM . 589

3. Xem cac tharih phan .NET nhu la cac d6i tuqng COM 590

3.1. Trinh RegAsm.exe 591

3.2. COM Callable Wrapper 591

4. Cac van de khi dung chung .net vii. com vdi nhau 591

5. Ket chuong 592

Chuong 5.4 : Cac tigu trinh <Threads) ...........•................................................•.. 593

1. Da t ieu trmh 593

1.1. Tieu trtnh U"ng dung (Application Thread) 593

1.2. Tieu trinh lam viec hay W~u trinh the (Worker Thread) 594

L:1. Tao mot ticu trl.nh tho 594

1.4. ThuQC t.mh ThreadStatic 596

1.5. Lien ket - Bern cac tieu trmh lai ben nhau 598

2. B5ng bi) tiE\U trlnh (Thread Syncronization) 599

2.1. Tu khoa Lock 599

2.2. Mutex 601

2.3. AutoResetEvent 605

2.4. Manual ResetEvent 607

2.5. Cac tieu trlnh dung chung (Thread Pools) 607

2.6. QueueUserWorkltem 607

3. M& rong' cac tieu trtnh .NET 609

3.1. Lap w orkerThread 609

3.2. Baa t6i cua cac nha triet hoc 611

4. Ke'tchuong 614

PhdnI

? ~

M(J DAU

Trang ph(ln nay:

• BQ khung .NET (.NET Famework)

• BQ thuc thi ngon ngG' tong quat

• Ngon nglt trung gian IL

• Lam viec vdi bi? quan ly c++

• Gioi thieu Visual Studio .NET

MaDAU

CHUaNG 1-1: BQ KHUNG .NET (.NET FAMEWORK)

1. -GI~I THr¢U NHANH vE .NET

Trang cong nghiep may tinh, co the' n6i rang Microsoft da mang lai nhirng buoc di quan trong nhat, Chinh hanh clQng can clam cua Bill Gates va Steve Ballmer khi ho noi voi ling Ion IBM rang ho co mot he cli~u hanh can ban da dem lai thanh cling vang doi cho DOS. H9 cung dil. lam nhu the khi tao ra mot h¢ dieu hanh Windows phil bien hau nhu khap toan cau khi "cam nham" cai phong each "nhm va cam nhan" (Look and Feel) cua Apple Macintosh.

Va bay gid, c6 the se la m(it chuyen bien 10n khi Microsoft phat minh lai mOt each t6ng the phuorig thirc rna chung ta se lam vice, se hip trrnh cho chiec may tinh than yeu, Neu ban dang Ill. mot nha lap trtnh C++, hay ban clang song nho vao h~ dieu hanh Windows hay bO thu vien MFC, khong con nghi ngo chac chan ban cung se bidarn chrm trong the gi6i .NET.

Tren thire te" ngay nay, Internet cia tro thanh phurrng tien cho chung ta lam viae. tham ban be, su dung tai khoan ngan hang, choi, tan ngau, rat thuc te va hi~u qua nha vao cac phan mem duoc viet de thuc hien cac ket n6i IP (Internet Protocol) cho WWW (World Wide Web). Cac phan mern duoc yeu cau thuc h ien hang trieu cuoc giao dich du lieu giUa cac may tinh vai nhau, va s61uqng cac cuoc giao dich nay ngay cang tang theo su tang nhanh ella kha nang va su phuc tap cua Web. Viec stl dung thu dien til, luat tren cac trang Web, trao doi voi cac co sa da lieu va Stl dung cac Ll'ng dung phan tan ngay cang tra nen phirc tap han, VI the trinh do va ky thuat Ii).p trinh de tao va bao duang cac phan mem cling ngay cang diroc yeu du cao han, tinh vi han. Cac nha I~p trtnh chung ta hang ngay phai doi dien voi COM, COM+, DCOM, SP, SOAP, XML, XSL ... cling nhu ph iii chien dau vci hang ta cac sach huang diln, cac b(i cling cu SDK (Software Developer Kit, phrrc tap.

Microsoft, cung nhu da sO' trong chung ta, da tao nen ngay cang nhieu cac cling cu chuyen dung. H~ di~u hanh hay cac oing dung Windows day du tinh nang han, theo yeu cau cua ky thuat, cling nghe, va do do dil. them vao khOng it cac SDK hay cac tieu chuan ij chi> nay, chi> no, Ket qua la M dieu hanh, thu vien, cong cu tr& nen khong con kha chuyen, qua nang ne vdi biet bao cac rna rong (extensions), add-in (phan phu them). The Ia be? khung .NET ra dO'i .. NET thuc sir thay dO'i dieu ke tren. D6 kh6ng chi la mot budc tien, mot nang cap hay mot hop nhat cac cling viae. Ma d6 chinh lEi m(it dieu vi dai, mot su dung cam, mot cuoc bUt pha ngoan muc, N6 dinh nghta lai tAt ca moi dieu ban dil. biet ve I~p trlnh cho may PC ve tat ca rnoi hmh thu tan kich thuoc, H ca ve ngon ngtr lap trrnh trang d6.

2. xoA BO Huyi:N THO~I VE MQT MAy Ao .NET

M(it trong nhirng thuc te ve .NET (rna c6 khii nang bi trich diin sai n hieu nhat) Iii b(i khung nay kh5ng co cai dat ky thuat may ao (tuong tv nhu Java cla lam vdi JVM). Phdn mem chay tren nen .NET that 8\1' duoc bien dich va chay ij

~16

PHAN I: Md diiu

mire rna may tuong tlf nhu cac rna da bien djch cua cac chuang trinh C. Quan niam ph6 bien nhung sai him la .NET dii dung mc;.t ngon ngtr trung gian, rna thucng' duQ'c goi la P-Code (pseudo-code), TMt ra, .NET cai d~t met che d{> bien dich nhi~u tAng (multistage compilation): trinrc tien, chuang trinh se duoc bien dich sang mot dang trung gian kha chuyen va de-n luc no duqc thuc thi, no se dugc bien dich We thai (just-in-time Compile hay con goi ta JIT Compile) sang dang thuc thi cu6i cung (final executable form).

Ghrch u: Theo cluing toi co Ie day ta m¢t erich noi cho khric uai Java vi fa ciing co tId hdu dang trung gian klui chuyen gtin. nlut ta binary-code cua Java uO:

JIT ciing grin gi6ng vai Jaoa Runtime.

Mac du viln con kha phirc tap, h~ th6ng nay cung da dern lai cho cac nha l~p trinh va so' thuan ti/iln. Tat ca moi ngen ngcr deu co-rnet mtrc chung sau khi bien dich so khoi 6 dang trung gian. NM the, cac modunda duoc vie't til cac ngon ngu khac nhau nhu C#, Visual Basic, Eiffel, FORTRAN, COBOL hay bat ky ngon ngO' nao se dUQ'c hli tro trong nnrng lai co the ducc tich hop vao trong mot ling dung duy nhat. Ly rio cua su the nay la mot mOdun met khi dllVe bien dieh a dang ngon ngiJ trung gian (Intermediate Language hay ggi tAt la IL) se duoc dong goi vrri tat cit rna ta cua rni nh. Cac giao dien, thuoc tinh, phuong thee va cac lap cua no diroc rna ta bling sieu dcr lieu (metadata). Tat ca nhung thong tin nay se d~ dang doc duoc hoi cac moi trirong lap trrnh nhanh RAD (rapid application development environment} nhu Visual Studio .NET.

Khi trlnh thirc th i, .NET duoc goi d~ chay mot chuong trinh dii dllqc chuyen d6i sang d'.'ng IL, n6 se goi mot trlnh bien dich tuc thai (JITer) M bien dich doan IL do sang rna may hoan toan M thuc thi tren bo vi x\1 Iy cua may. Trinh JITer lam viec rat nhanh va hieu qua, ca a vi¢c khOng bien dich cac phan khorig duoc dung de'n cua rna lerih IL. Hien nhien Ia viec bien dich cung can den thai gian va phu thuoc vao viec chung ta X<lC dinh thai gian nap (load time) chuang trinh hay tinh kha chuyen (portability) cai nao se can han. Va khi ta quyet dinh tinh kha chuyen khong quan trong, h~ thong se cung cap mot trinh bien dich pre-JIT cho phep ta chuyen d6i IL thanh rna may thirong true, coi nhu tao nen cac ti),p tin tlurc thi .EXE hay .COM quen thuoc.

Minh hoa duoi cho thay cac tang cua hi) khung .NET, dircc xem xat bO'i mot l~ptrinh vien, Cac phan in xam la cac phan dircc .NET them vao. B{> khung .NET .hisn nay cung cap 4 ngon ngu rieng: C#, Visual Basic, C++ voi b¢ flj qulin rrur r¢ng (managed, extension) va JSeript. M{>t vai ngon ngir khac duqc phat trien Mi cac cong ty.khac nhu Fujitsu voi COBOL, ...

Da co nlQt nh6m cac trtnh bien dich chuyen rna lenh cua cac ngnn ngtr hO trq .NET thanh cac mOdun ngon ngu trung gian. Ben diroi se la cac trinh bien dich We thai chuy~n'rtgon ngii' trung gian sang rna may (lL-to-machine-code JITer). C6 mi)t trinh JITer chuan duqc M th6ng dung vtri nguon luc va bi) nho d6i dao, no se bien dich dang chudn eua IL thanh dang dune tili L1U hoa cua mii may tren may hien hanh.

CHUONG 1·1: BQ khung .NET

171tj

Muc cao

C#

VB

c++

JScript

Cric ngdn ng!l khric

Trinh bien dicit (Compiler}

Ngon. ng(l trung gian IL

JIT Compiler

econoJIT Compiler

preJIT Compiler

File tliuc thi . exe

(as) .NET Common Language Runtime

Ph.dn cung

Muc thcip

Hinh 1-1

K€ do la trmh bien dich JIT kinh t€ (econoJIT compiler), no bien dich rat nhanh nhirng khong tinh de'n (hay tinh .de'n Tilt it) slf to'i LiU cua l~nh va phu thuoc vao mot t4P con cua ngon ngtr trung gian ti~n toi LiU (Pre-optimized ILl.

Trrnh bien dich cuoi cling la trinh tien bien dich (preJIT compiler), co nhiem vu 11\ tao ra cac rna thuc thi dtroc, cao rna rna ta co thi\ phan phO'i thing den ngiroi dung. Phuong thirc nay chi-duoc str dung doi vdi nhung chuang trinh khOng can thay dili. g1 tren nhung nen phan cU'ng khac nhau,

CuO'i cung Ia CLR LNET Common Language Runtime - tarn dich Ia trinh thirc thi ngfm ngit phil quat). KhO'i chirc nang nay cung U'ng tat ca cac dich vu rna cac thanh to' cua chung s1.\ giao tiep vdi may hay voi M dieu hanh rieng tren may do. Mt thu vi neu chung ta chu y rAng may rna ta vlta noi a tren khong chi la may PC va h~ dieu hanh cung khong chi la DOS hay Windows. Microsoft da co mot, chien luoc "gom thau thien ha" bang' each xay dung bi) khung .NET tren mci nen, til cac dung cu nho nhat, cac thiet bi cam tay, dien thoai, cac PDA cho Mn cac hi} UNIX hay LINUX. Mac du den nay .NET van chua tM dap ung ngay voi cac h$ thong khac han IA Windows 2000 (1386), nhung tinh khii chuyen cua no cung dang trrr nen du dung nhu lit mot moi truong lap trinh viet-mi)t-liin-ch':ly-khiip-noi.

3. NGON NGD TRUNG GlAN MICROSOFT (MSIL)

Dieu dang noi la IL cua Microsoft khong' lin dAng sau cac tilng cua may. No la milt ngon ngitlma du ro. dua tren stack, co mi)t chut tirong tu nhu rna assembly

I!J 18

PHAN I: M& dau

rna ban co th~ W viet lay neu ban du can dam. DI nhisn cung c6 nhung cong cu d€ ban co tM dich ngiroc cac ban rna IL lai d~ xem cac dong l~nh cua mmh va cac doi tUQ'ng M thong. Trang mQt chuang sau chung ta se cung phan tieh chi tiet v~ IL va thir viet true tiep cac ang dung nho bAng IL.

4. QUAN LY BQ NHO .NET

MQt d~c diem dang han cai cua .NET la trrnh quan ly bo nhd thuc thi cua n6 hoat dQng nhu mot h~ thong thu gom rae (garbage-collected system viet titl la GC system). C6 ngl1ai thi thich thu, nguui Iai 10 sg hay chet lang di vi n6. C6 thii' ban cia la cac nha I~p trrnh tli lau him, neu the, chic ban kh6 the rna quen duoc nhirng ac mong trong nhung ngay cua Lisp, Ilk dqi cho ngimi don rae den, rna o ng ta chi den vao tha ba: ca nui giay loai a chung quanh ban, Con han la lap trinh vien C++ thi hh ban se thay trlnh quan If hQ nhc nhay loan xa va c6 khi dan den treo may khi ban quen di lai nguyen v~ 51! quan If vi~c dirih V! can tro va loai bo cac vung nhc han da cap.

Trinh quan ly bo nho cua .NET da tie'p can viec djnh vi he) nho theo mot each khac, Mot khoi b<) nho duoc tv dong' ghi nhd thong tin khi no diroc yeu cau cap phat eho doi tuung' va co nhung tham chie'u de'n n6.Chl khi tat ca cac tham chieu den kho] n hrr duoc xoa thi doi tuong hay vung rihd rnrii hi huv that sir. Cach giai quyet nhu the that 51! da giiim nhe ganh nang quan Iy bo nhrr cho lap trinh vien. Ban kh6ng con can phai nho Ia da xoa vung nhrr da cap hay chua: dan gian la W nay ban chi can biet la ban khong con dung no nua. MQt Lap se kho ng con phai chu f thea doi hrong tham chieu den no mra, no da biet duoc khi nEIO n6 se tir mlnh huy M.

De giam 51! phan manh cua vung nhd dong (heap}, trinh GC cung ail. huang muc tieu vao viec cung co cac vung b<) nhrr dang sa dung' hay cac vung nhrr 1\1 do chua duqc dung den. Dieu nay ngan ngua bo nho bi mat vo Iy va nang cao h ieu qua cua mot hi? may chu. Heap diroc quan If cang chac chan fang tat ca cac truy xuat b<) nhrr khong chuan , nhu tran bo nhrr hay treo may, se khiing the tac dong den dfi lieu cua chuang trinh khac dang chay tren cung may nay. Va nhu the no lam cho M thong tra len tin cay va bao mat.

BQ GC thucng bi coi la cham va khung hieu qua nhung Microsoft da qua quy€t rang GC cua .NET se khac, no thi,lt sl! hoat d(mg thea thai gian thuc GC cua .NET se hoat dong We thai va khOng tac dOng dang ke len bo vi xu ly (CPU) T6ng.quat, tren mot may Windows 2000, GC chi can khoang 111000 tong thai gian xl:i If cua CPU.

Cuoi cung, c6 ca mot hi? thong du phong cho cai gel la vung nhrr hay rna lii'mh kh6ng duoc quan If {hay khong an toan) rna cac lip trrnh vien can dung con trode dinh vi vung nho thunng gap phai, Nhu the ban co tM dung cac cau true cei xua cua C-t+ ngay trong b<) khung .NET.

5. H~ THONG KIEU nu LI~U eVA .NET

Cac lijp trinh vien c++ co le se co nhieu ngac nhien khi biet v~ each quan If cac ki~u dil lieu cua .NET. MQt kieu nguyen int se khiing con chi co nghia nhu

CHUONGl·l: BI) khung .NET

191!J

la mot vung nhc 2-bytes nao do. That ra, dcr li~u viln duoc luu vap bl) nho vaj mot kich co nao day nhung bay gio ban da c6 tM xem chung nhu la nhimg d6i tU(,1ng thirc sl! va truy cap den chung theo cac phuong thuc rna d6i tucng cho phep

Co 2 phan biat nho ve nhrim dcr lieu: ki~u gia tri (Value type) nhu chars, int, doubles va mot s6 nua. Kieu tham chieu (Reference type) nhu array, interface, class hay string.

MQt dieu thu vi la moi ngon ngtr trong Visual Studio .NET nhu C#, VB, C++ deu su dung cac ki€u duli~u nay giong nhu each rna .NET da tu dinh nghla. Nghla la, integer cua VB se dung hoan toan nhir integer ella C# va viec chuyen d6i gitta kieu tha (real type) va cac kieu nhu variant la khong can thict,

6. cAc Dor TDQNG TRONG H:at THONG CUA KHUNG .NET

Mo hmh cac doi tuong cua h~ thong cua .NET dvgc luu gia trong mot tap cac tij.p tin DLL. Vung khong gian M thong (System namspace) da chira mot h~ thong cac lop (classes) cho cac tap hop, bao mat, truy xuat, tap tin, truy cap cac ham Windows API, XML, ... Va hien nhien la tat ea h$ thong .NET deu da s~n sang cho C# va VB cung nhu cac ngon ngtr khac.

Luu y: .NET dua ra. mot hhoi niem moi Iii Namspace hay kh6ng gian ten.

No luang duang ooi khai niem. t6'ng quat tliu vi?1I (library).

7. C# . MOT NGON NGff L~P TRINH MOL

Khdi Mu vci ten goi la Cool vao khoang narn 2000, C# da t?O ra vo s6 cac cucc tranh luan Ian tren nen .NET. Tir cac huyen thoai, cac d6n dai va cac ttae doan, C# ngay nay da that su tro- thanh mot ngon ngu dan gian, hoan toan huang d6i tircng va nit tuyet vci. Cac d~c trirng nay cua C# cling gan gi6ng vdi nhtrng tuyen b6 ella Java? Du co hay khcng th) r6 rang cac n ha thiet ke C# da nit muon tao ra mot ngon nga co the' lam vua long giai lap trinh C++. C# rat dil dap ung vdi ho va c6 kho ng it cac cau true giin giong nhu C++. DI nh ie n ta cling khong loa i tru se co vai t.hieu sot nho nao do rna doi v&i mot so ngu'oi t hi chung tro nen bAt cap va khOng ti$n loi.

C# khcng hi) tro da thua ke' (multiple inheritance): MQt lap (class} ella C# co th€ duoc khai bao la no c6 thg dung nen 1 hay nhieu cac interface t giao dien hay giao tiep), nhung tinh da k;§ thua cua cac lap (classes) co ban lai khong duqc chap nhij.n. D6i vai mot so Iap trinh vien, dac bi~t la nhung ai yeu thfch ALT, thl. tinh chat nay duoc xern la mdt bat cap.

H$ thong C# cling khong cho phep su dung bat ky cac kieu miu template nao ca. Du vay, chung ta He ban them ve vAn d§ TIlly a cac chirong sau. Da s6 cac cuoc thao luan v~ C# hien nay deu tu ph an (jng cua nhung ai da gat bi'! C# nhu la mot co' gang' hien nhien nham VaG viec xoa bo Java. Tuy nhien, that ra C# va Java co th€ duoc xem nhu nhung con ngua tren nhung duong dua khac nhau, chung co tM' cung t6n tai va chung song hoa binh. C# va toan bi? he thong .NET se Ia cong cu t6t han cho viec ket hop cac rrng dung khach va cac U'ng dung phia may chu, con Java co nhtrng khuyet diem ro rang cho phan may khach.

Chung ta co the noi them ve C# 13. mot ngon ngu hoan toan huang d6i tinmg (totally object-oriented). C++ bcit nguon tV C: trimc he"t do III mot sl! b6 sung phuc hop cho C, sau do la mi)t c6 giing thuc SI! cua dinh huang d6i tugng. De t6t hen, C++ phai giu lai mot so di!.c di€m cua ngon ngu khong-hirdng-doi-urong: Do la

i!!l20

PHAN I: M& dau

nhung ham d(ic lap va cac bien toan cue, C# thi khac, no tuyet giao hoan toan vdi cac dac tinh nhu the'. M9i kigu bien, k~ ca kieu gia tri dun gian, d~u ducc xern xct nhu la mot doi tucng. M9i ham deu phai thu(ic mot lop (class). Kh6ng con ducc dung cac bien toan cue. Tuy the, xin dltng 10 !.lng, vi cac lrip chua cac ham tinh hay bien tlnh co tM duqc xern va hanh d(ing nhu cac ham d(ic I~p va cae bie'n toan cue. 'I'a hay xern xet m(it vi du vo cung nlli tieng, vo cung ducc ua dung-va cung rat bi ghet: chuong trmh nho gon "Hello World" trong ngon nga C#,

using System; class helloworld; {

public static int Main ( ) {

Console. WriteLine ("Hello Word") i return 0;

} }

Nhu ban thay, cac khai bao va cau l~nh kha giong C, va ban co the hieu duoc dfi dang neu ban dd bie"t lap trlnh C trudc day, Mot chuong trinh don gian cua C# la nhu vf!.y, Chung ta se tim higu no trong chuong sau

8. cAc DOl TU<;jNG TV MO TA NHU THE NAO?

Sieu dii lieu (metadata) Itt thanh phan chinh yeu trong kien true dong go i cua ,NET Framework. Metadata dung de mo ta cac cau true da li~u, ban co the' xern metadata thuoc loai du lieu dung mil ta di:l lieu, No dung rno hi. cac Idp, phirong thuc, danh sach tham s6, cae thanh phan da lieu trong file .EXE hoac .DLL. Bang mo ta metadata bat ky d6i tuong nao cung co thg d9C va hieu dune cau true cua dOi tircng viilt bang ngon ngtr khac. Vi du doi urong C# hoan toan co the d9C va Stl dung duoccac doi tuqng viilt bang Visual Basic hay C++ ,NET.

9. TUONG TAC VOl THE GIGI COM

Tuy ,NET Itt mil htnh mrri thay the cho the giai COM dang co trong kien true cua Windows nhirng viec thay the khong dien ra den nili ban milt het kha nang sir dung doi tucng COM, Nen ,NET cho phep ban sli dung va goi cac doi tirong COM ngay tU cac dOi tliQ'ng .NET va tao ra cac lop vo boe cho phep d6"i tu'qng .NET e6 the bien thanh doi tuong COM.

10. WINDOWS FORMSJ WEB CONTROLS vA GDI+

Neu ban da tung viet chuong trinh Windows truoc (tay ban h11n dii quen vdi lap thu vi~n do hoa cue ky hip dan. Trang .NET ban co rat nhieu hra chon de lap trinh giao dien dli hoa, sli dung lop Windows Forms, thu vien GDI+ hoac cac di~u khien Web Control dg tiepe~n vrii giao dien danh cho irng dung Web. Ban khong con phai metnhoc vdi cac ldp MFC, thay vao do la nhung lap thu vien .NET dan gian d~ hieu va hieu qua hen ra'"t n hieu. Hang loat cong cu lap trinh hieu qua duoc them vao mni trircng Visual Studio .NET rna ban khong h~ tim thay trong nhung moi trliCrng lap trtnh tntoe clay.

Moi thu dii sAn sang, co Ie cIa den Ide chung ta di sau va tlm hieu ngon ngu C# va d6 ding Iii muc dich cua giao trinh nay,

ChUdng 1.2

BO THVC THI NGON NGif TONG QUAT

(COMMON LANGUAGE RUNTIME)

Cire van dJ ehinh se dUde d€ cap den

./ T6ng quan vJ kifin true .NET va ngon nga CLR ./ Quan h~ ella CLR trong .NET

1. TONG QUAN

BQ thuc thi ngon ngti t6ng quat (Common Language Runtime - CLR) gii1 nhieu vai tro trong h~ thong .NET. No la phan quan trcng trong h~ thO-ng thuc thi, nhirng n6 cling giu nh iern VI,! tieh cue trong viec phat trilln VB trilln khai phan mern chay tren kien true nay. No cung cap sl! h6 trc da ngon ngu bang each quan ly cac trinh bien dich (compiler) diroc dung M bien dSi rna nguon thanh ngon ngu trung gian (intermediate language- IL) va tlt IL d€n rna goc (native code), va no buoc chuang trrnh phai thoa tinh an toan va bao mat.

Chung ta hay xem xet nhirng vai tro nay chi ti(~t han.

1.1. Doo gian boa vi~c pb at tri~n

Vai tro phat tri~n cua CLR la quan trong trong viec giarn ganh nang' rna chung ta phai rnang trong cong vii;\c cua chung ta tU ngay nay sang ngay khac, Dung .NET, ban khOng din phai 10 Mn chi tiet thuc cha't van de cua GUIDS, IUnknown, IDispatch, hay cac thir vien kieu, CLR se thay ban cham 10 tat ca nhirng thu nay.

Mil se dang tin cay han vi viec quan lv hi) nho cling la trach nhiern cua CLR. Cac doi tuong duoc thi'! hien dirdi CLR khOng can tinh Mn tharn chieu Wang minh; dcr lii;\u rna ban cap phat duoc thu hoi lai bai bQ don dep rae (Garbage Collector) khi rna Ii;\nh cua ban khOng slt dung nira, Metadata (sieu da lieu - dcr Iieu co' SCI) cling cho phep lien ket dong cac chuang trinh khli thi. Dieu nay muon n6i ding cac true trac trong viec ket hop cac DLL qua han hoan toan khong con mra. DQ tin cay cling ducc nang cao qua tinh an toan kieu. Ban khong ciln xem xet Mn nlurng di~u chua biet nhtt kich thiroc cau true hay t6 chuc cac thanh phan trong mot doi tuqng nao do, nho the ban cling khOng can 10 Mng gi v~ cac sap xep hay hil(lu chinh. Han the, khong bao gia ban can 10 v~ viec killm tra gidi han cua mang (array) hay bQ dl(lm (buffer).

1.2. Cong' cu b6 trc1

CLR cong tac chat che v&i cac cong C\J. nhu Visual Studio, cac trinh bien dich, cac trinh ga rili, va cac trmh tao profiles de lam cho cong viec cua nguni phat trien de dang hem nhieu, N gay ca ban khong can Visual Studio .NET rna chi can Mn bo SDK cho c6 duoc su tich luy kinh nghiem, MQt chuang trlnh go rili

~22

PHAN I: Md dau

duoc cung cap bci SDK cung t6t nhu la trtnh da duoc tich hop vao VS.NET. Cac cong CI,I khac, chang han nhu b<) dich nguoc ngon ngir trung gian (Intermediate Language Disassembler - ILDASM), t~n dung ti~n lrri cua cac dich VI,! diroc cung cap bai CLR.

1.3. H6 trc;1 da ngon ngii

V3'"n de co ban ve h6 trn da ngon ngu la h~ thong' kii'iu chung va metadata (sieu da li~u - da Ii~u co sal. Cac kii'iu da lieu co ban diroc su dung bo'i CLR la phiS bien d6i vdi tat cil. cac ngfm ngl1. Vi vay khong c6 cac van de chuysn d5i a cac kiElu so nguyen (integer), so cham dong (floating-point), va chuoi (string). Tat ca cae ngon ngu deu giai quyet tat cil. cac kie"u du Iieu thea cung mot each. Cung c6 mot Co' ch6 de" dinh nghra va quan ly cac kieu maio

Tat ca cac ngon ngu cap cao bien dich thanh IL. Mot khi da duoc bien dich va metadata duqc tao cho doi urong, co the" truy xuat de dang ttl cac ngon ngu khac. Dieu nay muon noi ding cac doi tirong diroc viet bang mot ngon ngl1 c6 the" duoc ke thua trong mot ngon nga thli hai, C6 the" viet mot lap bang VB va ke thira tV no trong C#.

Ben nay, co khoang 15 ngon ngu duoc he) tro bo i kien true .NET, kEi cR C++, Visual Basic, C#, Perl, Python, Jscript, Pascal, COBOL, va Smalltalk.

1.4. Vif:c tri~n khai du'c;1c tht!c hif:n d~ hrsn

Vdi kien true .NET, khOng baa gia can phai dang ky cac component (thanh phan) trong h~ thong, Ban giil.n ban e6 the" chsp m¢t component vao met thu muc, va CLR se baa dam rang n6 duoc bien dich va chay dung, Ve phan rna dircc viet cho ASP.NET, ban chi can chap rna ngudn C# ca ban, -Iscr ipt, hay VB, va trmh bien dich lL se duqc thuc thi tren rna ngu6n dung do.

Cac component co the tr ien khai hay cai dat vao 2 noi. Nrri th(( nhat la thu muc rna ling dung cu trii, Dieu nay cho phep cac ph ian ban khac nhau cua ung' dung cung ton t<).i tren cung m(it may. Noi thu hai La GLobal AssembLy Cache. Bay la kho luu trlY trung tam cho cac hop ngG (assembly) rna tat cil. cac ung dung cua .NET co the truy xuat Mn,

Cho du cac component dircc 111u tru ba't eU- noi dau, thu tuc c;i.p nh~t nlt dan gian, Ban chi chep hop ngO (assembly) VaG dung thu muc, du la dOi nrcng d6 dang chay (ban khOng the" lam dieu nay voi m<)t DLL cua Windows), va hi) thong se khien n6 hoat dong,

1.5. St! tach bif:t cac phdn m~m

. Cac ling dung bi co lap voi mot irng' dung khac bdi CLR M chung khong the" anh huang Ian nhau. Cac tai nguyen co the" dmrc dung chung, nhttng viec dung chung duc;te tao ra m(it each ra rang, £)i~u nay muon noi ding m(it M th6ng .NET c6 tM c6 each tie"p can tinh tao ~t cua hi) th6ng neu can. Khi che d<) baa mat ducc tM long hon, haykhi mu6n truy xuat vao bat ky phan nao cua tai nguyen hi)

CHUaNG 1·2: Bi? thuc thi ngon ngu t6ng quat

23 (!!l

thong, ta co th~ di~u chinh viec cho phep truy xuat cac tij.p tin hay cac tai nguyen h~ th6ng khac chi dua tren co sa ling dung,

1.6. Tinh an toan ki~u va s1$. ki~m tr-a

CLR thuc thi tinh bao mat va, tin cay qua an toan kiflu, sl! kiern tra va uy thac, Mil lenh co ttnh an toan kieu ducc xay dung phu hop vdi cac qui uoe rna CLR dua ra. No chi dung cac ki~'u diroc nhan dang, chi dung bi? nho duoc cap phat hOi ,trlnh quan Iy bi? nho (memory manager) va kh6ng th~' truy xuat vao dll' lieu cue bi? hay cac phinrng thuc cua cac ling dung khac hay cac tien trinh (process) khac, Mi?t chuang trmh an toan ki~u khong thfl rei vao tinh trang vi pham khong gian vii. ghi de len cac khci bQ nho cua cac tien trinh khac. Thoim tra an toan kieu xay ra khi rna I¢nh duoc nap len vii. duoc thuc thi hoi CLK Trong suot tien trinh thong dich moi phucng thirc , CLR xem xet cac d~c tli metadata (dac ta dll' li$u) cua phuong thuc va kiern tr a tinh an toan kieu cua no. C6 mot vai tinh huong' rna viec kiern tra nay Ill. kh6ng th4', chang han, khi CLR can dung rna I¢nh ben ngoai ,NET tit rnQt doi tucng cua ,NET. Day la trirorig hop thong thirrrng khi ffiqt lOp .NET goi met Win32 DLL. Trong trucng hop nay rna I~nh phai diroc uy thac (must be trusted) brri CLK

1.7. Tinh bao mat

Van d~ bao mat cua viec quan tdc cac h¢ thong rna e6 the thirc thi cac nQi dung hoat dQng hay thuc hien cac script cua nguai dung lit rat cao. Vai tu each lit mot client ban khong cho phep mQt chucngtrmh khong ro ngudn goc chay tren may han, huy cac da Iieu e6 gia tr]. Vai tu each la mot nguol eung c1lp dich vu ban khOng cho phep cac cuoc tan cong hay cac 16i dan giiin rna nguai dung mang lai cho toan bii hi;! thong cua ban.

CLR kiem soat tinh bao mat, ella M thong qua mQt cap thOng tin ella nginr: dung la user va rna nhan dang d& kiem tra. Vi\\e nhan dang rna, vi du nhu nguni tao ra va nguo n g6c cua rna I~nh, c6 the duoc bret va viec eho phep sa dung cac tai nguyen se duoc gan tuong ling. Kieu bao mat nay dugc gQi Ia Evidence Based Security (BaD mat dva trsn bang chirng) va la mot dac tinh chinh ella .NET. Kien true ,NET cung eung cap viae h6 tro cho viec bao mat dua tren vai tro (role-based) dung trong cac account va group cua Windows NT.

2. QUAN H~ CVA CLR VdI .NET

Sa d5 khoi dLIqe trinh bay trong hinh 1.2·1 cho thay mbi quan hi;! cua CLR vai kien true .NET.

2.1. Chi tie'tv~ CLR

Nhu Iii. mQt thanh. pMn con cua kien true ,NET, ban than CLR duoc xay dung til cac phan rteng biet, Hmh 1.2·2 eho thay cac phan nay quan h~ vai nhau nhu the nao.

rMj24

PHAN I: Ma Mu

c:JGc::JEJ Other
languages

The Common Language Specification
. (Dac ta ngon ngil chung)

Web Services User Interface E-<
!:il
(Cac dich V1,l Web) (Ciao dien nginri dung) Z
ci
;a
:l
+>
I Data and XML I rn
~
(DiY li~u va XML) :l
rn
>
I Base Class Library I
(Thir vien lap co sa)

The Common Language Runtime (CLR)
(Thuc thi ngon ngiY chung) Hlnh 1.2-1 : CLR vel: ki~n true .NET

Type Checker

Exception Manager

Security Engine

Debug Engine

Thread Support

COM Marshaler

Hinh 1.2-2 : Chi ti~t cae thcl:nh phiin cua CLR

CHudNG 1-2: B(i thuc thi ngtm ngiJ t6ng quat

25~

Nhu ban co thil thay trong hinh 1.2-2, chuc nang ehinh cua CLR nhu hi mot hi? nap tap (Class loader). N6 nap cac lap rna ban tao hay cac lap mil. duuc cung c€p nhu la bi? phan cua thu vien cac lap co Sd, chuan bi chung cho vi~c str dung, va sau d6 hoac Iii thuc thi chung hoac Ia tham gia vao luc thiet, ke (design-time),

Cac lap ducc nap tir cac hop ngiJ (assembly), ,NET tmrng dircng vci DLL hay EXE. Doi khi hop ngii' chua rna g6c nhirng hau nhu chile chan la chua cac tap da duqc bien dich thanh IL va metadata him quan den chung. Trang thci gian thiet ke, CLR giao tiep voi cac eong cu nhu Visual Studio, NET M cung cap kinh nghiern ve phat tri1\n (tng dung trang thoi gian ngan (Rapid Application Development - RAOl rna cac nha vi€t chuang trinh VB da dung trong thai gian qua lau, rna con cho tat eli cac module trong tftt ca cac ngon ngir. Con trong luc thuc thi, b9 nap I6'p se tai cac lop.

2.2.CLR vao hie thuc thi

Khi bi? nap lop (class loader) rna mot goi chuang trmh trong hie thuc thi, no co mOt s6 bUGe quan trong d€ thuc hi';'n truce khi cac lap co the th~t su duoc ch ay,

Hlnh 1.2-3 rna phong mo hinh t.huc h ien cho CLK ;

Hinh 1.2-3 : M6 hinh. thuc thi ella CLR

~26

PHAN I: Ma ddu

B(\ nap l6'p (class loader) dung bl} quan If rna (Code Manager) d§ dp bo nho cho cac d6i tinrng va ao lieu. B6 tri cao lop trong b9 nhc duoc tinh, va moi pluro'ng thirc da ducc luu tru nhu ngon ngti trung gian se duoc coi nhu hi milt stub dung dEi' goi trinh bien dich (compiler) cho l.in thuc thi diu tien.

CHU Y Bqn se thCiy mil liinh. trong hlnli 1.2·3 co hai fti€u ngon ngt? trung gian hluu: biet, MSIL va Opt.lls, duoc bien dicli bai cdc trinli bien dich. JIT ctia rieng ciuing. OptlL la mQt tfip con duoc toi uu hoa cao ciia MSIL, duoc thiet ki? dac biet de dung boi h¢ thong chii rrui Jdl0ng co SI! lang phi bQ nllt,! hay toe dQ tinh toano Vi cong oiec diic biet nay rna trinh bien diclt ctl« ngon ngl? ctip cao co gang to"i uu. hod, OptIL tlit th.ich hop han vai cae PDA, dien thoai thong minh, va nh.iing thr:t tuang tu. EconoJIT fa trinli bien dich gon. nhe ail dich. OptIL tluinli ma may.

Bat ell khi nao mot ham tham chicu ldn dilu met 10p & trong mot hop ngu khac hay mot kieu dQ lieu khac rna khong duoc dung truce d6, b6 nap lap (class loader) duoc goi la i de" nap cac d6i tuorig dn thiet. Ban hay nhin vao luu do de hieu r5 tien trinh han. H~ th6ng thuc thi ao cua Cl.R'(Virtual Execution System - VES) va cac con duong di~u khien chinh duqc trinh My trong hinh 1.2-4.

manager

Hinh 1.2-4 : He thong thuc thi do (Virtual Execution Sysrem)

CHUdNG 1-2: B{,> thuc thi ngon ngli t6ng quat

27~

2.2.1. BQ t{LO mii Iuc cai dij,t

M{\t phan YES kh6ng dune trlnh bay trong hinh 1.2-4 la b{'> tao rna luc cai d~t rna thinh thoang xuat, hien khi cac hrrp ngir diroc dat len may chu IAn dau tien. Luc nay se tao ra rna g6c (native code) trong hop ngcr de rna giarn thi§u thoi gian khdi dQng mot doi tltc;trig cu the. ThOng thucng, vise tharn dinh rna nay dlfqc thuc hioiln luc cai dat, nhung neu mot phisn ban thtrc thi hay vieo kiem tra tinh baa mat Ia ciin thist, thl rna loilnh se duoc bien dich lai bai trinh bien dich JIT chuan thea each binh thircng.

2.3. Cae ki~u du li~lU dti~e cung ca'p hili CLR

Nhu da M cap trinio do, kien true .NET eo mot tij.p cac kieu du lieU CC1 sa duqc dung bo i tat ca cac ngiin ng(l khac, Cac kieu nay baa g6rn cac kieu so nguyen nhu so' nguyen 8-hit, 16-hit, 32-bit, va 64-bit va char (ky tl,f). Va ke ca cac kieu cham dong (floating - point) va cac kieu can tro den ca vung nho cua .NET lan vung nho ben ngoa i .NET.

Tat ca cac kieu da lii~u CC1 SO' co the" dl1qc su dung bdi rna lenh viet bang IL, va ban co the: tl! viet IL. IL ra't gi6ng vai hop ngu (assembly language), nen neu ban da tung lam vice va su dung Z80 hay 6502, ban se cam t.hay thoai rnai voi IL. (j phan sau, chung toi se trlnh bay voi ban mot vai IL duoc viet va cac cong cu di vrii kien true .NET rna co the duo'c dung de bien dich va dich nginrc Iai.

Cac kieu CCf sd duoc djnh nghta trong bang 1.2-1

Bang 1.2-1 Cac ki~u dfi li~u cd slJ ella CLR

u

Gia tr] 8-bit co dau phan bu cua 2 Gia trj nhi phan kh6ng diu 8-bit Gia tri 16-bit eo dau phan bu cua 2 Gia tr; nhi phan kh6ng dau 16-bit Gia tri 32-bit co Mu phan btl cua 2 Gia tri nhi phan khong dau 32-bit Oia tri 64-bit co dau phan bu cua 2 Gia tri nhi phan khong dau 64-bit Gia trj cham dong IEEE 754 32-bit Gia trj cham d(ing IEEE 754 64-bit

Gia trj co dau phan bu cua 2 co kich thuoc tI,f nhien

Gia tri nhi phan khong dau co kich thiroc til nhien , cung 1ft con tro (pointer) ella COM

I1 UI 12 U2 14 U4 18 U8 R4 R8

~28

pHAN I; M& d§.u

RBResult

Kich thuoc tv n hien eho ket qua ttnh toan cham dQng 32-bit Kieh thuoc tv nhien cho ket qua tinh toan cham dQng 64-bit Gia tri cham di)ng co di) chinh xac cao

Doi tl1l,l'ng co kich thirdc tu nhien tham ch isu den vung nho cua .NET

R4Result

Rprecise

o

&

Con tro e6 kich thiroc tl! nh ien (co th~ chi den vung nhc cua .NET)

Bang l.2-1 de C?P den cac kich thuoc "tlj nhien" eho cac ki~u dCl lieu. 8ieu nay n6i den cac kich thuoc rna !lugc an dinh san bdi phan cung, Ching han nhu, mot may c6 dl1ang truyen 16-bit co tM se co so nguyen tlj nh ien HI 16-bit, va mot, may c6 dliCtng truyen 32-bit se eo so nguyen Ian phu hop, Dieu filly eo th§ la met van de khi cacchunng tri nh phai noi chuyen vrri phan mem a dau kia cua mot ket noi internet. Kh6ng co chi thi ro rang, that la kh6 de' biilt mi)t so nguyen a dau kia Ion nhu the nao, va viec kh6ng urong thich ve kich thliac ki~u, va khong lien ket ve cau true eo tM xay ra. De' biilt dieu nay va cac van d~ nrong tv khac, CLR chi dung mot vai kiElu du lieu danh rieng khi L1ac luong va chay phan mern tlurc su. Kieu co' sa rna khong vira vdi cac kieh thuoc it diroc chon thl dl1qc dong goi va rna goi mot each clin than thanh nhung kieu du lieu kha chuyen han. Dieu nay dien ra a ben du'oi va ban khong phai 10 lAng gl.

2.4. ))u li~u va ma l~nh cua .NET

CLR bao g6m bi) quanfy rna (Code Manager) va bl} don dep rae (Garbage Collector - GC). Cac khdi chuc nang nay chiu trach nhiem quan Iy bi) nhc cua ti'lt ca cac d6i tucng co sa cua .NET, k~ ca cac kieu dCl lieu dinrc quan 19. Code Manager cap phat khorig gian luu tri1; Garbage Collector xoa no va lam gnn heap de giam thie'u cac phan doa n.

VI GC chiu trach nhiern lam gon heap (vung rihd cua chuong trlnh), du l ieu hay cac doi tircng duoc s11 dung trong khOng gian duqe ki~m soat bdi .NET thuong bi di chuyen til nai nay sang noi khac trong suot thai gian song cua chung, Do la tai sao, trong cac tinh huorig thong thliCtng, cac doi ttrorig luon luon duoc truy xuat hoi tham chieu (reference)_ Trong the gidi c++. tham chieu thl kh6ng khac vo'i con tro (pointer). Co' che' duoc dung eli\' tim d6i tuong diroc tham chieu den cung gicng nhu met con tro chi den mot khoi b(> rihd nilo do, Cac tham chieu C++ la each n6i cua trtnh bien dich rna no chac di.ng ban dang chi den mnt kie'u C1,I the. Trong C++ c6 tM hru rnl}t tham chiau diln mot d6i tirong, huy doi tuong d6, va sau do SIl dung chinh tham chieu li'ii thai d6 M truy xuat Mn vung da dung cho doi tuong. Di~u nay thuong gay ra hu hong tram trong trong chuong trinh C++.

Tuy nhienduni M thong _NET, van d~ nay bi loai tru, Bat Cll khi nao mot tham chieu de'n mi)t d6i tuqng dircc tao, do; tuong d6 bie't n6 dang dliqc tham chieu den, va GC se khOng bao giG huy n6 tr-u phi n6 giai ph6ng ganh nang, Han nua, khi GC don dep heap (vung nho cua chuong trmh) va di ehuyEi'n cac dbi tirong

CHUONG 1-2: BI)' thuc thi ngon ngii' t6ng quat

29~

trong bl) nhri, tat ca cac tham chicu den d6i tuong d6 diroc cap nhat mot each tli dl)ng, Di~u nay khien cac component (thanh phan) dang dung d6i tircng d6 se nhan dligc hfy tham chieu dung khi cac thanh phan nay truy xuat den doi tugng a Ian ke,

. Qua Code Manager, CLR chiu trach rihiern bo trf b{l n ho tlurc cua cac d6i tirong va cac cau true rna no lam chu, Thuong tien trlnh bo tr'i nay la tv dl)ng, nhung khi ban can lam thi ban co tM chi ra thir tv, su sip xep, va dinh ro viec b6 trf bq nho trong metadata. R6 rang la dieu nay c6 the duoc thuc hien vi rnetadata tht luon c6 s~n d6i voi lij.p trinh vien thong qua tap cac interface (giao dien) da duoc dinh nghra,

2.5. Mii l~nh ella COM va vi~c truy xua't dii li~u

C6 le khong r6 rang la tinh an toan kieu, trnh bao mat, va viec kiern tra cua .NET cho phep ban bao v~ nhu the' nao 61,1' dau tir cua minh trong rna c++ rna tV lau nay ban da qua cham chut cho no.

Nhu la mot, he qua, Microsoft Ct trong cung canh ng? dung nhu vay va kien true .NET c6 cac kha nang tuy~t voi cho vice sit dung lai ma c6 trirdc day cua ban:

C6 ba co che co ban danh cho thao tac lien ket giua .NET va COM trong .NET. COM lnterop cho phsp cac doi tugng COM cua ban duoc su dung boi kien true .NET y nhu the chung la cac doi tl1qng ella .NET. Co ch€ g9i M th6ng (Platform Invoke - PlInvoke) de cac d6i nrcng cua .NET goi cac di1!m vao trnh (static entry) trong cae DLL giong nhu LoadLibrary va GetProeAddress. Cu6i cung, IJW (It Just Work - Lam viec ngay) trong hau hetcac hlnh thirc err ban cua no cho phep ban bien dich 11'l1 ma cua ban va , .. n6 lam viec ngay, Mot hinh thrro phirc tap han cho phep ban nang cap rna lenh cua ban trong vice su- dung cac phan md rong' cua .NET d6i vdi C++. Dieu nay cho phep ban tao day du cac Mi tliqng GC trong vung nh6 cua .. NET de rna nguon c++ ell cua ban sit dung.

2.5.1. Ca che'gpi cae d5i (ur;tng COM (COM Interop) qua CLR Ban co the thily trong hinh 1.2-2 dng CLR chua mot hI) sap dat COM (COM marshaler), Kh6i chtrc nang nay chiu trach nh iern ve v iec goi cac doi urcng COM (COM Interop) tren .NET. Co hai kich ban can phai goi cac doi tuong COM tren kien true NET. Kich ban thir nhat la khi ban muon truy xuat cae doi tugng COM cu tu rna lenh cua C# hay VB rna ban viet. Rich ban thu hai la khi ban muon thuc hien ml)t giao dien (interface) thong dung rna e6 cac doi tuqng COM cua ban truy KUA't den.

D6i vci ca hai kjch ban nay, CLR dong vai tro rilt nang d{lng bang each tao mot lap baa (wrapper) rieng biet van luc thuc thi va sau do lip di),t da li~u xuat nhap cua doi urong COM khi can, Sa do trong hinh 1.2-5 cho thay mot doi tuong COM dang diroc truy xuat hcri mot d6i tugng client .NET.

~30

PHAN I: M& diiu

2. CLR tao mot lap baa thuc thi cho

1. Boi tu'Qng .NET muon

truy xuat mot doi tu'ong;-.----t;;;;;;,,;.,._ _ ...

COM

Hrnh 1.2-5 . Ma duac qutin If l'o-i tien trinh goi d6i tuong COM

Be' Slr dung cac doi tinrng COM vrri cac chuang trinh .NET ella ban, ban can phai dira vao (import) dinh nghia thir vien kieu (type library). VS.NET se lam dieu nay cho ban mot each tv dong khi ban them m(lt tham chieu vao doi tuorig' COM trong IDE, thea cung mot each rna cac Hip trlnh vien VB da lam trong nhieu nam. Ban cung co the su dung cong C\I TLBlmp (Type Library Import) mot each tudng minh. TLBImp se chuyan cac ten phuong thirc trong COM thanh cac ten phuorig thirc trong .NET cho ban. Vi du, ten phuong thuc trong COM

HRESULT MyMethod(BSTR b, int n, [out, retval lint *retval); Duoc dich thanh

Int MyMethod(String b , int n);

Ket qua la, khi ban goi phuong thirc ban khOng phai 10 ling hieu HRESULT, dan gian ban eo the gan gia tri nguyen tra ve vao mot bien trang rna l~nh cua ban, Thuc te, toan bi) hlnh anh tien trmh .NET-to-COM la ra't d~ su dung, Ban khong phai 10 viec chuyen doi da lieu. Nhu ban eo tM thay trong vi du, cac kieu di'r lieu COM chang han nhu BSTR anh xa vao cac kieu nrong ducng de nhan tha'y cuaNET. Ban khong phai quan ly vi~c Mm tham chieu va khOng eo Gums. Neu ban nhan gia tri HRESUL T that bai, ldp wrapper dang thuc thi se tao mot exception (ngoai I~) rna ban co the nam b<'it.

CHudNG 1·2: B(\ thuc thi ngon ngu tong quat

31~

Khi ban muon goi mot doi tuong .NET tli cac doi tvqng COM, tie"n trinh rna CLR dung M lam cho viec ket noi de dang la wong ttl vdi so d& dvqc dua ra trong hinh 1.2-5. Hinh 1.2-6 mo phong viec ke't noi COM-to-NET.

2. CLR tao mot lrrp baa co tit ea

4. Doi tuong COM nhan giao dien

COM client

1. COM client cl1n truy xuat mot interface tren doi tugng .NET

Hinh 1.2-6 Truy xutit mOt doi t uong .NET tit COM

Cac doi tucng COM chi co the' truy xuat cac phuong thuc loan cue ella cac d5i turrng' .NET cua ban, nhung chung co th(\' duoc su dung tit the gidi COM.

Dau tien, tao mot typelib W d6i tuong cua ban bang each Btl dung cong cu TlbExp ella .NET. Ke den, dang ky hop ngO" diroc tao bdi TlbExp bang cang cu RegAsm. Day la lan duy nhat ban se can dang ky cai gi do du'ai .NET; COM dang chay trong phan chua duoc quan Iy tri'n may chu can pha i kich heat doi tuqng nay thea each chuan. Cu6i cung, tu COM ban c6 the' sL1 dung CoCreateInstance va QueryInterface, si't dung AddRef vii Release nhu thirong, va Stl dung HRESULT rna lap wrapper cung cap.

Sau nay, trong phan 5.3, chung ta co mot chuong danh cho COM Interop, ta se di sau hen va co nhieu vi du hon.

~32

PHAN I: Md d.1u

2.5.2. LUi g9i hf th6ng (Platform Invoke - PIInvoke) tit CLR

Mot trong nhung yeu cau chung nhat doi v6i hoat dong Iien ket se Ia vi~c sU" dung mot DLL rna da t6n tai tren he thong CI,lC bi). Ching han nhu, ban co tM can phai tiep tuc sU" dung cac cong cu rna ban da dfiu tu VaG va chi co sl'in d dang DLL.

Kien true .NET cung cap co che P/lnvoke cho muc dich nay. Co cM" ni)i tai thi rat giong vdi COM Interop, n hung vi cac DLL rna ban dung thi lucn luon 0" CI,!C bi) (tren cung mot may), h~ thong de su dung han.

D~ sli dung Co' che PlInvoke, ban can met lap wrapper M uy quyen cac 1(li goi tU CLR den ham thuc su cua DLL. Ban co thii" tao cac wrapper nay bang each sl! dung cac thucc tinh d~c biet trong cac dinh nghla phuong thuc cua ban.

Doan rna trong vi du sau se eho phep ban goi mot ham trong mot DLL tuy

bien.

MyDlLDll chua m(it ham int Myfunction(int x); Public class t~yD1H-.Jrapper

[DllImport ("t1yDll.Dll", EntryPoint="MyFunction") 1 public static extern int Myfunction (int x ) ;

Bay gio ban c6 th~ truy xuat DLL stl dung cac l~nh cua C#:

Int r =' t1yDll'tirapper. MyFunct i on (12) ;

Trong chirong 1.4, "Lam viec vrri cac phan rna rbng .NET va C++", chung ta se khao sat co' che P/lnvoke chi tiet han khi chung ta xe m xet cac phan mer rong duoc quan ly doi voi C++.

2.5.3. IJW (It just works - No hog.t di)ng ngay)

Cach dan gian nhat M dem cac ling dung C++ cua ban vao kien true .NET la phai t<%p hop tat ca cac rna: nguon EXE hay DLL cua ban. Bien dich lai tat ca chung vcri tuy chon / C LR cua trlnh bien dich va chay chung, Microsoft noi "N6 hoat d(\ng ngay.". Co Ie dieu nay dung neu ban da va dang lap trinh thea phong each hien dai, Neu rna cua ban van eon chua cac khai bao kieu K&R Iau doi, thi no se khong hoat dong.

C6 mQt vai gicri han d6i voi tien trinh nay. Ban khong tM bien dich la i tat ca cac thu vien lap cua ban va sau d6 ke thiia tit chung trong noi da diroc kiern soat. Ban kh6ng th~ truyen mQt each d~ dang cac can tr6 cua .NET vao cac ham va cac ling dung cua ban.

CIl tien trlnh IJW IAn Pl1nvoke deu keo dai CUQc song cac c6ng cu cua ban va cho ban m(>t co' hQi de dem vao kien true .NET.

2.6. Cae thimh phdn md rc}ng cua .NET d6i vai C++

'I'hucng tht khi sa dung lai, rna l~nh cu cua ban la kh6ng du, va ban cfin mot each tiep can hop nhat han tu vilin canh cua lap trinh vien C++, cac thanh

CHlfdNG 1·2: BQ thuc thi ngon ngfC t6ng quat

33~

phdn rna rQng cua .NET dQi vdi c++ la giai phap If tl1ang hoac la rnQt con dl1G'ng di VaG .NET.

Kien true .NET them VaG mot viti khai niem quan trong M quan If b9 nho va vi~e sa dung di? lieu. TAt ca cac dac tinh nay thl co sdn trong ng6n ngfC C# va VB nhung khong co san trong c++. 'Nhung dac tinh be) sung nay du'gc thao luan trong cac phan theo sau,

2.6.1. Cae lftp don. dep rae (OC)

Cac 16'p GC III cac dbi tl1Q'ng d~ rna tit ca viec quan If bi} nhd dl1gc thuc hien bai CLK M9t khi ban ngung sli dung mot lap GC, no dl1gc danh ddu met each nr dQng dg huy va duoc thu hili hai heap eua GC. M9t ldp GC cling co tM co phuong thuc My co tM duqc goi ID9t each tuang minh.

Ban e6 th~ tao cac ldp GC bAng each sli dung tit khoa mci _ge tren cac krp cua ban:

_gc class MyClass {

public: int In_X; int In_Y;

SetXY (int X, int y) {

m_x = J!:i m_y = y;

}

}

Bay giG' MyCIass Iii met lop GC.

CANH BAo Neu ban su dung ~asrn hay setjmp trong cdc phuong thta: C++ ella ban, trtnh. bien dich. se dua ra cdc khuyiin cao; lhli chgy ma lenh. nay co thi dan den hu hong neu ph uang thtic nay sli dlfng bat ky kieu hay rna ella .NET. Cdc lap GC cua ban co the chi dung su M thua duy nhdt. Chung khOng thi co mgt copy constructor (phuang thu«: khi'Ji dung chong) ua khtJng thi ki thua ehdng cdc loan tli (operator) & ua new.

2.6.2. Cae lflp giu. tri

Til khoa moi _value eho phep ban tao cac ki~u gia trl trong rna I~nh C++.

Chang han, ban co tM can tao tren heap (vimg nho cua chuang trinh) mOt cau true 3D_Point cocac thanh phan x,y,z duqc dung nhu la m(lt ki~u gia trio Cac ki~u nay duqc tao tren heap nhung e6 th~ duqc d6ng hay duqc g6i theo mOt ki~u bao di'ii tuqng, si't dung tic khoa _box d~ dung chung nhu cac Mi tugng cua .NET. (C6 mOt thao luan bao quat v€l bao (boxing) cac doi tu!,1ng va khong bao (unboxing) cac Mi tuqng trong Phdn II eua quy€n sach nay, "The C# Language") Khi chung duqc bao, cac ki€u gia tr] nay c6 th~ diroe sli dung bai rna I~nh cua .NET, duqc gii? trong cac lap tap hop cua ,NET, dircc serialize thLiCtng 18. vai XML, va van van.

~34

PHAN I: Mit dt\u

Cac l~ va cac cliu true voi tit khoa _value kif thua tli lop System.ValueType cua ki€n true .NET va c6 tM dinh nghta chong bat ky phuong thirc nao mil. doi tucng d6 can c6. Dl).t cac phuong thuc virtual tren lap gia tri cua ban Iii kh6ng duoc phep, Chang han, ban co tM dinh nghia cMng phuong thuc System.ValueType.ToString M tao m(it chudi M me ta doi tUQ"ng. Vi du nnu, int32.ToString() tr~ v~ so iJ dang chuoi. Nhu itoa( ... ). Ban cling c6 th~ muon dinh vnghta chling phucng thuc System.ValueType.GetHasCode M sit dung trong mQt t~p hop anh xa,

Cac lop gia tri TIl\Y hoat dQng nhir cac lap cua c++ khi duqc sit dung trong c++ nhung ding co tM dugc su dung boi cac chuang trinh thuc thi cua . NET. Chung khong dugc cap phat true tiep ti1 heap (vung nha coo chuang trtnh) cua .NET, nhung chung c6 th~ dugc slt dung hai cac deli tiamg cua .NET khi dugc bao lai.

Co mQt vai qui tAc d~ rna ap dung cac lap nay. Ban co tM nhan lap gia tr] tl1 mQt hay nhieu interface (giao tie'p) cua .NET. Nhung ban khOng th~ dinh nghta chling mot constructor (khdi dung) cho no. MQt lap gia trj kh6ng th1l c6 tiJ khoa _abstract di kern. Cac lap gia trt dugc "niem phong", c6 nghia 180 chung khong thE! diroc ddn xuilt. Ban khong tM khai bao mQt con tro Mn mQt lap gia trio

Nhu vdi tli khoa _gc, ban khong nen dung _asm hay setjmp neu lap do stl dung bilt ky ma lenh nao cua .NJ;:T, chap nhan cac kieu cua .NET nhu cac tharn so, hay tra v~ mQt ki~u cua .NET. N6 e6 th~ bien dich, nhung no se co th€ khong hoat dQng tot.

2.6.3. Cric thuQc tinh (property)

Cac lap Cit trong .NET c6 thEl co cac thuQc tinh co cac phuong thuc tru3 xuat get va set. Til khoa _property cho phep ban tao cac lap GC dEl ho tro cal thuQc tmh. MQt thuoc tinh giong nhu mnt thanh phan da li¢u trong lap cua bar nhung lamotdoan rna thi).t sl!. Vi du dirdi cho thily mQt thuQc tinh se duoc t:;10 vi su dung nhu thE!" nao,

#using "mscorlib.dll" _gc class My3Dpoint

{

II ~c Clinh oa.c the.nh ph!n Ie. cue bi> int m_x;

int m_y:

int m_z:

public!

_property int get_x ( ) {return m_x;} ; .:_property void set_x(int value) {m~x=value;}; _property int get_y ( ) {return m_y; } ; __property void set_x(int value) {m_y=value;}; __property int get_z () {return m_z; } ; __property void set_x (int value) {m_z=val ue; } ;

II cac phuong thuc.khac cua 3D 6 Clay

} ;

void main (void)

y c n a

CHl1dNQ 1-2: BO thire thi ngon ngu t6'ng quat

35~

{

My3Dpoint ·pP=new My3Dpoint ( ) i p.P- >x:::l0; / I 99i set_x (10) ; int x ::: pP->Xi / I 99i get_x () ;

}

2.6.4. Ghim (pin) cae gici tri l{J.i

Heap cua GC se thLfb'ng xuyen di chuyen cac d6i tuong' W ch6 nay den eh6 khac trong suot qua trtnh boat dOng ella n6. BAt ell' khi nao ban can truyen mot con tro Mn mot d6i tuong ella .NET hay met ham C++ cua COM, ban co tM ghim cac dili tuong bang viec 80.1 dung tU khoa _pin. Thao tac ghim (pin) nay ngan cam GC di chuyen dO'i tirorig d6 cho den khi n6 khong hi ghim nua.

2.7. Cae ngoai l~ (Exception)

Tat ea cac ngoai I~ trong kien true .NET duqc xU' If bdi eLK CLR cung cap mi)t co che manh va nhat quan trong viec theo vet va xli ly 16i bift ell khi nao chung c6 th§ xay ra.

Cac ngoai I~ trong CLR dung cac deli tinrng exception, thuong diroc dan xuat tu lap System. Exception trong kien true .NET va mot trong b6n bi) xU' If ngoai l~. Cac bO xli If nay la

• Bi) xii ly f i n a 11 y diroc thuc hien bat e(( khi nolo mot kh6i thoat ra. Bi) xii If nay diroc goi trong luc ket thuc blnh thuong ml>t doi tuqng cung nhu khi m{it 16i xay ra.

• B(l xir If fau 1 t chay khi ml>t ngoai l~ dung xay ra.

• B(l xli Iy type- f i It ered phuc vu cho cac rigoai l~ tir ml>t tap cu thil hay cac tap dlln xuat cua n6. Vi du: catch (MyExceptionType e)

• BI> xU' ly user-f i 1 tered co the phat hien ngoai I~ d6 e6 nen bo qua hay kh6ng, diroc xLI Iy bdi bi? xii' 19 duqc lien ket, hay duqc truyen den ngoai l~ ke tiep co hieu IVc.

Moi mi)t phuong thtrc cua moi tap trong cac thu vien trong kien true .NET hay trong rna I~nh ella ban c6 rni;it bang cac bQ xli ly ngoai I~ k€t hcp vdi n6. Cac phdn tii' trong mang mo ta m(lt khoi rna lenh diroc bdo vl;\ va bi) xii ly ngoai 1~ lien ket . vai n6. C6 th§ hoac la khong e6 bi) xu 19 nao, bi) xu ly catch, bq xl! Iy finally, hoac Iii b(l xu 19 fault cho moi phdn tli cua bang. Khi mqt ngoai I~ xiiy ra, CLR tim m(lt ngoai Ii): trong bang phuong thirc d~ dua cho bl> xii lY. Neu mi,it ngoai 11;\ dt.1qe tim thay, quyen dii\u khien duoc truyen den b(1 xli 19 nhu thuang; n€u kh6ng, CLR tiep tuc qua ngan xep (stack) di Mn phuong thuc dang g',li va van van, giu lai chu6i milt rich cae lai goi cho den khi met bl> xii Iy diroc tim thay. Neu mi)t ngoai Ii;: khong duqe tim thay, CLR se k€t thuc ((ng dung va ti~n hanh hi~n thi ngan xe'p.

Khi chung ta di xuyen suot quy~n sach nay, cac vi du 58 dua nhi~u thong tin chi tiet han v~ each tao cac lap ngoai I~ va cac be) xii' IY.

1f!j36

pHAN I: Mo d~u

2.8. H8 tr«j vi~c gCi r6i

Kien true .NET c6 trlnh g<t roi dugc xay d.,rng trong no d mire ra."t thap, Khong nhu cac h';' thong go r6i khac mil cac Iap trinh vien C++ quen sii dung truoc kia, thuong Iii xen vao, CLR thuc hien ta."t ell cac rna l';'nh, n6 quan Iy viec gil rOi va gai cac 51,! kien den bi) ga roi duoc ket n6i bat ell' khi nao can. .

SDK cua .NET e6 cac trmh go rai cua rieng no, them vao do la trmh duoc tieh hop vdi Visual Studio. NET. Ta."t eli cac trinh g<t rni hoat d(lng qua cac API chung duoc cung ea."p boi kien true.

3. KET CHUONG

CLR Iii trai tim cua h$ thong .NET. N6 nap va quan ly cac mil len h, urong tac vai cac cong cu phat tri~n va cac trinh ga rai eho ban, twin thu tinh an toan va bao mat cua h~ thong cua ban, va eho phep ph!1n m,§m ella ban tieh hop vrri cac h';' thong co slin trinrc d6 nhu COM va cac DLL cua nguai dung. La mot thanh phan ella .NET CLR khong chdc rAng ban nghl nhieu ve no chut nao.

Chilling 1.3

NGON NGU TRUNG GIAN IL

Cae van d~ chinh se dil(!c d~ c{ip d€n ~ Lien kiit (Inter-Opt Ngon ngr7

~ Hello IL

~ Ham (functions) ~ Lap (classes)

~ ILDASM

~ Metadata

~ Reflection API

Vao thoi dai cua sv phat tritln phdn mern ngay nay, nhung ngisri phat tri';n g!l:n nhu chi sa dung ng6n ngir cap cao nhu c++, Visual Basic, hay Java dtl vie't cac ling dung va cac thanh phan (components). Co Ie con rat it ngu'oi higu du'qc cong' viec nhtrng ngl1o-i lap trinh xuyen phieu (binary developers) va cung c6 Ie chi con dam ba nglio-i I~p trinh hop ngu,

V~y tai sao IL, Intermediate language, quan trong doi vdi .NET den nhu V?y? Dg tra lo-i cau hoi nay cil.n di II1<1t qua nhrmg dieu co' ban (rna ta thunng gQi la 101 dieu) cua If thuyet ve trinh bien dich. C6ng viec co' ban cua trinh bien dich (compiler) til. phai dieh rna nguon doc duoc thanh rna goc co tM thuc thi eho mQt h~ thong (platform. da dinh. Qua trinh bien dich baa g6m viti giai doan, baa gorn rna khbng hi giCii han ve vi~c quet tlt vung, phan trch , tao cay cu phap truu tucng (abstract syntax tree), tao rna trung gian (intermediate code), phat sinh rna (code emission), trrnh dich hop ngtr (assembler), va noi ket (linking). Hinh 1.3-1 trlnh bay mQt so' d5 Co' ban cua qua trinh nay.

Hinh 1.3-1 TUrn trinli 81/ bien dich.

SI/ tao thanh rna l~nh trung gian (intermediate code) d~t ra mQt cau hoi thu vi: Neu co thg dich mot, t~p cac ng6n ngu da dinh thanh rna trung gian chuan nao

~38

PHAN I: Mil d!iu

d6 thi sao? Bay la ehO rna IL to ra thich ling voi van d~ dat ra. Kha nang dich cac du true ngon ngir cap cao thanh mQt dang chuan, nhu IL, co chu y d~n trmhbien dich co ban dan (single underlying compiler) hay trinh bien dich just-in-time (JIT). Day Iii each thrrc duoc thue hien do .NET.

Vai lei girli thieu v~ Visual Studio .NET, Microsoft cung cap Managed C++, C#, Visual Basic, va ASP.NET, moi ngon ngll nay tao ra IL tit rna nguon tuong Ung ella chung. Cung co mot vai nha cung ciip ngon nga thu ba dua ra cac phien ban .NET W nhung ngon ngu wang Ung cua ho. Hmh 1.3-2 trinh bay tien trlnh bien dich .NET co ban.

Di,:l,u quan trong M chu y Mn la IL khOng duoc thong dich. Dung hon la, h~ thong .NET (.NET platform) stl dung cac ki~u khac nhau cua cac trmh bien dich just-in-time d(i' dua ra rna g6c (native code) til ma IL, Md goc chay true tie'p tren phan cling va khiing cin phai co mqt may ao, nhu a trtlCtng hqp Java vii nhirng phien ban ban diu cua Visual Basic. BAng each bien dich IL thanh rna g6c (native code), hi~u nang lric thuc thi duoc tang can so voi cac ngon ngu thiing dich chay tren mQt may ao, Chung ta se khao sat cac ki~u khac nhau cua cac trrnh bien dich just-in-time sau, (Tu day tr& di chung ta se gni cac trrnh bien dich just-in-time nhu la jitter),

Hinh 1.3-2 Slj bien dicli .NET.

IL HI. ngon ngu tron ven , dua vao ngan xep (full, stack-based language) rna ban eo thg slt dung M cai dat cac thanh phan .NET Mae du n6 khong chac chin duoc dua ra vi muc dieh v~ hieu suat, ban <:6 the' sir dung IL di\ thuc hien n hung van d~ rna ban khiing tM thuc hien vrri C#. Vi du, trong IL, ban co the tao cac ham toan cue va goi chung til ben trong IL.

1. LIEN TAc UNTER-OP) NGON NGU

Kha nang HEm tac (inter-op) mot each li~n lac giila cac ngon ngll da duoc ban de-n tl1 lau, Tren cac n~n Windows khac nhau, tieu chuan d~ ph at tr ien ngon ngu chao nhau la COM (Component Object Model). M9t ding nghe hoan hao da ra dCti rna muc dich duy nhat Iii phat tri~n cac COM component and ActiveX control,

cmrosc 1·3: Ngon ngO' trung gian IL

391fj

sai vi COM La m(jt chudn nhi phan, bilt cli ngon ngfi nao c6 khii nang sU' dung (of consuming) nhirng thanh phan COM La co th@' sli dung chung khOng k~ den ngon ngil' nao dii tao nen thanh phan COM,

M~e du COM dii cho kha nang sli dung lai cac thanh phdn, nhirng n6 con lau moi duoc hoan hao.: Cac ngon ngO' nao d6, nhu cac ngnn ngO' script, chi e6 the sll dung giao dien mac dinh duoc cung cap bdi d6i unmg COM. Ngoai ra, no khong the k~ thira (inherit) mot thanh phdn COM de rna rong chirc nang co ban cua n6. De rna rQng mQt dOi tuqng nhi phan, nhirng ng11Cri phat trien da phai bao thanh phan COM lai, khong La mot phirong phap huang dOi tllgng thij.t sV.

Vai sJ! xuat hi~n cua .NET va IL, nhi1ng trd ngai nhu vay khOng ton tai lau han mra, Bdi vi moi ngon ngu khi da nham vao nen tang .NET d~u hieu ro ban cMt IL va sieu du lieu (metadata) cua thanh phdn .NET, m(jt eilp d(j mrri v~ kha nang heat d(jng lien ke't (interoperability) ra di1i. Sieu du Li~u (metadata) eho phep duyet mQt thanh phan .NET d8 tim ra cac Lap (class), cac phuong thuc (method), cac trui1ng (field), va cac giao di~n rna no chua. D~ tai cua sieu dn lieu (metadata) se duqc trlnh bay a cuoi phan nay.

2. HELLO IL

Vi~e Sll dung IL d8 phat trien cac thanh phan va cac Ung dung .NET co kha nang Ia ban se khong thirc hien duge nhieu viec, Tuy nhien, M nghien CUll that su y~' kien true .NET (,NET framework), viec nam duoc co ban v~ cau true IL La quan trong. NET SDK khong chuyen giao rna nguon co sa. Dieu nay kh6ng co nghia la ban khong' tM nghien ciru viec thuc hien cac thanh phan khac, Tuy nhien, din phai co met so' kien thue v~ IL.

Thong thuong, hAu nhu can thie't, bucrc dau tien trong viec hoc mot ngon ngu mci La hiGn thi thong bao "Hello World" rna ai cOng bi€t tren man hlnh. Thuc hi~n cong vi~c nay chi vdi IL tht khong mat nh ieu cong' sue nhu khi lam cho no phat ra am thanh, IL khOng la m(jt ngon ngO' cilp thilp thuc sV. tva assembly. Tuong tl! nhu hau het cac ngon ngfr hien dai khac, dii co rn(lt hrcng dang M cac khai niem truu tirong ngon ngir IL. Vi du 1.3-1 trinh bay chirong trrnh n5i tie'ng "Hello World" viet bang MSIL.

Vi du 1.3-1 Hello World

1:IIFile

2: IITac gia 3:11

4: II

5:

6: Ildtnh nghia m¢t va I thOng tin assembly co ban 7: .assemby hello 8: {

B:

:Hello.cil

: Richard L. Weeks

9: .ver 10: }

11:

1:0:0:0

~40

PHAN I; M6" dau

12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25:

Ilt.,_o m¢t diem nh~p cho exe

. method public static void main ( ) i1 managed {

.entrypoint .maxstack 1

Iltcii chuOi len de hH~n th:j. 1dstr "Hello World IL sty1e\n"

Ilhitin th:j. ra man hinh

call void [mscor1ib)System.Conso1e: :WirteLine( class System. String )

26:

27: ret

28: }

29:

I)g bien dich vi du 1. 3-1, dua ra dong lerih sau: i1asm he1lo.ci1

Trinh dich hop ngu IL (Il, assembler) tao ra tap tin .NET hello.exe.

Ma I~nh IL hien thi thong baa "Hello World IL style" bang each sa dung phuong thirc static Write ella dili tuong System. Console. Lap Console iii mQt phan ella kieri true .NET (.NET framework) va, nhu each Sl! dung cua no eho biet, muc dich ella n6 la ghi ra ket xuat chuan (standard output).

CM y ding khong can tao mot lap. IL kh6ng 1<1. mot ngon ngu huang d6i tuqng (object-oriented language), nhung no cung cap cac cau true can th iet M mo ta cite d6i tuqng va slt dung chung, IL duoc thiet ke M tao su tuong thich giUa cac cau true ngon ngu va cac kieu lap trlnh. Nhu vay tinh da dang va rong rai trong thiet k€ cua no se tinh Mn nhieu ngon ngu khac nhau M nham VaG thai gian thut thi cua .NET.

/',(;)6· m(Jt. 56 chi.thj (directive) f;OY nghia d!)e bi~t trong Tl.. Cac chi thi (dirtlftHie) nay dliqc trlnb bay 6" bang 1.3-1.

Bang 1.3-1 Cae chi thi cua IL duoc dung trong "Hello World"

Chi thi

Y nghia

.assembly .entrypoint .maxstack

Ten ket xuat cua assembly

Bat dau sl,t tlurc hien cho mot .exe assembly

S6 cac khe ngan xep M danh rieng cho cac phinrng th((, hay ham hien hanh

CHUONG 1·3: Ngon ngu trung gian IL

41~

Chu y rangch] thi .entrypoint xac dinh di€m bAt d!iu vi~c thgc hiencho bat cu .exe assembly nao. Du eho ham ella chung ta co ten main, no co the co bilt cli ten nao rna chung ta muon. Khong giong nhu C, C++, va cac ngon ngtt cap cao khac, IL khOng dinh nghra m(lt ham duoc dung nhu diem khrri diiu cua viec thuc thi. Dung han, IL dung chi thi .entrypoint M dap (ing rnuc dich nay.

Chi thi khac can chu y la chi thi .assembly. IL Slt dung chi thj nay de dat ten ket xuat cua assembly. Chi thi .assembly cling chua so thir tv phien ban cua assembly.

3. HAM (FUNCTIONS)

Vi du Hello World cua IL chi bao ham mot phirong thuc. Gia rna tat ca nhung nhu cau phat trien phan mern dan gian nhu the nay! Bdi vi IL la mot ngon ngu dua vao ngan xep (stack-based language), cac tham s6 ella ham duoc day len ngan xep (stack) va ham duqc goi. Ham diroc go i co trach nhiern xoa b.1t ell tham ' so' nao khoi ngan xep (stack) va My bilt ell gia tri tra ve nao trtr lai ngan xep (stack) cho ngiroi g9i ham.

Qua trinh day cac gia tri vao va lay cae gra tri ra tlr ngan xep goi (call stack) c6 the duoc hinh dung nhu da .trrnh bay a hinh 1.:3-3.

Add function
Program Code
call stack
call stack B8
B8 pop
Push 10
Push 15 0
0
call Add pop 10

pop 25 localresult push rRsult

25

ret

Hinh 1.3-3 Ngtin xep goi tth» call stach).

Hinh 1.3-3 mo til mQt ke't xuA't rift dan gian cua tien trinh th~t su, nhirng cung cap du thong tin M hi~u toan bi? cac buoc him quan. Tu hinh 1.3-3 chung ta dung IL tao ra ma nguon trong vi du 1.3-2

~42

PHAN I: Mci' dftu

Vi du 1.3-2 IL Function Calls

1:IIFile 2 :

3: • assembly function_call 4: { 4 :

5 : . ver 1 : 0 : 0 : 0

6: }

7 :

8 :

:function.cil

9: I I Them VaG phuong t.htro

10: . method public stati? int32 'add' ( int32 a, int32 b) il managed

11: { 12 :

13: .maxstack 2

14: .locals (int32 v_O, int V _1)

15:

16: Iliay c a c tham so t.ir ngan x,§p 99i

17: Idarg.O

18: Idarg.1

19:

20: add

21:

22: IldAy ket qua tro le!ll ngan xep 991

23: stloc.O

24: Idloc

25:

26: ret

27: }

28:

29: .method public static void main( ) il managed 30: {

31: .entrypoint

32: .maxstack 2

33: .locals (int32 V_O)

34:

35: IldAy hai tham so len ngan x,§p 99i (call stack)

36: Idc.i4.s 10

37: Idc.i4.s5

38:

39: call int32 'add' (int32, int32)

40: 41: 42:

stloc.O

1/ lay ket qua a bien cu c bQ V_O

43: / Ihien th:i- ket qua

44: listr "10 + 5 = {O}"

45: ldloc v_a

CHUdNG 1·3: Ngon ngu trung gian IL

43~

46: box [mscorlib] System. Int32

47: call void [mscorlib] System. Console: : WirteLine (

class System. String, class System.Object)

48:

49: ret

50: }

51:

Ma l¢nh ella ham .cil trong vi du 1.3-2 dua ra mot chi thi mci: .Iocals. Chi thi nay du"gc dung M danh truce mot vung cho cac bien cue bi? trong ham hi¢n hanh. Phuong thl1e add diroc di nh nghla i'I dong 10 khai baa mot vung cho hai bien eye bQ. Cac tham 56 du"Q'c truyen den pbucng thirc add se duoc nap vao vung danh tnroc qua l¢nh ldarg. Sau khi l¢nh add diroc gel, biroc ke tie"p La hru tru ket qua va sau d~ My ket qua tra len ngan xep goi,

Plurong thrrc main chi cap phat khong gian cho mot bien CI,lC bo don le. Bien cue bQ nay se duoc dung M giu ket qua duoc tra v~ W phimng thuc add do nguci dung dinh nghla. Qua trinh day' cac gia tr] 10 va 5 len ngan xep (stack), goi phinmg thuc add, va la'"y ket qua tucng irng' duoc mo ta 0 hinh 1.3-3.

Ban rat c6 th;§" da chu y lfmh box a dong 46. Boxing la mot cai gi d6 mrri me d6i v6i .NET. Boxing lam cho cac kieu gia trj, chang han nhu cac kieu eo' sd, dUQ"c xem nhu cac d6i tuong,

4. L(lP (CLASSES)

Nhu da dliQ"C phat bieu truoc day. IL ur no khong la mot ngon ngu hudng' d6i tuong (00 language). Mac du IL hE> tro nhieu ngon ngir nguon (source language) va cac cau true, IL cung cap khai niern ve viec tao cac lap (class), va tao cac the hien (instance) cua lap. Xem xet IL ve viec khai baa va tao cac lop {class) se rho ban hi€iu nhieu han v';' Common Language Specification (CLS). Vi du 1.3-3 trinh bay rna IL cho vi¢c tao va sl1 dung mot lop (class).

Vi d~ 1.3-3 T~o 16' trong IL

1: _ assembly class_test as "class test" 2: {

3 : • ver 1: 0 : 0 : 0

4: }

5 :

6 :

7: .module class_test _ exe B:

9 :

10: / /T9-o m¢t lop Dog vof, hai truong t.oan cue (public //fields)

1ij44 PRAN I: Md d:iu

11:

12: . class public auto ansi Dog extends [mscorlib]

System. Object { 13 :

14: / /cac truong du li¢u chung (public data fields)

15: field public class System. String m_Name

16: . tield public int32 m_Age

17 :

18:

19: / /T9-o m¢t phuong t.htro d~ hil~n thl cac truong

20: . method public hidebysig instance void Print ()

il managed

21: {

22: .maxstack 8

23: Idstr "Name: {O}\nAge :{1}"

24: Idarg. 0

25: Idfld class System. String Dog: :m_Name

26: ldarg.O

27: Idf1d int 32 Dog: :m_Age

28: box [mscorlib] System. Int32

29: call void

[mscorlib]System.Console: :

Wri teLine (class System. String,

30: class

System. Object, 31:

32: 33 :

34:

35: 36:

37 : 38: , .·39,:

40:

class System. Object)

ret

/ / Phuong t.huc khoi d\l'ng (Constructor) .method public hidebysig specialname rtspicialname instance void. ctor ( ) il managed

.maxstack Idarg.O call

8

instance void [mscorlib] System.

Obj ect : : ctor ( )

41: ret

42: }

43:

44: } 45 :

46: .method public static void maine } il managed 47: {

48: .entrypoint

49:

50: .maxstack 2

CHUdNG 1-3: Ngon ngu trung gian IL

45~

51:
52:
53:
54:
55:'
56:
57 :
58:
59:
60:
51:
62 :
63 :
64 :
65: }
65: .l.ocals (class DogV_O)

newobj stloc.O Idloc.O ldstr stfld Idloc.O Idc.i4.3 stfld Idloc.O call

ret

instance void Dog: : • ctor ( )

"Daisy"

class System. String Dog: :m_Name

int32 Kog: :m_Age

instance void Dog: : Print ( )

Tao mot lap trong IL la mot qua trinh kha de. Lap Dog diroc khai bao trong vi du 1.3-3 diroc dan Kwh W lap System. Object, lap d6 la lap err sa cua tat ca cac lap .NET. Trong .NET, cac thanh phan da li~u diroc hieu nhu cac trucJng (field) va cac truong nhu vay diroc nhan hist vai tit khoa .field

£)ii' dinh nghia mot phuong thirc ella mot lap, tat ca nhirng dieu can thiet la phai dinh nghia phuong thuc ben trong pham vi tap vci cai rna phuong thirc d6 thuoc v~. Phuong thuc Print duqc khai baa & dong 20 trong vi du lB-S. Chu y den tU khoa instance ap dung cho phuong thirc Print. Vi phuong thirc Print duoc goi, mQt thii' hien (instance) ella lap Dog can den.

Cung mot (lieu fly dien ra dung deli vdi phuong thuc khrri dung (constructor) cua lap Dog. IL cung dip hai modifier rna phai dinrc ap dung vao cac phuong thiro khdi dung cua the hien. Modifier rtspecialname duqc dung van luc thai gian thuc hien (runtime), nhirng nguoc lai specialnarne dLiqc hi) trq cho cac cong cu .NET khac nhau, nhu Visual Studio .NET.

5.ILDASM

.NET di kern vdi mQt val cong cu, tit cac trinh bien dich (compiler) cho den nhllng ngLioi thiet ke' form. Tuy nhien, cong cu quan trorig nhat, Ia ILDASM, Intermediate Language Disassembler. ILDASM chu y de'n viec quan sat cac assembly khac nhau cua .NET. Khong kil ngon ngl1 dLiqe dung M cai dat assembly, ILDASM co kha nang hiii'n thi IL da dLiqc bien dich,

Cira s6 ehinh ella ILDASM tao mQt sa d6 cay (treeview) trtnh bay chi tiet nQi dung cua assembly trong .NET. SO' d6 cay (treeview) dLiqc nh6m thea khong gian ten (namespace) v6i mcli khong gian ten (namespace) chua mot. hay nhieu khong gian ten (namespace), cau true (struct), 16p (class), giao tiep (interfaces), bay ban li~t ke (enumerations) dinrc l6ng nhau (xem hinh 1.3-4).

~46

r C:W'JItl tH'MiCl'osoft.tIET'oJ'ramewori<\u1.0.2204mscorlib.dll .... 1iJ m

PHAN I: MiJ diu

Hinh 1.3-4 ILDASM vai mscorlib.dll duoc ttii len.

Hay tim met assembly co ten mscorlib.dll trong .NET va dung ILDASM db xem ni)i dung. Tuy thea cai dat cua .NET SDK, the .NET assemblies se dtfqc dinh vi a -crnootdr ive»: \ <windows directory> \Microsoft.Net \Framework\

vN.N.NNN.

a ..., C:WINNT'MicrosoflNET\Framewcrk\v1 .O.2204\msccrlib.clll ~ MAINflEST

i£I ' .. Microsoft Wln32 EI • System

ltl· • System Collection

ttl • System.ComponentM!)clel

tt] • System Configuration Assemblies ff, • System Diagnostic

If) • SystemJD

[f] .. Svstern.Retlection

1.*' .. System .Resources

[t, .. System Thre~ding 8:] .. _ComObiect

FE: .. _DTstring

i£I .. _HResu~

i±l .. _AccessExcepiion

assembly msccrlib ~s "m=orlib"

Thuc hien nhirng SI,I' thay tM thieh hop. Hinh 1.3-5 trinh bay cac ky hieu khac nhau va cac y nghla cua chung trong ILDASM.

Hmh 1.3-5 Bang kj tu ILDASM.

CHl.1ONG 1-8: Ngnn ngU trung gian IL

47~

TnH tim cua kien truc .NET (.NET framework) 18. mscorlib.dll. Assembly nay chua hiiu he't cac giao dien va cac ldp ch~&n lit thanh phan cua .NET. Chac chan co cac assembly khac cho truy c~p CCf sa da lieu (database access), noi mang (networking), tinh an toan va van van, nhung nguon goe ella tit ea d;§u a mscorlib.dll.

Sli dung bang ky tv a hinh 1.3-5, ban co the xac dinh mot each true quan cac kieu thuc th~ can cu trong mscorlib.dll, Tim System.Object va nhap doi van nut do M rna rong no (xem hinh 1.3-6).

I±l

ffi.., Object

i

II> .class public auto anti seriesizable

• Equals: bool (class System.Object)

• Finalize: voidO

• GetExlstingClass: class System,TypeO

• GetHashCode: int320

.• GetType: class System.TypeO

• InternalGetClass: class System.TypeO

• Tostring: class System.stringO r±I . a Operating System

13:1 . ., OleAuBinder

Hinh 1.3-6 System. Object trong ILDASM.

Lap System. Object la lap co sa cua tat ca. cac lap trong .NET. Lap err sa System. Object cung cap chuc nang chi a xe diroc dung suot .NET. TIm phuong thuc ToString va nhap dup n6 M xem rna IL co sa, bao ham ca n6 (xem hinh 1.3-7).

Nhirng nguni phat trien MFC da dliqc lam quen vdi viec c6 rna nguon Visual C++ doi vui kien true MFC (MFC framework) san sang dung cho vi~c nghien cue ella ho. Di@;u nay khOng giong nhu kien true .NET (.NET framework). Hien nay, each duy nhat de dul1C quan sat ij ben dliai lap vo boc IS. phai sil' dung mOt con~ cu rihu ILDASM M xemcach cai di).t cua IL. Mi).c du IL cling khOng d~ doc bAn~ C# hay VB.NET, nhung n6 se giup ban hi~u dliqc cac hoat d(ing ben trong cac lap :NET.

[MJ48

pHAN r . Mo Mu

[H· a Null ReterenceException [fl. a Number

EB· a Object

.. ~ .class public auto anti serializable ..• Equals: bool (class System.Object) ....• Finalize: voidO

...• GetExistingClass: class System TypeO • GetHashCocle: int32()

.• GetType: class System.TypeO

method public hidebs}'sig new slot virtual

instance class System. S bing. T oslnng() il managed

{

II code size 12(0I<c) mexsteck 8 11_0000: Idarg.O

II 0001: call instance class Syslem.Type.S}'stem.Object::GeIType()

I C0006: callvarl instance class System. S Iring. System. Type:: gel_FuIiName(J II_OOOb: ret

II end of method Object::T oStling }

Hinh 1.3-7 Mii lL cho System. Object. to Stringt).

ILDASM cung cap kha nang tao ra mQt tap tin van ban (text file) v6"i rna ngu6n IL hoan chinh cho assembly da dinh trong .NET. Chay ILDASM tU dong l~nh va Stl: dung tham so /GU'I'e cfilenamec-, ILDASM se true ti€p xuat ra t~p tin dil dinh thay vi hien thi GUI cua ILDASM.

6.METADATA

Mbi thanh phan trong .NET chua metadata. Metadata rna ta cac kigu runtime, l6"p (Idp), giao tiep (interface), diu true (struct), va tat ea cac thuc th~ ben trong mQt thanh phan .NET. Metadata cung eung cap cac thOng tin v~ cai dat va btl trl rna .NET runtime si't dung d(\ dung eho JIT bien dich ma IL.

Metadata e6 th~ dung duoc tat ca cac cong cu qua hai t~p API khac nhau. d d6 Wn tai mOt ~p 0 mac thap (low-level), cac unmanaged API va mQt t~p cac managed API m~ 06 tM dliqc sU' dung M t~p hop thong tin v~ met thanh phan .NET. d d6 cung t6n tai mQt t~p cac API M tao Metadata. API nay ducc si't dung boi cac trmh bien dich trong suilt qua trinh bien dich m<)t ngon ngtr ngu6n da quy

CHl10NG 1-3: Ngon ngfr trung gian IL

491!!J

dinh thanh IL cho .NET runtime SV roo t:i day du v~ cac API cua Metadata va co sa ha tang se can phai co mi)t quy~n sach khac, nhirng quyen sach nay se trlnh bay ml)t phan nho VEl each sa dung Reflection API di'l xern xet mot thanh phsn .NET.

7. REFLECTION API

Reflection mn ta m9t co che' eire ky manh d~ lam viec vdi cac thanh phan .NET. Do sl't dung reflection, cac thanh phan .NET co th~ duqc nap d¢ng va ni)i dung cua chung dtroc tim ra luc dang thirc hi~n. Metadata la di~m chinh yeu cua chuc nang nay va nhu vay, Metadata co th~d)Jqc xet den nhu mot type lib cli co trong kien truc COM.

CLR .NET cung cap thong tin ki€u runtime r5 rang va cung cAp mot lap System.Type. Sau khi ffi9t thanh phan .NET dLiqc nap, IlIC do co th~ nhan duqc ki~u hay cac ki~u diroc chua trong goi assembly da dinh, Btl rno phong sue manh cua Metadata va Reflection API,b~n tao met t~p tin van ban dij.t ten imployee.cs vii chep vi du 1.3.4 vao do. Bien djch vi du, dung cau lenh sau:

esc It: library employee. cs

Cau lenh nay se xay dirng goi assembly employee.dl!.

Vi du 1.3·4 Em loyee Class

1:/IFile

2: IITac gia 3 : I/M1,lc dich 4:/1

5:

6: using System; 7 :

8: namespacce Stingray { 9 :

10:

11: 1~: ':L'3Y: 14: 15: 16: 17 : 18: 19: 20: 21: 22: 23: 24:

:employee.cs

: Richard L. Weeks

: T9-o mot; thanh phAn . NET va SU' d1,lng reflection API de xem thanh phAn

/ IT9-o m¢t lOp co ban p1,lblic class El'(Iployee {

Ilcac thanh phAn du: lii;!u rieng private string m_FirstName; private string m_LastName;

private string m_'l'itle;llten t.ac vu

Ileac d~e tinh chung (Public Properties) public string FirstName {

get { returnm_FirstName; } set { m_FirstName = value; }

}

~50

PnAN I: M& da.u

25: 26: 27 : 28: 29: 30: 31.: 32: 33: 34: 35: 36: 37 :

38:
39:
40:
41:
42:
43:
44:
45 :
46:
47:
48: }
49: }
50: public string LastName {

get { return m_LastName; } set { m_LastName = value; }

}

public string' Title

get { return m_ Title; set { m_ Title = value; }

.}

IICAc phuong thuc chung (Public Methods) public void ShowData ( ) {

object [1 args = { m_LastName, m_FirstName, m_Title }

Console.WriteLine{"***************\n") Console. Wri teLine ("Employee : {O}, {1} \

nTitle :{2}\n",args)

Console.WriteLine("***************\n")

}

IICacphuong tb\l:c r.ien~ (private methods). private void Update ( )(

IITIiVC HI$N: C<}p nh<}t thOng tin Employee

}

Lap Employee thuoc ve kh6ng gian ten stringray va chua ba thanh phdn du li{!U rieng (private). tuong ung vci ole thuoc tinh chung (public), va hai phuong thuc. Sa dung Reflection API, n6 c6 th~ nap met each nhanh chong employee.dll luc dang thuc hien. Sau khi assembly ducc nap, tat ca cac ki~u duqc chua trong assembly eo th~ duqc can de'n va Metadata cua chung duqe truy ci,\p. Vi du 1.3·5 sa dung Reflection API M quan sat mQt thanh phan .NET.

Vi du 1.3·a Metaview Source Listing

l:I/File

2: /ITac gia 3: I/M\1C dich 4: 1/

5:

6:

7: using System;

8: using System. Reflection; 9:

10:

11:

:Metaview.cs

: Richard L. Weeks

: DUng Managed reflection API d~ duy~t m¢t thanh phan • NET

51~

cmroxo 1-3: Ngon ngu trung gian IL

12:
13 :
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37 :
38:
.U 39:
g 40:
II 41:
.g 42:
Hi
43:
• 44:
45:
46:
47:
48:
49:
50:
51:
52 :
53: public class ClsView {

public static void Main ( String [] args) {

try {

I /N~p assembly

Assembly asm '" Assembly. LoadForm(args [0]);

/ /Lffy cac kiE!u (Types) diroo chua trong //Assembly

System.Type(] Types :asm.GetTypes();

/ /Hien th~ thOng t in co ban v~ mOi kit'!!u foreach ( Type T in Types ) {

Console. Wri teLine ("Type {O} II ,

T.FuIIName); DisplayFields ( T ) ; DisplayProperties ( T ) ; DisplayMethods ( T ) ; Console.WriteLine(""};

}

}catch( Exception ex ) { Console. WriteLine ( ex ) ;

}

}

public static void DisplayFields ( Type T ) { Console.WriteLine("*****[DisplayFields] *****"}; Fieldlnfo [] Fields = T. GetFields ( System.Reflection.BindingFlags.lnstance 1 Syatem.Reflection.BindingFlags.Public 1 System.Reflection.BindingFlags.NonPublic );

foreach ( Fieldlnfo F in Fields)

Console. Wri teLine ( "FieldName = {O}", F _Name) ;

}

public: static void DisplayProperties ( Type T ) { Console.WriteLine{"******

[Display Properties] *****"); System.Reflection.Propertylnfo[]Propertiea

~52

PHAN I: Ma d&u

= T. GetProperties ( System.Reflection.BindingFlags.lnstance System. Reflection. BindingFlags .Public I System.Reflection.BindingFlags.NonPublic );

54 :

55: foreach ( Propertylnfo pi in Properties

56: Console. WriteLine ( pi. Name);

57: }

58:

59: public static void DisplayMethods ( Type T) {

60: Console.WriteLine{"******

[Display Methods] *****") i

61: System. Reflection. Methodlnfo [] Methods

= T. GetMethods ( System.Reflection.BindingFlags.lnstance I System. Reflection. BindingFlags .Public I System.Reflection.BindingFlags.NonPublic );

62:

63: foreach( Methodlnfo mi in Methods)

64: Console. WriteLine ( mi. Name );

65: }

66: }

Vi du L3·5 sil' dung cac Reflection API co ban nhat d4 me. ta chi tiet thOn€ tin vfi mlii trmrng (field), thuoc tinh (property), va phuong thuc (method) vo employee assembly duoc len. M~c du ngon ngil C# con chua duoc khao sat den phan Ian rna l¢nh se n6i ro ban than difiu d6. Ban hay thii thuc hi¢n mQt phier ban thiet thuc vEl Metaview, hoan toan vdi Windows Forms GUI. MQt du ar (project) C\I the se rat co the lam tang them su hieu biet ella ban vEl .NET va t~I hop phong phu cac Me tinh rna no eung cap.

8. KET CHUONG

Chung ta da di qua nhieu van d~ co ban trong chuong nay. Cac van dEl de bao gom n, ILDASM, metadata, va kien true Reflection.NET (Refleetion.NEl framework). Chao chan kien true .NET dem lai mOt lai knuyen v~ tuong lai cuas, phat trien phdn mem, Khong eon nea mQt rao can ngfm ngil'; M th6ng .NET hi tro cac ngon ngtr nham vao kha nang thuc h ien lien kilt t6t hdn, cho den bay gia di,§u nay khong de dang sit dung hay rna rong,

Da qua nhii'ng ngaysii dung cac tij.p tin IDL va DEF M rna til. cac giao dier duqc dira ra bai cac d6i tuong. Dung han, tat ca cac d6i tuong, cac giao tiilp, va ca: thanh phan duoc rna ta day du voi metadata. Nhung nha phat trien quen thuoc va Java se thay ro quyet dinh gAn Reflection vao .NET brn VI n6 h6 trq mqt CCi chi manh ln~ d~ keo dili s1,l'son.g cua cac ililg dung va sa dung cac thanh phan mdi mQI each nang dQng.

n

ChltOJJg 1.4

LAM vrec VOl BQ QUAN LY C++

Cdcrv6nd~ chinh se dude d~ cap den:

./ Cae tit khoa rna r(Jng ctla c++

./ Su dlfng B¢ bien dicli (Compiler) C++ clio trinh C++ duoc qudn If ./ Cae tap thu gom rae (Garbage Collected)

./ ChI dan (directive) #using

./ Chu6i (String)

./ Tron. Lan cac ma l~nh duac qutin If (Managed) va kh6ng dUr;1e qudn ly

. (Unmanaged)

./ CMt ch()t (pinning) cac rna lenh. duoc qtuin. Ii

./ Cae Giao dien duoc qulin ly (Managed Interface) ./ Too l(j.p cdc kieu gia tri (Value Type)

./ Tao va su dung Mo hinb. uy thiu: (Delegate)

./ GQi cdc DLL .NET tuy bien tit cae rna. l~nh C++ duoc qudn Iy (managed C++ code) cua ban.

./ SI1 d¥ng cae DLL managed c++ va Unmanaged C++ trong cluamg trinh. .NET cua ban

./ Dung cae th.uoc tinli (Properties) trong cae lop ella ban

./ Baa dam vi~c sap xep va d6ng g6i cae edu true C++ ctia ban.

6 r if. (i

Trong chuang trircc chung ta dB. xem sa v~ bQ rna r(lng ducc quan Ii (managed extension) cua C++ nhu rn(lt each M sil dung cac ky nang ve C++ cua ban, eung nhu moi truang dl1(1c quan Ii (managed environment) cua .NET hay nhu mot each M ban dung lai (reuse) nhtrng doan rna IMh dB. co cua mmh. Ne'u ban la m(lt l~p trinh vien C++ kinh dign va dang tim each chuygn sang .NET, cau hOi thllng dung nh!t trongdau ban se la "Toi co tM bao v¢ tat cit nhimg gl dB. d<iu tu: vil.'o ina l~nh c++ khong?" va "Lii,\u toi e6 thl! de dang dung chung, c++ va C# k'h6ng?". May thay, dua VaG kha nang cua cac ky sir Microsoft, ca hai cau hOi tren d~u nh4ndl1(1c Ilhil'rig cau tra Uti tich cue, Ban hay tharn quan vung Mt cua be) rna r¢ng ditl1C quan ly cua'C++ va cam nhan item noi nao ban c6 thil d~t nhi1ng rna l~nh cu "ao trong th€ gidi mdi cua .NET.

BO rna rOng dlfqc quan Ii them vai ttt khoa mdi vao ngon ngU' c++. RO rang thOng I!y lam thich thU' il d~ tranh ciii vil ngon ngii', tM nhirng hay nhc rang' trong tht,ic te', Managed C++ khong dinh siJa d6i cac d~c ta ANSI rna no hua hen

s,

1!l54

PHAN I; MiS' diu

nhieu lei ich tU b{\ thuc thi quan If dircc (managed runtime} lai khong phai ganh la'y nhung va't va cua viec phai hoc m{\t ng6n ngf! hoan toan mol. 0 m{\t mat khac, trinh bien dich VS .NET C++ thuc ra tunng thieh voi ANSI nhieu han cac vi ti~n bOi khi S11 dung i'J che' d{\ C++ g6c (native C++). Khi dircc bien dich theo ki~u C++ . thOng thuong, trlnh bien dich sinh ra cac rna doi tl1qng x86 d~ lien ke't (link) theo

ki~u thong thuong. Khi ducc dung d~ bien dich cac Managed C++, thong siS /CLR cua dong I~nh duoc sli dung d~ tao ra cac IL.

_astract

1. cAc TV KHoA MO RQNG CllA C++

_box

Chi ra rAng lrip nay la lop truu tuong va can cai d~t mot so hay tat ca cac phuong thlie cua no.

T1).o mqt diSi tinmg diroc quoin Iy tU mot kieu gia tri nhu cau true hay bien. Dbi tinrng box thi duqe cap phat tren heap cua Bo Thu gom Rae (GC - Garbage Collected) va sau d6 diroc GC quan IY·

La cau tra lai cua .NET eho callback. N6 la mot khai bao eho an chi cua mi}t ham nham cung cap thong tin v~ kieu tra v~ va cac tham siS cua ham d6. Khai bao cua Mil hinh uy thac (delegate) cho phep khOng chi cac thanh vien static rna ca cac thanh vien tM hien cua mot lop diroc gci. N6 cung dvqc dung M anh xa m(\t b(\ xi'f Iy sl! ki1)-n (event handler) ling voi mot tac nhan kich thich (stimulus) nao do. Co hai ki~u cua Mo hinh uj thac: Single Cast va MultiCast. Chung cho phep goi hoac la . mot, x11 ly sl! kien dan gian hoac 18. mot chuoi cac xu ly cho m(lt ; tac dqng.

_ge Lam cho cac lap hay cau true cua ban co th~ duoc quan ly Mi bQ thuc thi GC.

_delegate

i den t i fie r Cho phep ban dung cac tU khoa cua c++ nhu cac dinh danh, vi du nhu class hay for. TEd li~u cua Microsoft no i rang vi~c su dung chung chAng qua la do phong each.

_lloge Khai bao di.ng tM hien cua cau true hay lap khOng nen duQ'C quan ly bi'Ji bQ thuc thi GC.

_pin Duqc dung M ngan can co che. nen cua GC khOng di chuyen lap hay ki~u dil lieu duqe quan IY. Mbi khi mot tM hien mQt do'i tl1qng dvqe eh6t chat (pin), n6 phai ducc tham de'n bang met eon tro. MOt diSi tucng khong bi ehiSt chat giong nhu "troi di dliai chan ban" do cac hoat dQng cua GC se ehuy~n cac do'i tl.tqng M don sach heap. Vi~c nay co tM eo ke't qua tai hai!

__property Cac lap cua ngon ngf!C# co th~ dua ra cac thuoc tinh, gi6ng nhu cac thanh phan dil lieu cho cac diSi tuong ben

o a c c

_value

CHUONG 1·4: Lam viec vdi b¢ quan ly C++

55~

va duqc thie"t lap quyen doc hay viet bang each goi ham' get_ hay set_. Trong thuc te, cac thuQc tinh c6 th~ thl,tc hien IDQt so tinh toan va truy nhap vao cac ham khac, khi sa dung cac dii' li~u diroc cung cap cho bQ truy c~p (accessor) set hay tnt(1c khi tra v~ gia tri cho bQ truy c~p get.

Co hai each dung. N6 co th~ dlfQ'c dung nhu mQt di~u chinh lop M cho biet rang lop TIlly khong dlfQ'C phep ddn xuat, N6 cling con c6 th~ dung nhu mot chinh Baa tren cai d!)t cuoi cling cua mot phirong thirc ao nao do M ngan khOng cho chung bi viet chong (override).

Cho phep ban thlt chuyen mot lap sang mGt ki~u d~c biet nao do nhung Be dira ra (throw) mQt ngoai l~ (exception) neu chuyen khong dircc trong thai gian thirc thi. CU phap cua n6 nhu sau:

_try_cast <type_id> (expression)

_sealed

.....,..try_cast

_typeof

g .c

y a )t

Neu viec chuyen ki~u khong thanh cong, System::lnvalidCastException Be duoc goi, _try _cast nen dlfQ'c dung trong thai gian xay dung ve. thfr chuang trtnh va sau do duQ'c thay the boi static_cast hay dynamic_cast neu ciln

tnl. v~ System::Type cua doi tuqng da dugc khai bao. Tuong tv nhu Iobjectl-c-Get'I'ypel) d.n mQt tM hien cua mot doi tucng, W khoa _typeof c6 th~ tra v~ kii!u cua mQt khai bao trw tuong, vi du:

1i

MyObjct 0;: new MyObject;

Type *pt ;: 0- >GetType ( ); / I cdnrnot thf hi~n ella m!)t MyObjeet

Type *pt2;: _ typeof (MyObj ect) ; / I khOng edn mot thf hi~n cua MyObject

vi ,It

ac Lie ao hi di LI)t

Cau true va cac lop dan gian c6 tM dl1Q'c chuy~n sang ki~u gill trj dlfQ'C quan Iy bang each dung di~u chinh nay. MQt ki~u gia tri co th~ duCJC 'Cap phat tren heap GC va co thi! doi lai trong thai gian thuc thi bCri GC khi chung khong con dlfQ'C cAn nlla. NM rang, kit'lu gia trj nen dlfCJC gill don gian nhat b&i vi c6 th& se xdy ra bung n6 (overhead) khi chung duqc su dung,

2. SU Dl)NG TRINH BIEN DICH c++ CHO MANAGED C++

Trinh bien dich co them ngAt chuyen (switch) dong ll$nh ICLR c6 th€ nhan I;l~gidn:g rnA l~nh nen dl1qc bien d!ch cho ngOn ngu th\l'c thi chung (Common Language Runtime).

Sa dung ngiit chuy€n ILD se 40 ra mot DLL thay vi EXE.

Khi sa dung trinh bien a che dQ nay, trlnh lien ke't (linker) se 11)' di;ing tham gia vao viec tao ra mot ~p tin co kha nang thuc thi, tij.p tin nay c!n co .NET CLR

~56

PHAN I: Mil' dAu

khi chay. Di~u nay cung e6 nghta la ban khong tM' tao ra cac t~p tin c6 tM thuc thi va chay chung tren hi,\ th6ng khong M tro hi,\ th6ng thuc thi .NET. Ban c6 tM tAt bttCre tao WIn ket bllng each dung nglit chuy~n dong I~nh Ie. Trong trttang hop nay, IDi?t t~p tin .obj dttqc tao ra thea killu omh thuong,

Ban e6 tM dung tuy chon /link cua trmh bien dich d€ chuyen phan con Iai cua dong lenh trl,tcctiep Mn trinh lien ket (linker). Chi dan !link Iii. hill Y cu6i cung v~ trlnh bien dich. TAt ca cac chi dan khac d~u se duoc chuyen den dong Wnh cua trlnh lien kilt (linker).

3. CAC L(SP THU GOM RAC (GARBAGE COLLECTED)

Cac lop c++ thLiongduqe cAp phat tren heap hay stack khi can thiet. Cac 16p dttqc cAp phat bhg ttt kh6a new thl phai diroc xoa theo thir tl,l' M phong tranh 10 h~ng trong vung nho, Cac lop thu gom rae dLiqc cap phat tren heap cua GC, J~ thuoc vao viec quan ly vorrg dOi vii. st! dich chuyen ella GC, va se bi x6a (delete) khoi h~ th6ng chi khi tharn khao cuoi cung de'n chung diroc giai ph6ng.

Khai baa cua cac J6'p thu gorn rae duai Map-aged C++ thl nhu sau:

_gc class SomeClass {

};

Dual .NET, tilt ell. cac 16'p khong e6 16'p co so ro rang se diroc dAn xuat ti'i Systern::Objeet. Cac J6'p Managed C++ duoc khai bao v6'i _ge cung con duqc them vao bll.ng each nay nhc trrnh bien dich. Cac 16'p co sci co cac phirong thuc rna ban c6 th~ override di\ tang eLii'1ng sl,l' nrong tac giUa cac lap GC cua ban va h{\ thong. Xern cac phuong thuc ella System::Object trong tal li{\u ella .NET SDK M bie't them chi tie't.

4. CHi DAN (DIRECTIVE) #using

#using co th~ duqe xem nhu tuong duorig li,\nh import va n6 duoc dung M tham khao de'n cac thu vien ella .NET. Vi du, M dung cac lap cua kien true .NET trong rna li)cnh C++ ella ban, ban ~o th€i'dung nhu sau:

#usingcmscorlib.dll>

Khai bao cua namesape rna ban cdn nen duoc dua ra ngay sau chi dan nay. Vi du 1.4.1 trlnh bay each tao lap mOt ling dung dan gian chua lap GC.

Vi du IA.I m arrajre d.cppr M(?t ca i nhin han d:i.u vi' Cu' ch[: thu gum r:ic

#using cmscorlib. dll> / / import thu' ui?n using namespace System; / / khai bcio namespace

_gc class MCPPDemo.

I

caudNG 1-4: Lam viec vdi hi} quan If c++

57~

public:

void SayHello() {

Console: :WriteLine ("Hello Managed C++");

}

} ;

void main ( ) {

MC,PPDemo ·pD=new MCPPDemo; 'pD->SayHello();

}

d day c6 vii di~u phai giai thich them. Thu nhat hi, co mot su khac biet ro r~t giUa "#using" va "using namespace". Chi Mill #using chi den mot DLL se dl1qc nhap vao (import). Con using namespace giu y nghla truyen thong ella no. T'iep theo la, ham main tao ra m{lt con tro va ian mQt lop mci VaG n6, dung nel nhirng lai kh6ng xoa no khi thoat ra. La thay, dieu nay lai dung bdi vi tU khoa _gc da dl1l,1c ap dung VaG dinh nghta cua lap, cho phep no dl1qc quan If bdi trinh thuc thi (runtime) .NET. Co che' thu gom rae tu no se quan tam den vong dfJi cua nhirng doi ~lIQ';t'lg :nhll.Y4yv3sex6a (delete)ch(J.ng khi b~~ khong dung chung ni1a.Ket qua 1a sekh6ng e6 16 h6'ng trong vung nhc (memory leak).

Bdi vi cac lap ~gc thi dl1qc dac che' tren heap duoc quan If, ban khOng tM tao met thi'i hien trim stack thea kieu:

MCCPDemo d;

Neu ban thii dung, ban se nhan duoc m{lt 16i. Ban phai luon luon tao fa cac lap GC bling wan ttt new vii. dung chuyen "->" khi ban truy xuat den cac phuorig thuc hay da lieu cua no. Day la mdt dieu khac la cua Managed C++ bci vi C# va cac ngon ng(1 dl1gc quan ly khac dung dau "." di'i tham khao den cac thanh vien cua lap.

Neu ban muon chay chuang trrnh trong vi du 1.4.1, hay go n6 trong Notepad, luu lai no trong t~p tin managed.cpp va sau d6 dung dong lenh sau dP bien dich chung:

CL ICLR managed. cpp

N6 se tao ra managed.exe, va ban co th~ chay chung til dong l~nh. Luu y ve sl! thitu hut ro rang cua buc:k lienket, Trinh lien ket se tv dOng tham gia van qua trlnh 116,

Ili!d 58

PHAN I: Ma dil.u

5. CHUC)I (STRING)

IDe'n true .NET ho tro manh me cho chuci. Namespaee System co lap System. String co th~ duqe dung M hill gili van ban (text).

Bi;> rna rong diroc quan ly cua c++ con cho phep ban sd dung System. String thong qua b(i rna rong String.

Ban co th~ dinh nghta mot chuBi duui Managed C++ nhu sau:

String *pS :;;; S"Hello world";

Cac chudi nay duoc tao ra tren GC heap va chiu su quan ly dong drri,

Lu'U y ti~n to' S trudc chuoi ky tu. T1t ca tM hien ella cac chuoi c6 ti~n to S Ia cil.n thiet cho cung m(it chuci. Mot chuoi con co th~ co ti~n t6 L. D:1u hieu nay cho bie"t no la mot chuni ky tu rQng (wide character string}:

String *8 == L"This is a wide string";

Miii chubi la bat bien. Moi khi ban dil. tao ra no thi ban se khong thi! thay doi no. Tuy rihien , co nhung' phuong thuc cua d6i tugng String cho phep bll-n tao chubi moi, thay d6i chuoi tU nguyen mau, Ngoai ra, con co kip StringBuilder co th~ tro giup cho qua trl.nh d6.

W du 1.4.2 trinh bay mot minh hila.

Vi du 1.4.2: sta-In s.c p: Sii' durig' Managed String ella C++

#using <mscorlib.dll> using namespace System;

void stringcompare (String *a, String *b) {

Console: :WriteLine ("a=\" {O} \" b=\" {1} \" same string? {2} \nn, a, b, a==b ? S"true" : S" false") ;

}

void main ( ) (

String* a:;;;S"Hello"; String* b=S"Hello"; StringCompare(a,b); a=a->Concat(a,S" World"); StringCompare(a,b); a=a->Remove(5,6); sStringCompare(a,b);

}

Them vao chuM String dil. sAn sang nhu rnot, ki~u goc, con co m(lt s6 la duoc thie't ke' di).e bi~t d§ thao tac cac chuci. Lap StringBuilder co sAn ?J namespac System::Text, vii. bl) ghi luong (stream) cho chuoi disrc goi Ia StringWriter namespace System.rl'O.

cHl1dNG 1·4: Lam viec vrri b(J quan ly C++

59~

L6'p StringBuilder cung cap mot tap cac chirc nang thao tac nhu them cac ky tt,t vao met, chuoi hC1~C d.t mot chu6i con tit gifla mQt chuoi. StringWriter cung cAp m(Jt giao tie'p kieu lu6ng (stream-style) cho chu6i va cho phep ban dung cac chirc nang dinh dang chuoi kigu .NET thay vi luon phai phu thuoc vao sprintf. Ngoai ra eon co lap StringReader di! doc chu6i thea luung khi no nAm r'1 m(lt ti_ip tin nao do.

Cac vi du vi! String Builder va StringWriter narn trorig mot ,,6 vi du trong phan con lai cua chuang nay, Mc biet la vi du 1.4.10.

6. TRQNCAC MA L~NH DU(1C QUAN LY (MANAGED) vA KH{)NG DU(1C QUAN LY (UNMANAGED)

Tren cac rna I~nh uUQ'c quan Iy va khong dtrcc quan ly kha Iii dan gian, nhung n6 phai thea cac huang d<1n.

B~ tao (hay baa tri l mot kh6i cac rna lenh khilng duoc quan lY. ban can gidi han rna I~nh bang cac chi dan #pragma_unrnanaged va #pragma_managed khi can. Vi du 1.4.3 trrnh bay mQt ham bl:ing rna l~nh khOng diroc quan lY.

Vi du 1.4.3 Sli' dung # ragma_unmanaged

#pragrna unmanaged

void timestwo (int * pToMultiply) {

*pToMultiply *= 2;

}

#pragma managed

Nhu ban co th~ t.hay, ham timestwo nhan mot so nguyen dang gan vao con tro pToMultiply va auqc coi nhu rna l~nh khong duoc quan Iy brri vice slt dung chi dan #pragma_unmanaged.

7. CH6T CH!T (PINNING) cAc MA L~NH MANAGED

Dean rna l~nh trong vi du 1.4.3 se e6 van d~ ne'u nhu ban muon truyen mot con tro den rnQt s6 nguyen thuoc v~ ki~u diroc quan IY. Ban se nhd rang cac ubi tuong duoc quan ly co the" duoc dich chuyen trong bQ nho cua he thong nen GC, vi th~ con tro truyen Mn rna I~nh khong duccquan Iy se phai du'Q'c bao dam rii.ng kh6ng bi dich chuyen. No diroc thuc hien bang viec chat chat d6i tunng (; mot noi bl:ing tU kh6a _pin.

Vi du 1.4.4 rninh hoa each mQt d6i tuong rna I~nh duoc quan Iy co th~ hi ch6t Iai de" cho phep dung met con tr6

Vi u y. 1.'1. t pinncd.cpp: Gia ch;J_t con tro bling each ehbt ch<)t

#uBingcmscorlib.dll>

PHAN I: M& d§.u

using namespace System;

_. _value struct Managedgtruct {

int p; int q; } ;

#pragma unmanaged

void timestwQ(int* pToMultiply) {

*pToMultiply *= 2;

}

#pragma managed

void main ( ) {

ManagedStruct * .pStruct=new M~nagedStruct; pstruct->p=l;

pStruct->q=2;

int __pin* pinnedp=&pStruct->p; int __pin* pinnedq=&pStruct- >q;

timestwo(pinnedp); timestwo(pinnedq);

Console: :WriteLine {"p= {O}, q= {l} ", _box(pStruct->p) , _box(pStr~ct->q»;

}

8. cAe GIAO TIEP DU(1C QUAN LY (MANAGED INTERFACE)

T(t kh6a _interface co thif dliqc dung de tao ra giao tiep kieu COM vdi it kh6 khan nMt va khong elm lDL. Tli kh6a nay khiing duoc li~t ke iJ phAn d§.u cua chuang bo-i vi no ap dung cho cong nghe khac,

TIIY nhien, khi duqc SU" dung chung v6i phftn rna rong duqc quan Iy _gc, no tao ra mOt giao ti€p duac qUlin If. M(jt giao ti€p dan gian se dliQ'c giai tbieu d vi d!J1.4.5.

CHUONG 1-4: Lam viec vdi hi) quan ly c++

61~

using narnespace System;

~gc ~interface IDoSomething {

string * SayHello ( ) ; } ;

_gc class CDoSomething : public IDoSomething {

string * IDoSornething :: SayHello() {

return new String ("Hello") ;

} ;

voidmain( ) {

CDoSomething* pD=:new CDoSomething ( ) ;

IDoSomething*pI=static_cast<IDoSomething*>(pD);

String* s=pI->SayHello(); Console::WriteLine(s);

}

MQt thuan Iqi Ion etta viec ket hop cac doi tuung' duoc quan ly '{a giao tiep lit viec trinh bien dich co th~ hii trq cho cac ten nhap nhling cua cac phuo'ng thuc, Neu ban co hai giao tiep vdi cac phuong thire co cung ten, ban co th~ chi ra nhtrng cai dij.t nao se di cung vdi giao tiep nao. Vi du 1.4.6 chi ra cae giai quyet cac giao tiep nhap nhang.

Vi du 1.4.6 Ambigous.epp: Giai uye't cae giao tie'p nh~ nhf.ng

#using<ms.;:orlib .dll>

using namespace System;

_gc ~interface IFirst {

void TheMethod ( ) ;

} ;

_gc _interface ISecond

{

void Tl?-eMethod ( ) ; } ;

~62

_gc class AClass : public IFirst, public ISecond {

void IFirst: : TheMethod ( ) {

Console: :WriteLine ("Invoked IFirst: : TheMet hod " );

void ISecond: ; TheMethod ( ) {

Console: :WriteLine ("Invoked ISecond: : TheMet hod " );

}

} ;

void main() {

AClass* c=nelll AClass () ;

IFirst *pF=static_castcIFirst*>(c);

ISecond*pS=static_cast<ISecond*>(c);

pF->TheMethod();

pS->TheMethod();

}

Lrip AClass phiin biet giua hai dirih ngh ia cua giao titp bang each chi' fO phuong thirc TheMethod duoc cai dat.

9. T~O RACAc KIEV GIA TRt

Kien true .NET nhan ra hai ho kieu: cac kieu gia tri va cac ki~u tham chieu, Cac kieu gia tr] la cac cau true nho tirong dbi dan gian, duQ'c tao ra va dung true tiep trong stack. Kieu tham chieu Iii cac d6i tuqng d.n thiet trong quyen han cua chung, duqc tao ra tren heap duoc quan lv, va duqc b(l thu gom rae quan [9 vong doi.

M¢t kieu gia tr] phai Iii. mot kieu luu trl1 dan gian nhu int hay float. No cung eo the Iii. mot cau true hay lop nho nhu time_t hay CPoint. M(it kiElu tham chieu la met lop, giao tiep, mang .. '

Cac kieu du Iieu duoc tao ra va sa dung tren stack thl khong thuoc sl! quan 19 cua GC Mi VI chung duqc xoa kha hi~u qua bang each dich chuyen con tro stack khi no di ra khoi pharn vi. No ngu y rang chung du<,1c tao ra kha dan gian va tan rat it thai gian de quart IY. Co the se can thiet de tao ra mot cau true tren stack

CHudNG 1·4; Lam viec vci bO quan Iy C++

63~

va truyen chung den cac ham khac. Vcri Iy do nay. bO thuc thi duoc quan Iy dung ky thuat dong hop (boxing) cau true don gian trong mot doi tuqng baa boc dang giu ban sao cua di1li~u goe nhung da bi gan lai tren heap duqe quan IY.

Nham chuan bi cho e{(u true dan gian cua chinh ban de' dung nhu mOt kieu du lieu.vban co the" dung tU kh6a _value:

_value struct Birthday

{

int day; int month; int year;

}

Cling luu y rang tlt khoa _value khong tac d(ing den tLt kh6a _ge, hoi vay n8"u ban muon gan duoc kieu gia tr] cua mmh t.ren vung heap duoc quan ly, ban phai dung ca hai dieu chinh nhu sau:

_value _gc struct Birthday

{

int day; int month; int year;

LlnlY

Thu tu ella cae dieu chlnli Iii. quan trong, Neu ban dung _gc _value. ban se bi Mi ..

Vi du 1.4.7 trrnh bay mot ky thuat co the lam cho bilt ky I~p trrnh vien c++ nao cung phai nan long. N6 tao cac gia tri dan gian tren stack nOi bO va truye n can tro den chung M g6i gon chung trong mQt tap hqp. Vcri C++ khOng diroc quan ly, n6 c6 the tao ra mot 16i tai hai khi t;%p hop d6 co ga.ng de tharn khao den cac item rna hien da (I ngoai pham vi. Duoi Managed C++, bO thu gam rae se quan 1.9" dong doi cua cac gia tri dliqe tham khao den va se khong eho phep chong bi x6a eho den khi ta"t ca moi thu d~u di ra kh6i chung,

Vi du 1.4.7 refdemo.c p: Kigu gia tr] duoi su di~u khi&n ella GC

#using <mscorlib.dll> using namespace System;

using namespace System: :Collections;

_value struct simple

int i; float f;

} ;

_gc class refdemo

{lJ64

PHAN I: Mit dau

{

ArrayList * 1;

public:

refdemo () {l=new ArrayList; }

void Add(Object* o ) {

l->Add(o) ;

}

void create (int n,Object **pO}

{ "

simple s;

s.i=ni s.f=n*3.1415926; *pO =~box(s);

}

void init () {

for(int x=OiX<10iX++) {

Obj ect" *pO; create(x,&pO)i Add(pO} i

}

}

void show () {

for (int x",O; x c L> >get_Count (); x++) {

try {

simple*pS= __ try_cast<simple*>(l->get_Item(x»; Console: :WriteLine (" {OJ * PI = {l}" , __ box(pS->i),

__ box(pS->f»i }

catch (System: : InvalidCastException *) {

Console: :WriteLine ("Bad __ try_cast ... ") ;

}

}

}

} ;

CHudNG 1·4: Lam viec vrri be? quan ly c++

65~

.~ .<I~~~;·~': void main()

{

refdemo *pD,;new refdemo;

pD->init (); / / t ao ra danh aach gia tr:j..

pD->show(J; / / l~p het danh aacb va hi~n thi gici" tr:j..

Viec tao ra mQt ki~u gia tri vrri tU khoa _value se thay diH cau true dan gian eua ban thanh mot lop duoc dl'in xuat tl! System::ValueType. N6 co nghia rling t\i ki€iu gia. tri c6 th~ override m(lt so phunng thrrc ella lap Co' sO' M eho phep chung gop phan d1l.y du han mra VaG viec thao tac vdi rnaIenh dutrc quan ly. MQt trong nhtrng each su- dung thong dung cua lap du lieu la trfch xuat (extract) ra mot ehuoi. Co' chi nay cho phep ban glti m!}t integer hay float duqc dong goi den tham 86 cua ham Console::WriteLine va nhan v~ ki~u cua ban M tI! in chung ra, Vdi each nay, ban se khong phai 10 liing v~ dinh dang phil hop eua rna l~nh printf cho mot integer, float hay string. D6i tuung' bi~t each d~ tra vg chuoi mo til chinh no.

10. T~O vA sit Dl,lNG cAe MO HlNH uY THAc (DELEGATE)

Mil hinh uy thac Ia phien ban .NET cua callback va con tro ham. Chung chu yiu duqc su- dung trong vi~c dinh huang cac str kien den bQ xii If ngay khi chung xuat hien,

MQt khai bao M6 hinh uy thac mil til. mQt dau hieu cua ham (function signature) vai met m<iu dac bi~t cua cac tham so va ki~u tra v~. MM khi miu nay dU\1c tbilt Itp, n6 co tbi! diroc dung M goi bAt ctt ham nao c6 cung difu hieu. MQt SI! khac nhau gii1a Mil hinh uy thac va ham callback ducc eai di[!.t trong cac lap c++ la, trong khi callback trong c++ phai luon luon Iii cac thanh vien static cua lop, Mil hlnh uy thac cling co thE! duqc dung dE! goi cac thanh vien the hien (instance).

Ml;lt delegate duqc khai baa nhu sau:

_deleg1ite <kieu tra V€!> MyMCDelegate «danh aach tham 8(:5»

M6 hlnh. uy tluu: c6 thi c6 nhieu. tham so. M& hinh uy thac phu hqp oai mdu

dua tren kie'u tra v~ va danh stich. th~m s6'. Vi thi, ..

_delegate char MyDelegate (int x, int y, double d) co thi duac dung trang cti hai khai boo phuong tluic sau:

char AFunction (int a, intb, double dData)

static char Foo (intmoo, int hoo , double doo)

Vi dl,l 1.4.8 trinh bay each cai dl!-t M6 hinh uy thac, Chung minh hoa ml;lt MO hmh uy thacdon gian, mi)t Me hinh uy thac se nhij.n nhap cac tham so, cac Mil hlnh uy thac tra v~ cac gia trj va so khac trJi v~.d(t li~u thOng qua thaw so.

l!j66

PHAN I: Ma dau

Vi d~ 1.4.8 delegate.cpp: Sa dung eric M{, hlnh u:i' t hric

#include <stdio.h>

II dau ti~n khai bao ca c dEi:u hi~u delegate se dung.

_delegate void SimpleDelegate (void) ;

_delegate void De legateWi thParameter (int) ;

_delegate int DelegateWi thReturn (int) i

_delegate void DelegatewithOutParameter{int, int *) ~

_gc class AClass {

public:

static void StaticHandler (int n) {

printf (" I am a static handler and my parameter is %d\n",n);

}

void InstanceHandler (int n) {

printf ("I am an instance handler and my parameter is %d\n",n);

}

void HandlerA ( ) {

printf ("I am handler (a) \n");

}

void HandlerB ( ) {

printf ("I am handler (b) \n");

}

void HandlerC ( ) {

printf("! am handler (c)\n");

}

void HandlerD ( ) {

printf ("1 am handler (d) \n") ;

CHUdNG 1-4: Lam viec vai bi) quan ly C++

67~

.}

void WithReturn(int x~ {

p:r;intf( "Returning %d*5\n", x) i

void wi thOutParam (int x, int * refval) {

printf ("Returning %d*14 through the out parameter\n", x);

*retval '" x* 14;

}

} ;

void main() {

/ / khoi t<;\o 16p handler _ . AClass* pC=new AClass () ;

/ / t ao ra mo hinh uy t.hac

DelegateWithParameter* sh",new DelegateWithParameter(NULL,&AClass::staticHandler); DelegateWithParameter* ih=new DelegateWithParameter(pC,&AClass::lnstanceHandler);

DelegateWithReturn* wr=new Delega,teWithReturn(pC,&AClass: :WithReturn);

,',' Dt;tlegj;lteWi thOutParam* ,wo=new "'Dele:'ganewithOutParam(pC, &AClass: :WithOutParam)

/ /G9i static. - . ah->Invoke(lO);

/ / va nhung instance handlers. ih->Invoke(lOO);

/ /Bfiy gio la mOt multicast cua tat ca handlers trong m¢t danh saon

SimpleDelegate* mc=new

Sim,pleDelegate (pC, AClass: : HandlerA) ; mc=static_cast<SimpleDelegate*>(Delegate::Comb!ne(mc,

new SimpleDelegate (pC, &AClass: : HandlerB) » ;

mc=static_cast<SimpleDelegate*>(Delegate::Cornbine(mc, newSimpleDelegate(pC,&AClass::HandlerC»);

!J68

PHAN I: Ma di

mc:static_cast<SimpleDelegate*>(Delegate::Combine(mc new SimpleDelegate(pC, &AClass: :HandlerD»);

mc->Invoke (); II t.hiro thi 4 l$nh 99i

IIBay gio m¢t me hinh uy t ha.c vo l m¢t tham so xuAt

printf ("Invoking delegate with value S.\n"); int r = wr ->Invoke(S);

printf ("WithReturn send back %d\n", r);

IIKet t.hu o m¢t mo hinh uy t.ha c voi mot tham so xuAt

printf ("Invoking delegate with value S\n"); wo ->Invoke{ll,&r);

printf ("WithOutParam send back %d\n", r);

}

11. GQI cAc DLL .NET TUY BIEN TU MA L~NH MANAGI c++ CUA B~N

Managed c++ dung cac .NET DLL bat cd' khi nao no import cac than thuc thi nhu MSCORLIB.DLL bang chi thi #using. N6 con htru ich dl\ co th~ dij.t mot ph.tn mii. l$nh cua ban bAng c++ va m{it phan bllng C# hay VB. N nghia Iii. ban, se import va dung nhtrng DLL tuy bien cua chmh ban, Quy trlnr dan gian va duoc m6 hI. trong phan nay.

Dliu tien, chung ta se chi tao ra mQt DLL C# mil. ban co th~ import va Vi du 1.4.9 trinh bay mQt DLL rilt don gian co mot lop va mi)t phuong thirc.

Vi du 1.4.9 mydll.cs: M<'Jt DLL C# don giHll

using System;

namespace mydll {

public class myclass {

public void MyMethod () {

Console. WriteLine ( "MyMethod invoked! I ! ") ;

}

}

)



CKUONG 1-4: Lam viec vrri bl? quan ly C++

69~

Ban khong e§npMi iii mOt chuyen gia C# d~ biet each chung lam vi~e. Luu y ding lap duqc khai baa voi dieu chinh public. f)i~u nay se cho phep no va cac JbIltmJ",thu-c eua no dlil;lcexport tU thu vien. Go t4 ptin nay bil.ngN otepad .trong' tfi~ttll.itm~t tr6ng, luu no thanh mydll.cs va dichno bll.l"lg trlnh bien dich C# nhu sau:

esc It: library mydll . cs

Tuy chon dong l~nh It: se baa cho trinh bien dich biet dE\' tao ra thu vien DLL. B!:In co tM thay rang kh6ng co liii hay canh bao.

Khong co dieu gi phai noi vai ham khi viet hay dung DLL nhung chi la mot sa thich, ban c6 th~ se mucin go dong l~nh 'nay:

Ildasm mydll.dll

flieu nay se goi trinh bien dich ngucc Intemediate Language Disassembler (lLDASM), cho phep ban khao sat DLL ban vua tao ra, Hlnh 1.4-1 se eho ta thay,

_B'ii¥~i'I'iREfN~~E;;~A"'~ .<. "i:;··:

P*:-k~ ,~

t6 ~ai co ~hl

~ .. "",,10;11

~ MANifEST ~ • m,<II

'-=""'01.>0.

J e~t putr.c ~IJO &'rti bI'llOI~heldrl •

• <,.., v<><lO

."')l1li_''1<>«1

'j

!

)

" CO~, sin 11 (lIlcbJ

... AltxSIt.ack 8:

IL D"DD; l~st. ··llllHethO<l inuOkMtft·· , ,

Il-D'OS; c"ll uo14 r,.scorlihjSlIsh ... Con""l,., :Writ .. Lin.,(.t .. ing)

IL:=".oa; ret

> 1/ e nd of .... thod "lICla5S; , ..... "..thod

.... thad public niaellyslg ,illstanc" void Hyl1othOO() eil n~ll;>gea (

, >'

Hinh lA-1 ILDASM, cho thfiy_ n¢i dung -as ou. thl1

.\>\c,<,>".' . ». . .>'.' >,'. '.

"Ban cung c6 eM dung ILDASM M khao cuu m(lt 86 t~p tin kha thi khac

ban da tao ra trong chuong nay,

l!J70

PHAN I: MO' dau

Vi du 1.4.10 cho thay mqt lap c++ dan gian se s .... dung phuong thuc MyMethod g\li tu names pace mydll

Vi du 1.4.10 useCSdll.cpp: M<)t chu'o'ng tr-mh C++ sli' dl,lng DLL C# tuy bie'n

#using <mscorlib.dll> #using <mydll.dll>

using namespace System; using namespace mydll;

void main (void) {

myclass *pM::new myclass ( ) ;

pM->MyMethod() ;

}

Go t~p tin nay vao Notepad va 100 n6 thanh useCSdll.cpp. Nho d.ng ca ca lenh #using va chi diln using names pace d~u tham khao den DLL C# ta vita ta ra iJ vi du 1.4.9.

Dich tap tin bang' dong lenh:

cl ICLR useCSdll.cpp

Chay n6 bang cacch go useCSdll 0' dong lenh.

Ban se tha"y DLL C# ban da tao ra dtiqc nap va g\li t1! d(ing.

12. SU DlJNG DLL C++ DUQC QUA.N LV vA KHONG DUQC QUAN LV TRONG CHU(jNG TRINH .NET CVA B~N

Viec lien ket va s11 dung thu vien dQng chi dan gian la dung b{i mo rQI Managed C++ dLidi .NET. Cac DLL c++ duqc dich thanh IL, giong nhu pMn ngngtt ty nhien .NET cua chung, duoc danh dau bdi sieu du Iieu (megadata) cung c thong tin chuong trinh v~ cac lop va cac phuong thrrc luu trong DLL. Di~u nay cc nghia Ia ban co tM dung chung nhu cac dOi tuorig .NET duoc viet bang C# h VB

Cac DLL khac rna ban co thl\ dung, nhu la cac DLL hI} thong hay nhirng I do ban tao, cftn mi}t chut cong srrc nhung ro rang vdn phai cam on cac dich Interop duoc cung cap biJi Common Language Runtime.

Vi dl,l 1.4.11 chi ra mot thanh phan managed C++ se duoc bien dich nhu mQt DLL

Vi du 1.4.11 cppdll.cp : M<)t DLL Managed c++ dan ian

#using <mscorlib.dll>

.u

diu t!;lo

,c

I rQng I ngon Ilg cap ty c6 y ~# hay

Jng cai Iieh V1,l

nhu IA

-

CHU(JNGiI.-4: Lam vi~c vdi b~ quan ly C++

71~

1\ .• ;C';\t",~,,:f . -..'

us'ln~'n~~\'~pace System;

using nameepace System: : Text; using namespace System: : IO;

II E>4y la m¢t managed c-» DLL dung .Net framework classes Ild:j.ch bAng ...

II 01 lCLR fLD cppdll . cpp

namespace cppdll {

/ /minh hoa vi~c 99i m9t class method ...• public _gc class AClass

{

public:

void FirstMethod {int n} {

String* pS=S"Hi from Firstmethod ";

StringBuilder* pB=new StringBuilder(pS};

StringWriter* pW=new StringWriter (pB) ;

·tor{int x=n;x>=O;x--) {

pW->Write{_box(X»i if (x)

pW->Write(S", "); else

pW->Write{S" ... ");

}

pS=pW->ToString{); Console::WriteLine(pS);

}

}

Go rna l~nh nay va hill vao cppdll.cpp. Sau d6 dich chung bang dong lenh: 01 /CLR fLD cppdll. cpp

DLL nay se ducc goi nhu la mQt doi tuqng .NET dliqc quan Iy dan gian.

Vi du 1.4,12 trinh bay mOt DLL kMng duqc quan ly tieu bieu co rnQt ham tLi!1ng U'ng vci DLL chung ta vua tao & vi du 1.4.9. Nhu ban co tM thay, n6 ell ham DllMain chuan va mot DllFunetion c6 th€ duqc goi dEl' thao tac miit s6 thir va in ra , mQt thong di~p.

1.'1..

~72

PHAN I: Mi'I ddu

Vi dt.J 1.4.12 strainghtdll.cpp: M(it DLL xBG don gian

II £lAy la m¢t C++ DLL thOng thuong se dU'QcgQib4ng 1/ system interop services cua , NET

#include <windows. h> #include c at.d i.o , h» #include <string. h»

static char *buffer;

char* _stdcall DllFunction(int n ) {

sprintf (buffer, "Hi From DllFunction! "); for(int x=n;x>=O;x--)

{

char temp[100] i

sprintf (temp, "%d%s" ,x, (x==O ? " strcat(buffer,temp);

"

"

II ) ) ;

}

return &buffer [0] ;

}

BOOL _stdcall DIIMain (HINSTANCE hlnst, DWORD dwReason, LPVOID resvd)

{

switch (dwReason) {

case DLL_PROCESS~ATTACH:

buffer = (char * )rnalloc (1000) ; memset(buffer,O,1000);

printf ("Straightdll'loaded\n") ; return TRUE;

case DLL_PROCESS_DETACH: free(buffer);

printf ("Straightdll unloaded\n") i return TRUE;

default:

return FALSE;

}

}

Thea sau hi t~p tin DEF kigu eli dl1<;1e dung M export cac ham cua DLL.

EXPORTS DllFunction @1 DIlMain@2

Go chung vao va luu thanh tap tin strainghtdlLdef, sau d6 dich thanh DL vcri dong l~nh sau:

,'J

cHIfdNG 1-4: Lam viec voi b(J quan ly c++

73lMJ

cIlLO strainghtdll.cpp Ilink IDEF: strainghtdll.def

Cac DLL nay c6 thE\' duoc dung boi chuang trinh C# hay VB rna ban viet.

KhIi'ilAnig.jWi DLL kigu cu vdi rna lenh hay ngon ngu kiE\'u mci nay S8 gin gia cac ffiiu tl1 cua ban a cac rna lenh, ling dung, va cong cu cu khi ban mu6n chuysn sang ki~n·tr1ic .NET. De rninh hoa, chungta S8 viet rn(lt chuang trinh cue ky dan gian C,t .. eho thliycach dung lap dinrc quan ly c++ va DLL khong dl1qc quan ly. Vi du 1.4.13 cho t~liy rna l~nh cua tap tin thuc thi cppdl.lusr.exe.

Vi du 1.1.13 cppdllusr.cs: M.;.t chtidng trinh C# ddn gia.n cho thay each dung DLL

1: using System;

2: using System. Text;

using System. 10; u~ing$ystem.Runtime.+nteropServices;

3: 4: 5: 6: using cppdll;

7:

8: class dlltester 9: {

10:

11 : 12: 13: 14:

.~ /

15: static void Main'( )

{

[DIllmport ("straightdll.dll")] [MarshalAs(Unm~nagedType.LPStr)]

public static extern String DllFunction (int n) ;

16: 17: 18: gQL .. 19:

II DAu tienmethod trong C++ dll "cppdll.dll" diroo

AClass pC=new AClass ( ) ; pC. FirstMethod (10).;

20:. 21:

22: If Bay gio 99i ham bao boo cho DLL khong duqc quan Iy

23: Console.WriteLine(DllFunction(10»;

~~-~~'~,;,;;'~._ .. ;:;_'i"·:.'~i

25: }

26: }

Sa dung DLL cua managed C++ kha r5 rang, nhung cai kheng duqc quan ly thi phuc tap han. Chung ta khao soh pha n lam cho sV wang tac vdi rna l~nh khong dliqc quan Iy la co tM.

Dong rna li;,nh 11, 12, va 13 a vi du 1.4.13 cho ta thay each tao ra mot tilm phil (wrapper) cho m{lt ham trong mQt DLL khong duqc quan lY. each nay dung cac thuoc tfnh (attribute) d~ tao ra mot proxy cho cac rna lenh khong duqc quan If

LL

~74

PuAN I: M& dl1u

va sap d~t cac tham s6 va kieu tra vil tit va Mn cac phan khongduoc khai bao cua h~ th6ng.

Thuoc tinh 1D1llmport(' .. )1 chi r5 rling dau hieu cua ham theo sau la mQt thu dinrc xuat khau bai DLL duqc dat Wn, trong truO'ng hop nay la strainghtdll.dll rna chung ta dB. tao Ii vi du 1.4.11. Ham nay tra v~ mi)t char '" Mn mi)t vung d~m rna n6 duqccAp phat, Tuy nhien, bi) thuc thi dl1qc quan Iy se can da lieu tra vil d~ duqc d6ng g6i trong mot d6i turmg than thien han vdi .NET, do do, thay VI dung cac char '" nhu lA ki~u tra ve cua ham ella chung ta, chung ta dung String va bao M thong r/1ng n6 clin sil:pd~t(marshal) du lieu khi no duoc tra viltuh8.m. D.ieu nay dl1qc thl,ce,hi~n Mi thuoc tinh {return:MarshaIAs( ... )]. V] tri cua n.6~Ltng truCe khai bao ham cho thlly no la ki~u tra vil se du;;ic si!:p x€p (marshal). ThuQc tinh nhu the' c6 th~ dung tren mot tham s6 M chuyen du lieu tLr mot string thanh mot, con tro char "'. Tharn s6 cua thucc tinh Marshal As la mQt trong danh sach cac kieu co th~ nhan biet tu narnespace System::Runtime::lnteropServices.

Vi~c gQi DllFunction 0 dong 23. 86 lit mot tham sO' don giancho phuong thuc Console.WriteLine. N6 chi chap nhan cac item dua tren System. Object , bai vay ban c6 th~ thay rling viec sAp xep cac ky tu diroc tni ve char * vao d6i tuong String nhir the' nao.

Go vi du 1.4.13 vao t!j.p tin cppdllusr.cpp va dich chung bling cau l~nh: csc Ir: cppdll. dll cppdllusr. cs

Chuang trrnh se bien dich, va ban co th~ chay cppdllusr tU dong l~nh.

13. DUNG cAc THUOC TiNH (PROPERTIES) TRONG cAc

,? •

LdPCUAB~N

Cac thuoc tin,h la cac tharih vien gia-du lieu cua cac tap cua ban. N6 dtfqc truy xuat nhu cac thanh vien da lieu publie nhung trong thuc te' chung la cac ham ben trong lop.

Vi¢c them vao cac thuoc tinh cho cac I'ap thu gam rae C++ ducc thuc hien bang each dung tU khoa _property. Vi du 1.4.14 trrnh bay mot lap GC don gian vdi cac thuoc tinh.

Vi du 1.4.14 pro s.c : Cac thu(lc tinh don 'an ti-on m(lt Idp GC

#using <mscorlib.dll>

using namespace System; using namespace System: : IO;

_~gc class PropGlass {

int m_x; int m__y;

CHu'dNG 1.4: Lam viec vrri bQ quan If c++

75~

int m_z;

public:

PropClass ( ) m_y (19762) , m_z (3860) {

}

II properties dQc/viet cho m¢t data member

__property int get_x () {return In_x;} ___property void set_x(int v) {m_x=v;}

II properties chi d9C cho m¢t data member

__property int get_y() {return m_y;}

II properties chighi cho m¢t data member

__property void set_z (int v) {In_z=v;}

II properties khong t.a.c d¢ng tr~n du liti!u

__property int get_bogus ( ) {

Console: :WriteLine ("Read the bogus property! ") ; return 10;

}

__property void set_bogus (int v) {

Console: :WriteLine("Wrote (OJ to the bogus

property!" ,_box(v»; }

String* ToString ( ) {

StringWriter *w=new StringWriter ();

w~ >Write ("PropClass; In_X;;; {O}, m_y = {1}, m_z '" ("2}",_:_box{m_x), _box(m_y), _hox(m_z»;

, ,returnw~>ToString ();

}

} ;

void main ( ) {

PropClass ·pP",new PropClass ( ) ;

Console: :WriteLine ("At Creation ... (O}", pP) ;

\!J76

PHAN I: Mi1 d!lu

PP->X=50i

Console: : Wri teLine ( "Wrote to x ... {O}" , pP) ;

PP->Z=:lOOi

Console: :WriteLine ("Wrote to z ... {O}", pP) ;

pP->bogus =: 150j

Console::WriteLine(pP);

int x=pP- >x;

Console: :WriteLine ("Read x , Return ={ O}, { l} 11 , _box (x) , pP ) ;

int y;:pP->y;

Console: :WriteLine ("Read y. Return =dO}, {l}",_box(y},pP);

int z=pP->bogu8i

Console: :WriteLine {"Returned value ~ {O} • { 1} 11 • _box ( z ) I pP) ;

}

Chuang trinh props.cpp cho thay cac thuQc tirih truy xuat, true t.iep vathanh vien da li$u trong mQt lCip va cac thuoc tinh se thuc hi~n cac tinh toa: kh6ng can lien h$ den cac thuoc tinh cua lop,

Chuang trlnh cung chi ra kg thuat tao I~p cac thuoc tinh chi d9C hay cl ghi. DE) tao ra mot thuQc tinh chi doc, chi can dan gian them van accessor get ThuQc tinh chi ghi chi d.n accessor set_.

Cuo] cung, chuang trtnh trtnh di~n mot ky thuat ha'p dan cua viec overru phuong thuc ToString{). NM rling cac lop duqe khai bao voi _ge thi diiu duqe di xuat tu System::Objeet. Lap TIllY dinh nghia phuong thuc ToString, cai se du dung d€ xuAt mot, chuei ella lap ra lu6ng (stream) van ban.

14. BAo DAM VI~C SAP xEP vA DONG GO! cAe CAD TRue c++ etTA B~N

Bdi vi bQ thu gom rae lam kha nh ieu viec si\p xep va b6 tri rna lenh cho t nsn d6i khi rAtkh,6 hieu mot cau true nao My duoc b6 trl nhu the nao trong

CHUdNG 1~4: Dam viec vdi b(i quan ly C++

77

nho. No co th~ la rilt quan trong ne'u ban dang dem de'n rn(it eilu true theo thu tl/ byte tit chuang trlnh hay DLL C++ trudc day va dung chung trong ngu canh cua .NET. Cac dich vu Platform Invoke co cac thuoc tinh rna ban c6 th~ dung d~ chi ra chinh xac eilu true cua ban se duoc b6 tri nhu the nao, nho v~y ban co the doc chung VaG cac rna lenh duoc quan Iy va vh chac chan rAng thii' tv va sap xe'p cua cac bie-nbi} nM la da duoc hieu ro.

Thuoc tinh StruetLayout co th~' duoc dung M b6 tri mot cau true lien tuc, d~t cac bien thanh phan vao mot offset xac dinh ben trong cau true hay M khai bao ll(it union. B6 tri lien tuc la dang dan gian nhat, va ban e6 the chi r6 them ve vi~e dong goi cac thanh phan cua cau true.

Kich ban thirong' g:'1.P nha't la ban Mn nci rna dil co m(it cau true C++ duoc dinh nghia truae trong mot irng dung va ban can dung cau true nhu vay de' quan ly the giai, co thi'i la tU mQt chuang trinh Managed C++ hoac co vai doan mil. I$nh duoc viet bling C#. Diilu nay se tac dong den ta't ca. Hay nhin vao cau true C++ dan giiin r1 vi du 1.4.15.

Vi clu 1.4.15 simplestruet.h: MQt ca'u true C++ don ghin

#pragma pack ( 8 )

typedef struct { char name [ 17] , int age, double salary, short ssh [3]

} simple;

Khai b'ao d vi du 1.4.15 dinh nghta mot eau true vdi mot dang dong goi dac biet, De biet xem cau true dy a trong bi? nho se nhu the' nao, chung ta hay dilln vao chung nhirng gia tri dac biet va sau do ghi VaG cac bien trong cau true. Vi du 1.4.16 eho thily quy trinh va bang dump nQi dung cua edu true ily len man hlnh.

Vi d"" 1.4.16 shnplctcst.h: MQt chuong trinh de' thu' diU true don gUn

1: #include <stdio.h> 2: #include <memory·. h» 3':#include "simple. hOI 4:

5: void dump (uns igned char * pC, int count) 6: {

7: printf ("Dumping %d bytes\n", count);

8: int n==O;

9: while' (n-ccount.)

10: {

11':' tnt i;

12: int toDump = count-n>= 16 ? 16 count-n;

13: for (i=O; Le t.opump ; i++)

~78
14:
15:
16:
17:
18:
19:
20:
21 :
22: }
23: }
24:
25: pHAN I: Mcr diu

printf {"%02x", pC [n+i] } ; while (i++<16)

printf (" ") ;

printf (" " ) ;

for (h:O; i<toDump ; i++)

printf ("%c", pC [n+i] >Ox1f?pC [n+i] : I • '); printf (" \n") ;

n += tODump;

26:void main (void) 27: {

28: simple s; 29:

30: memset(&s, Oxff, sizeof{simple)};

31: memcpy (&s. name [0] , "abcdefghij klmnopq", 17) i 32: s.age=Ox11111111;

33: s.9alary = 100.0;

34: 9.99n[O] = Ox2222;

35: s. BSn [1] = Ox3333;

36: s , ssn [2] = Ox4444;

37:

38: dump ( (unsigned char*) &s, sizeof (simple) ) ; 39: }

Dich rna l(!nh nay vrri dong lenh sau:

Cl simpletest . cpp

Bay giu hay chay n6 tit dong l(!nh.

Dumping 40 bytes

61 62 63 64 65 66 67 68 69 6a 6b 6e 6d 6e 6f 70 nrr ff ff 11 11 11 11 00 00 00 00 00 00 5940 222233334444 ffff

abedefghijklmnop

q Y@

""33DD

Mil. l{\nh a vi du 1.4.16 eho th1ly ding cau true simple da dl1qc dien d[y da li(\u. Diiu Win, (1 dong 30, no duqe difm vao so hexa ff df phan anh du lieu thuc voi nhirng khoang tr1l:ng cua viec d6ng g6i cau true. Dong 31 chi ra thanh phin age dang du'qe di~n bang 17 ky tu, va dong 32 den dong 36 cho thay tat ca cac bien so d~u dugc gan tri. Mil l~nh n~m tu dong 5 den 32 chi dan gian dump cau true ra man hinh.

Kat xuilt thl kha ro rang, nrri rna if dtiqe nhin th.1y lit phdn cua ea'u true, Mgt d.1u rn6i khae 18 17 + 4 + 8 + 2 + 2 +2 khOng Mng 40, kich c{J dlfac khai baa

cda e§u true bru sizeoi; .

CHUdNG 1-4: Lam viec vrii b(l quan ly C++

791!!J

Khi truyen cdu true nay den rna i~nh eil ctia bgn tit managed C++ hay C# th: e6 thi se c6 IJi Mi vi 69 nh a duoc qudn if thea each khrie va CLR khOng cho phep ban. tao ra eric eciu true duoc quan if voi mot mdng kieh co co' dinh. Dr1li~u se cdn de vila 66 tri va sdp xep (morshal) giiio. hai the gioi duoc quan lj va kh6ng dltqc quan lj.

Vi du 1.4.7 minh hoa each mQt cau true e6 thE\' duoc tao ra v6'i vi trt chinh xac cua cac thanh vien va each chuyen mot da li~u mango

Vi du 1.4.7 managedsimple.txt: Ph ie n ban du'<_1e qUan ly ella ca'u true ddn J!i~in~

[StructLayout(LayoutKind::Explicit,Size=40)]

public _gc struct managedsimple {

[FieldOffset(O)] [MarshalAs(UnmanagedType::ByValTStr,SizeConst=17)] System: : String *name;

[FieldOffset(20)]

int age;

[FieldOffset(24)]

double salary;

[FieldOffset(32)] [MarshalAs(UnmanagedType::ByValArray,SizeConst=3)] short ssn _gc () ;

} ;

Luu. Y

Nh6 ding bat cu khi 'lao dung nhiing thunc tinh nay trong pluin. mem. ciia minh, ban 'len khai brio rang bgn dang dung namespace System::Runtime:1nteropServices.

o day ban thay rang khOng chi b6 tri vij.t Iy cua cau true ducc di~u khign cdn than bdi viec dung cac thuec tinh StructLayout va FieldOffset ma cac mang C c6 chieu dai c6 dinh char va short con duqc thay thif hai cac kigu System::String va System::Array than thien vrii bl} thu gam rae.

Brri vay, chuang trmh biet lam the nao M cac mang duoc quan Iy se duqc chuyen ve cac rna I~nh cu, (thuoc tinh MarshalAs, cai rna chung ta da thay trong phan ket hop va; kigu tra v~), da duqc munn dg chi ra tAng mang can duoc sAp xep nhir Ia mQt rnang chui'ii 17 ky tv va mQt mang cua 3 s6 nguyen short.

Vi du 1.4.18 la rnQt thay d5i cua rna lenh a vi du 1.4.16. 0 day, chung ca dinh nghia mot DLL C++ khong duoc quan ly se him nhiem vu dump gi6ng nhu trtioc cho chung ta, DLL nay se duoc chuygn v~ chuang trinh managed C++, cai rna gi6ng nhu la cac module C# hay VB.NET. Ket qua se dinrc hien len man hmh tan nCi'a. Dau tien la DLL khOng duqc quan IY.

f

r

.~80

pHANI: M& d~

Vi d~ 1.4.18 structuredll.cpp: DLL khong du'<1c qua n ly

1: #include <stdio_h> 2: Ihnc 1 ude <memory. h» 3: #include "simple.h" 4:

5: void dump (unsigned char * pC, int count) 6:

7: 8:

printf ("Dumping%dbytes \n", count);

9: 10:

int n=O'

.,'- . ,

while (n-ccount; )

11: int i;

12: int toDump '" count-n >= 16 ? 16 c ourrt= n r

13: for (i=O; i<toDump i i++)

14: printf (1I%02x", pC[n+i]);

15: while (i++<16)

16:

printf ("

11 ) ;

17: pr int f (" " ) ;

18: for(i=O; i<toDump ; i++J

19: printf ("%c", pC[n+i]>Ox1f?pC[n+i]:'.')i

20: printf ("\n");

21: n +::: toDump;

22:

23:}

24:

25:void _stdcall ShowSirnple (simple *s) 26: {

27: printf ("Unmanaged DLL\n");

28: dump ( (unsigned char *) s, sizeof (simple»; 29: printf ("Name=%'17s\n", &s->name[O]);

30: printf ("Age",%d\n", &s->age);

31: printf ("salary=%f\n", &s->salary);

32: printf ("SSN=%d-%d-%d\n\n", &s->ssm[O] ,&s>ssm[1],&s->ssm[2]);

33: print f (" Changing the salary _ .. \n" ) i 34: s->salary=999999.0;

35: 36:

printf ("Changing the name .•. \n");

strcpy (s->name, "Mavis ");

,.-

<::H1J(1NG 1·4: .Larn viec vdi hI) quan Iy C++

81~

37: printf ("Changing the a an •.• vn ") i 38: a-o-aam [0] =99;

39: B~>Bsm[1]=999;

40: s- >Bsm[2] =9999;

41: }

42:

43:BOOL _stdcall DllMain(HINSTANCE hlnstance, DWORD dwReason, LPVOID)

44: {

45: switch (dReason) 46:

47: case DLL_PROCESS_ATTACH: 48: case DLL_PROCESS_ATTACH:

49: retun TRUE;

50: default:

51: return FALSE;

52: }

53: }

Tij_p tin DEF xuat khau cac phuong thuc rna ban se dung, IL1u chung trong structuredll, clef.

EXPORTS

DllMain @1

ShowSimple @2

Dich DLL nay voi dong lenh:

Cl fLD .structuredll . cpp f link fDEF: structuredll. def

Vi du 1.4.19 cho tM."y ding mot, irng' dung managed C++ se dung DLL 0 vi du 1.4.18 thong qua lei goi h~ thong, truyen cac cau true dL1q'c dinh nghia Me bi~t va dL1ge quan Iy vi~c sap xep.

Vi du 1.4.19 simpJedump.c p: Chlidng trinh thu mana ed C++

1: II £>ay lei managed C++ test 2: If de simpledump mot; dll 3:

4: #using <mscorlib .dll> 5:

6: using namespace System;

7: using namespace System: :Runtime: : InteropServices; 8:

9: II Ddy lei khai bao cua cau t ruc

~82

PHAN I: MC'I di1u

10: [StructLayout(LayoutKind::Explicit,Size=40)] 11:public _gc struct managedsimple {

12: [FieldOffset(O)]

13: [MarshalAs(UnmanagedType::ByValTStr,SizeConst=17)] 14: System: : String *nanie;

15: [FieldOffset (20)]

16: int age;

17: [FieldOffset (24) ] 18: double salary;

19: [FieldOffset (32)]

20: [MarshalAs (UnmanagedType: : ByValArray, 5i zeConst=3) ] 21: short ssn _gc () ;

22: } ;

23:

24:

25: / / Dily la lap se imports ce.c DLL function ta din 26:_gc class stDll {

27:public:

28: [DllImport ("structuredll.dll")]

29: static void ShowSimple ( [In, ouc ,

MarshalAs(UnmanagedType::LPStruct,

30: 5izeConst==40) 1 managedsimple) ;

31:

32: / / neu ban muon import c a c functions khac cua DLL

33: / / c6 the them vao 6 day

34:} ;

35:

36:void main (void) 31: {

38: managedsimple *m == new managedsimple; 39:

40: m->age", 24;

41: m->salary = 180000.0;

42: m-e-name '" new System: : String ("Beavis"); 43: m- >ssn = new short _gc (3) ;

44: m->ssn[O] = 10;

45: rn->ssn[l] = 100;

46: rn->ssn[2] = 1000;

47:

~ CHU(1NG 1-4: Lam vi~c vaj b<) qwin ly c++ '48: managedsimple __pin* pS = m; 49:

50: StDll: : ShowS imp Le (pS) ; 51:

52:pS = 0; 53:

54: Console: :WriteLine ("Back in the managed code") ; 55: Console: :WriteLine (m->salary);

56: Console: :WriteLine (m->name);

57: Console: :WriteLine {" {OJ - {l} - {2}", _box(m>ssn[O]}, __ box(m->ssn[l]),

58: __ box (m- >ssn [2] ) ) ;

59:}

83~

BUm djch t~p tin nay bang dong l~nh:

Cl Iclr simpledump . cpp

Va bay gia hay chay no tlt dong l~nh. Ban se thay k€t xuat sau:

Unmanaged DLL Dumping 40 bytes

42 65 61 76 69 73 00 00 00 00 00 00 00 00 00 00 00 00 00 00 18 00 00 00 00 00 00 00 00 80 66 40 Oa 00 64 00 e8 03 48 00

Name::: Beavis

Age:::24 Salary=180.000000 SSN=10-100-1000

Beavis .

............... Qf@ .. d._.H.

Changing the salary ... Changing the name _ .. Changing the san ..• Back in managed code 999999

Malvie

99-999-9999

Blit d§u vci ham main fJ dong 36, chung ta tao ra m(lt cau true d dong 38 va sinh chung d dong 40 Mn 46. Dong 50 goi ham cua DLL. va chung ta nhay sang dong 25 vi du l.4.18.

Phuong thirc nay se dump mot n<)i dung cua cau true bAng M hexa, cho tha'y each cau true duqc quan If cua chung ta, voi ca ehu6i va mang cao s6 nguyen ngan (short) duqc slip xep vao the gidi khOng duqc quan Iy cua DLL. o dong 29 Mn 40 cua viec li~t ke cau true, da li~u trong cau true kh6ng duoc quan ly dircc

PIIANI: Ma Mu

thay Mi bdi rna lenh c++ cu khong dl1qe qulin Iy nhung tot. Khi tien trinh ke't thuc, trtnh sAp xep (marshal) .NET lai dem cac cH:u true kh6ng dl1qe quan Iy vao the gidi duec quan Iy noi dong 54 den 58 cua vi du l.4.19 xac nhan cac thay doi bang each in cac gia tri moi ra ngoai man hinh.

Nhu ban co the thay til cac doan rna I$nh trong phan nay, kha nang sieu - thao tac giira cac the gioi duqc quan Iy va kh6ng dliqe quan Iy duoc cung clip tot va chung giup ban gill cac gill. tri tri tu$ dd e6 van nhung narn cua .NET.

15. KET CHUdNG

Cac I~p trrnh vien C++ dang lam viec vdi .NET duoc cham soc kha kyo Cac rna I~nh da co cua ban co the vunt qua hang rao .NET, ban cung kh6ng phai quang het moi thu va lam lai til dau, Co the se co nguyen rnct cuon sach viet rieng vt3 de tai dich chuyen (migration) rna I~nh, cluing ta tin rang mot, ai do se him diEm nay tuy nhien chuang nay se giup ban thay duoc con dlfang va dung ban day de chay,

Chl{ung 1.5

oror TIIT¢U VISUAL STUDIO .NET

C6c van d~ chinh se duuc d~ cap den: ./ Tich hop moi truong phat trien ([DE) .

./ Kliu vue soon thao chinh .

./ Guu phrip (Solution), Lap (Class), Muc (Item), va trinh giup do (Help) . ./' H¢p cong CIJ (Toolbox) va Server Explorer .

./ Nhilng tac VIJ (Task), ket xudt thong tin (Output), ket qua tim kiim (Search Result), vii Watch .

./ Thuoc tinh, Trinh giup do nang df)ng, va nhilng Favorite . ./ Chuang trink gfl 18i.

1. TI'CH H(1P MOl TRUONG pIlAT TRIEN (IDE).

Neu ban dii quen thuoc vci Visual Studio S.x hoac 6.x, tht giao dien cua Visual Studio .NET cling khOng khac may. Tuy nhian, co m(it vai SI/ khac biet ban nell tim hiii'u M d~ dang phat trien san pham voi b(i cong cu mdi nay.

Hinh 1.5-1 - Visual Studio .NET

IHJ 86

PHAN I: Mil dliu

Visual Studion .NET kha tien tien va ldn han so vdi ho Visual Studio cu.

Trong qua khu, viec phat tri~n cua c++ va Visual Basic thtmng tach bi~t nhau. Tuy nhien gia day, ban dtfgc cung cap SI! chon lua cua C++, C#, JavaScript, Visual Basic, va rat nhieu ngon ngil khac dang chay canh nhau tren kien true .NET framework. Moi trucng phat tri@'n tinh vi va co th~ xli. IY. ta't ca nhung' phan cua ling dung ciia ban theo each hop nhat.

Rieng bi) Visual Studio muon dEl cap het co Ie chiem rat nhieu trang cua giao trinh, nhung trong chuong nay, chung toi chi girri thieu khai quat ddy du d~ ban co th€ lam quen va lam vi~c hieu qua ngay vdi bi? cong cu phan rn~m nay.

Hinh 1.5-1 hi~n thi anh ban dau ella Visual Studio .NET. Nhirng thanh phan chinh cua Visual Studio dugc chu thieh tlt A qua E.

PHAN A : KHU VVC SO~ THAO CHiNH

Dillu dau tien ban nhin tha'y trong khu vue nay la trang Start Page. Gi6ng nhirng cira s6 khac ella VS.NET, no la mQt ella so HTML Browser, ctra s5 nay hien thi nhirng du an g§.n nhat cua ban va dua ra nhUng thong tin huu dung khac v~ VS.NET. Khu vue nay cung la nci soan thdo ella nhUng t~p tin chirong trinh (source file) cua ban. d tren ella s6 nay la mot thanh tab cho phep ban d~ dang chon nhung t~p tin dang rna hien hanh M soan thao (htnh 1.5-2).

Hinh 1.5-2 - Chon nhiing ttip tin dang ma

d day ban co tM nhin tha'y rang Forml.CS duoc rnCJ cho viec soan thao trong cM' dQ thiet ke (Design Mode) (gi6ng nhu mQt bi~u mfiu trong Visual Basic), va tap tin chuong trinh ngudn C#. Ben phai thanh nay hi nlurng thanh phan diElu khien (control) cho phep ban cuon tab ben trai hoac ben phai va dong ctta s5 hien hanh.

PHAN B : GIAI pIlAp (SOLUTIONS), LOP (CLASSES), TRQ GIlJp (HELP).

Trong phan nay cua ciias6 IDE, ban se nhm thay mQt sO' tab di~u khi~n (tabbed control) vai nhieu khung hien thi khac nhau, Htnh 1.5-3 hilln th] cac tab nay.

Contents ! [1) Index I Search i

Hinh 1.5·3 - Nhrlng .5 nhiiri ben phdi.

Mlj.c dinh, khung nay chua dung cac clla 85 Solution Explorer, Class View, Help Contents, va Help Search.

ClIUdNG 1-5; Gicrj thieu Visual Studio .NET

87~

1.1. Solution va Solution Explorer

Solution (gilii phap) la mOt kh6i cling vi~c n~n bing trong .NET. MOt solution cOtMchU'a'dl!IJ.g nhi~u ki~u dV an (project) khac nhau. Vi du, ban mu6n 40 mOt ling dl,ulg ,k:hAchchil (client/server) dliy dil vai cac du an con (sub-project) rieng Ie tlt ch\iqng trtnh khach (client) dLigc viet rna tren MFC va chuang trmh chu (server) dl4'QC viet rna tren ASP.NET Solution la noi ke"t hop tat cil. nhimg dl,C an can trong ling dung. MOt Solution .co thEi bien dich met liin chung vdi nhi1ng du an con.

Khi ban chon tab Solution Explorer, ban se thay mOt cau true cay baa g6m nhang muc khac nhau. Cay nay chua dung nhirng dir an, thu muc, t~p tin, tai nguyen (resource), va nhi1ng dtr li~u l inh tinh khac dinh nghia pharn vi cong viec hien hanh cua ban,

MOt solution co nhung thucc tinh anh hinrng den tat ca nhtrng dV an ben trong no. Nhu vai hau het nhung muc khac trong Visual Studio .NET, khi nhap chuot phai-len ten Solution va chon Properties se cho phep ban dieu chlnh nhtrng di!-c tinh cua Solution. .

Hlnh 1.5-4 - hit'in thi khung ci'ta s6 Solution va hop hQi thoai thuec tinh danh cho Solution d6.

".:.J S)"stem,Drawing

<;] System.Wh:lows.FOI"M:: ·;:;)5y stern. XML

t{) AS5OfT1bjylnfo.cs iI~

Hinh 1.5-4 - Solution va nhilng ttiuoc tinh. ella no.

d day khung cua s5 Solution Explorer nam ben phai chira mQt du an don ten Ia AnApplication. Hop hiji thoa i thuec tinh Solution (narn ben trail cho phep ban chon dl,1 an con nao la du an khrri dQng, moi du an phu thuoc vao du an khac nhir the" nao, nci IDE se tim kie"m nhirng t~p tin tai nguyen khi g() loi, va noi nhllng t~p tin ky hieu gO loi dlJ'qc luu (debug symbol files). Nhttng thiet I~p nay se dung chung cho tat eli nhtrngdu an Mn trong m!)t Solution.

~88

PHAN I: M& diiu

2. Dlj AN (PROJECTS)

Solution chua cac dlJ an, con dlJ an chua nhung muc thong tin. Nhll'ng muc nay co ~M la nhirng thu muc dung cho vi~c W.chllc rna nguon ciia ban, nhimg t4p tin dinh nghta (header file) va t~p tin tal nguyen (resource file), nhung tham chieu toi nhirng' dt! an khac, nhU'ng dich vu web (web service) va nhirng t~p tin M thOng (system files),' cung tilt c:i nhung t~p tin Ina ngudn ella dl! an ben trong solution. Trong hinh 1.5·4, ban co th~ nhin tMiy dlJ an dang rna co 2 i~p tin la Form1.cs va Assernblylnfo.cs, cung t4p hqp nhiJng tham chieu (reference). Cac tham chieu reference nay tuong' tv nhu chi dan #include trong t4p tin C++; chung cho phep truy xuat tai cac sieu di1li~u metadata trong cackhong gian ten (namespaees). Nhimg tham chieu nay cung co th~ tham chieu Wi mo til. Web Service Description Language (WSDL) ella m(it dich vu Web. Ki~u thamchi€u Mn dich vu Web gt.li la Web

reference.

MoSi du an ben trong mQt Solution.co nhtmg thuQc tinh. Hmh 1.5·5 hien thi thuQc tinh cua dlj an AnApplication.

oOS'fSt~.Ctal:'III

.... '1iiSystem.Dr....-.;)

.0 'Sy$tOm.WIndows-.!"OI'ms. ...(J SyStMI,;tH, ~As_lrio." 1IiiI1'iiiiil>«

Hinh 1.5·5 - Hop h(Ji thoqi thll9C tinh ella dlf an.

Trong hQp thoai hien thi a hinh 1.5·5 nhu ban thay, chung dan gian, de stl dung va kha ngan gon han so vai VS 6.0 .

. Cac thuoc tinh cua dl! an bao gOm nhtrng til.y chon (options) quy dinh each bien dich chuang trlnh nhu mac t6i u\l h6a (optimizations), each khrri di/ng va hien thi form (start options), kii' cB each soan thao dong l~nh va nhung tuy chon go Hli.

Nhtlp chuet phai tren du an se hien thi trlnh dan ngtr canh (cho phap ban chon each bien dich dlJ an mot each rieng bi~t, cung vai them vao nhilng muc din thi~t eho di,t an, nhu tham chieu, file tai nguyen, mil nguon moi ...

3. NHl~U Dl,iAN TRONG MQT SOLUTION DdN

Vi~c tMm ml)t d" an vao ml)t solution kha dan gian. Ban nhap phai ehuQt tr&n Selution.vt chon Add. Visual Studio BE! hi~n thi danh sach cac chon lua danh eho vi~ !;fo md'i Mi tl1gng, sil dung' dOi tu'gng hien c6 tren may ella ban, hoac lAy ml)t d6i tllqng v~ tit Web.

CHtfONG 1-'5: Gi6i thieu Visual Studio .NET

89~

Hlnh 1.5-6 hi.§n thi hop thoai New Project Wizard cua lenh Add, chung ta sa them m<)t dir an Managed C++ vao Solution.

Visul)i C# Projeds 'IbIlal,C++ Pt<ll\3d:~.

Gl setup and D~I()yment Projects ['.'] CJ Other Projects

· Gl Database Projects

it] CJ Enterprise Template i>roJects

, CJ Visual Studio Analyzer'Projects '

· CJ ExtensibHity Project,

· CJ Application Center Test Projects

Extended

Stored Pro.. . Project

~l~.·

~I!q F~\Temp\C#

,~!~~~~-~~~5f.~~~i._£.:~-~.-

.. ..... . .. '. '. 'j" _u ••

.... • · ... 4·:.···.;;i···Tt~;.-;!:ht;d¥~·,;?·.?'E; .. : ... ·. J .:

Hinh 1.5·6 - Them mot dlf an vao solution.

Sau khi chap nhan hop thoai (nhan OK), Solution gia day se chua 2 du an (hlnh 1.5-7). DV an thl1 hai co cau true khac vdi dV an ditu. VI la mot du an Managed C++, nen no chua nhung thu muc cho danh cho cac tap tin rna nguon , t~p tin dinh nghta va tap tin tai nguyen.

Solution 'AnApplicatjon' (2 projects) dii!!I AnApplication

8l G2l References

. ~ Assemblylnfo.cs !ill FOfm 1. cs

~fI;DiDII

El ~ Source Files

[tj AnOtherApp,cpp [fj Assemblylnfo.cpp rn stdafx.cpp

El e?J Header Files

[J scdefx.h

s .. · ~ Resource FUes

GJ ReadMe.txt

Hinh 1.5-7 - Mi)t solution vai nhisu du all.

b!l90

PHAN I: MiJ dtiu

Trong ca hai du an nay, co mot t~p tin goi la Assembly. Tap tin nay Ole c6 troug tat ca nhung du an .NET Framework. N6 tucng tl,{ nhu tai nguyen VS_ VERSION_INFO sU' dung trong Visual C+-t-. M¢t Assembly Ia mQt dan v~ co ban cua Framework. N6 c6 thjj: chua mOt hoac nhi~u nhil'ng module thue thi va nhung tai nguyen. 1:l"6 cung chua mQt assembly "manifest". Manifest la mot metadata (hay sieu da Iieu) ket hqp vdi assembly. Ban co tMthem thong tin, nhu so' phien ban cua rna chuong trmh, nhan hii;!u dang ky , cac mB ta, va nhirng thu da li~u khac vao manifest bang each dien vao no i dung cua t~p tin Assemblyl nfo. Trong phan 5 cua cuon sach nay, chung tOi se giai thich each sa dung va quan ly Assembly.

4. cAc FILE PHU THUDC CVA mr AN (PROJECT

" .

DEPENDENCIES)

Hien chung ta dang co hai du an trong Solution, ban eo thjj: thay nhung file rna du an phu thuoc bling each nhap chuot phai tren dl! an va chon Project Dependencies tit menu ngil canh. Menu nay cho phep ban quyet dinh nhung dt,t an nao cAn phai duqc bien dich trudc, HQP thoai xac dinn tinh phu thuQc ducc h ien thi nhu trong htnh 1.5·8. HQp thoai hi~n thi dV an AnOtherApp phu thuoc vao du an An Application va nhtrng dir an nay se dl1qc bien dich theo tha tv duqc hien thi.

~!!JI<t""'I; we-.!.';'~&i!ik/iL ] [l;\'.l!l

Pt,""...... ~ldoI····.~ ....

1""""';",, =::

Hinh 1.5·8 - Chi dinh. phI!- thuge trong d1f an

5. CLASS VIEW

:£j Class View !

. '. .. .. Neu da quen thuoc vdi Visual C++ 6.0, th) iit hAn ban se ci

thay quen thuQc vrii tab Class View. Class View IS. nci quan sat cac lap cua dif l n6 ctlng cho phep xem nhung du an phan loai theo lap (class), thanh vi (member), va ham (function). Nhap chu9t tren m9t muc se dua ban vao moi true soan thao, Nhap chuot phai tren mQt lap 5e dU'a ra mQt trmh dan ngu canh 1 g6m nhung muc danh cho viec them vao phirong thac (methods), thuoc ti (properties), truang (fields), va cac chi muc (index). Nhirng lap nay cung thg h

C;:1lI1dNG 1-5: Giai thieu Visual Studio .NET

91~

lop CCf sa rna chung ke' thua cung voi cac giao tiep (interfaces). Hlnh 1.5-9 hj~n thi nqi dung cua khung Class View chu Solution cua chung tao

£:lass V,ew - AnAppllcatlQn· . ~

~$ -! b

i;J'~ am.tmmiffltf

(-'oj {) AnApplication I.:';] ""r: Form 1

Ff.i ,~ 8.oses and Interfaces ~ Dispo.e(bool)

c. FormlO

il!r. InitializeComponentO 1l!r. MainO

&J. components [",i tfilI AnOtherApp

.:"1, •• Glob,,1 Functions and V"n-~bles •• wm.,in(voidl

• _Glob"I_Attribute

Hlnh 1.5-9 Khung Class View.

6. RESOURCE VIEW

~".~.

'01 !

Il!jI Resource View .' 0

Tab dieu khien chua Class View va Solution Explorer cung co

thg dung M chua khung ctta s6 Resource Review. Khi dang tao ra mQt ung dung Windows Forms, ban se khong nhin thay tab nay, nhung ban co th1l yeu du hi1ln thi no met each thu cong b~ng each chon View I Resource View tU menu chmh hoac nhan phim tAt Ctrl+Shift+E. Khung cira s6 nay se cho phep soan thao nhU'ng t~p tin tai nguyen theo ki€u cu rna ban dB. tung biet tli c++ va MFC. CM Y r~ng Visual Studio .NET se cho phep ban tao va soan thao nhttng irng' dung MFC va ATL ben canh nhung dir an theo kien true .NET maio

7. MACRO EXPLORER

42 Macro Explorer C' h'o " ._ • d _ .• ha . '"

o t e rna rong viec s1.1 ung macro trong cong viec p at tnen

hang ngay cua ban. Visual Studio .NET co mot kieu d6i tuong thong minh, d6i tuqng nay cho phep ban viet kich ban (scripting) v~ rnoi chirc nang rna ban co th€ tuang tuong, Macro Explorer la noi rna ban se tim thay t1t ca nhtrng macro ket hop vdi phien ban VS.NET cua chinh ban.

8. TRINH GUlP DiJ(HELP)

H~ thong Help h6 tro ban ra:"t nhieu thii no bao g6m nQi dung trq giup, chi muc, tim ki/fmo Hmh 1.5-10 IA mQt M thong trq giup Help dliy duo

~92

$ ~ Introdudl11;l Visual Studio. NET

; ¢I . ~ GettinQ ASsistanc.e

!±l. ~ Samples and Walkthroughs

[H ~ Developing with Visual Stud,o.NET if I ~ Visual Basic end Visual c#

if.; ~ Visuai c++

[f; ~ JScript

[H ~ .NET Framework Ef.j~ SDKs and Tools

I+] ~ The MSDN Library

Hinh 1.5-10 - Khung efta sf I Help

Tab Index cho phep ban danh vao mot nh6m tlt dan gian va chi rnuc M tim kiern nh6m tlt gAn giong nhat ngay tUc khac, Nhan Search cho phep ban thuc hien nhung cau truy van phuc tap, Nhung muc tai lieu co th~ duoc tim kifi'm bang' each su dung biifu thuc tim kiern, vi du, "Thread and blocking" se tim kiern tat ca nhung tai lieu chua nhung W "Thread and blocking" hoac "Thread" va "Blocking".

PIIAN C : HOP CONG CU (TOOLBOX) vA SERVER EXPLORER

. .

8_L Toobox

H9P cong' C\I (toolbox) chua nhieu phAn, phdn chinh Iii component toolbox.

Hmh 1.5-11 hi~n thi Toolbox trong trang thai mil' rQng. Giao dian cua Toolbox tuung tI! nhu Outlook Bar cda Microsoft Outlook nhung kha eo dong. d day, ban co thl'f nhtn thay Windows Forms dang bi chinh sila. Cac thanh phdn giao dien co th~ duoc keo tlt Toolbox dua vao form.

Hinh 1.5-11 HQp cong CIf.

()X c6 c6

,C;auCSNG 1·5: Giai thisu Visual Studio .NET

931l1eJ

tJ

9. SERVER EXPLORER

Lam ban vdi Toolbox trong thanh cnngcu nay Iii Server Explorer. Day la milt tinh nang moi trong VS.NET cho phep l~p trmh va truy xuat nhanh co sO' da 'l'f~~ cua cac may chu (server), nhung hang dci thong diep, nhirng dich vu M thong,

(~Arihiirig su kien h~ th6ng deu dinrc ghi lai trong Server Explorer. .

'. Server Explorer hi8n thj tap hop cac nut theo cau true cay cho tat ca. nhung may ~hU rna n6 dLfgc Mt n6i Mi. Ban c6 tM chon nhtrng loai nut khac nhau va keo chUng Ien Windows Forms nci rna VS.NET tao mot tap hop nhtrng bo di~u ph6i dtr li~u (adapter) hQ ban, Cac bo dieu ph6i adapter nay cho phep chuong trrnh cua ban truy xmft nut dG' lieu duoc chon, Hinh 1.5-12 la giao dien cua Server Explorer

rx.

mioi~~

r :f#il,aig;glii:iil ~ ~~-1

IEl !~'5erv"rs

8 ill duongle

I l"} • Crystal Services

1 1.± .:. Crystal Enterpl'"Ise

j B g Server Files,

~ r~ W =eeture Examples

f±J W General Business I'

I i=i I5J Event LOgs

",I '-.+1 I.l.!J Application

,. . i:tj· [ill DNS Server

. l ~- (!g Security

. i ",' ',' if) . ffil System

X M",ssage Queues

'EiJ· !2'.1 Performance Counters :::::1 "Services:

c~ .NET Framework Support 5 '.~ Ale~ter

i :i!i. App[it~tion Management

'I, .~ ASP.NET State .~ ClipBook

• \,\1(, ~iiF" \i*!t,C2~"'rp.~~'iv:~~m~_~,_-,:·-,

, I

1\ \

m ~n ch ~a

Hinh1.5-12 - Gu-a SO Server Explorer

. Ban co thG keo mot co so dG' lieu Access tlJ goc Data Connections len tran

l'mQt form, form nay tao mot OleDBConnection toi cO sci' du lieu. Mil' roug nut co sa ! dcr li~u' trqng' Berver Explorer cho phep ban keo cac bang da .lieu (tables), cac thu ~\t~c\store'd procedure, va khung rihln da l ieu (view) di);t len form, d&ng thai M 'tho~g' ~iing se t~o ra eac b(> di~u phoi da lieu tuong' ung chinh xac cho chung.

Ban cung c6 thE! them mot nut server vao cira s6 Server Explorer bang each sa dung Tools I Connection to Server menu, cuathanh cong C1,l chinh. Sau khi thirc hien klit noi vao server, ban c6 th8 truy xuat nhirng dG' lieu rna server cung cap (n~ay trong' Server Explorer

l!J94

PHANI: Md Mu

PaAN D : TAc VI) (TASKS), KET XUAT THONG TIN (OUTPUT), TIM KIEM KET QuA, vA WATCH.

N gay ben duai rnoi trirong' phat trign ban c6 tM tim thiiy m.;.t tab caa s5 vo: nhi~u khung dung trinh bay cac tac vu (Task), va ke't xuiit (Output) tU tie'n trlnh bier dich, theo ve't thong tin go 16i (debug), cac ke't qua tim kiem ... (Hinh 1.5-13)

I!? Ii 1 ~ I • !!JII_A#~lll r'~'~::~:i::i::s:~~~~~"~: _ P-~Oj~:;t~~~PP1~~~tio~;"'co~fiqur~ti-~;'4

Updating references... --,

Per form.in~ m.a.in compilation. . . i

I: ; : \ t emp\ cj\ anapp li:; ~~~~~.~~:~~~~~~~.~o:_~~:~:~~~~

2J T "sk List. llBOutputl i//P Find Symbol Result, [

Hinh 1.5-13 Khung cila so Task, Output, va kit qua tim kiem.

9.1. Tasks

Cac lap trinh him viec vdi Visual C++ truce day se sa dung nhung loi cl thich fiTODO dEl cai dlj.t them rna tuy bie'n cua minh. Cac chu thich (comment) ru xuat hien trong qua trmh Wizard phat sinh rna. Ban chi d.n tim nhung noi dal diu TODO vdi trmh tim kiem tap tin va ban c6 thEl nhm thiiy rna chuang tril d~y du nbu the' nao,

Visual Studio .NET se tl,i dong hoa cac tac vu (task) theo vet tien trio (process) giup ban. Bat eu khi nao ban nhap vao loi chu thieh ItrODO trong I chuang trinh cua ban, IDE se dua mot tac vu vao danh sikh tac vu. Nhap d6i cru tre n tac vu task rna ban muon, ban se diroc d§.n den lbi chli thich trong rna chuo trlnh. Ban co thi\ gan them cac the nhu TODO, HACK, UNDONE vao trong nhu the tuy bien cua ban, nhung the nay cling duoc hien thi trong task list.

Hlnh 1.5-14 hii\n thi danh sach Task List trong m6i quan M voi m';'t TOI Task trong ma chuang trmh.

DEl them the vao trong ehinh danh sach Task List cua ban, cl Tools I Options tU menu chinh, va sau do chon Evironment, Task List ttl danh So cay ella nhung cai dij.t tuy chon trong khung ben trai Mp thoai, Mlj.c djnh, nhi tac vu dircc dau trong cira s5 Task. De nhin thAy tat ca cac tac VI,I, ban nhap ch phai tren khung Task, chon Show Tasks, va chon All.

10. eVA s6 KET XUAT THONG TIN (OUTPUT)

Chon tab Output se hi8n thi cho ban nlt nhieu thong tin. Nhimg thong ( bien dich (bao g6m nhO"ng khuyen cao va thong bao loi) se duge hieri thi tai • Nhirng thong diep tU qua t.rinh theo 'v+'\'t giJ 16i cung dligc hit1n thi.

s h h

,h

h

~p J'

ty, l)'"

cH1fdN~ 1-5: Giai thi~u Visual Studio .NET

11,

'.'

1000; Add ~Y(Qr1~uct~ ~~ -~ter 'ini'ti~'c~F':\re 1000; Add «lY I:msUoctor code- attel" rr.:1*ecoo-F:\Te

,. ~") 11 1000: Add.!ln-,. oOOftStruct'Ol' cGde after lntiaIi..,;;: F:\Ternp\C

C~fl~:L<I'

Hinh 1.5-14 Danh sacli tac UIf. (Task List),

, B{I,n co the' dira nhung thOng di~p cua rieng mlnh vao cua so nay (cu thg Itt khi go 16i chuang trmh) bAng each sit dung d6'i tuqng System.Diagnostics.Trace. Vi dl,1 nhu khi xu 1y mi)t 51,( kien cua bi) dinh gia (timer) trong chuang trtnh C#, rna chuang trinh duqc hign thj trong vi du 1.5-1

Vi Ih! 1.5·1 : SU' durig d6i tu'qn TRACE dtf ki{t xuat, thon tin.

pri vate void OnTick (

obj ect sender I System. EventArgs e)

System. Diagnostics _ Trace. Write (liThe timer

ran !1\n","Timer");

Doan rna nay sinh ra k~t qua nhu hmh 1.5-15.

Nhu ban co tM nhin thay, thong diep "The timer ran II n duqc hi~n thi lap l~i m{lt s61iln do ket qua cua chuang trmh dang chay.

Output '

an

• AnAppliC9.~ion. IIrJCIIi': Loaded • e : \'I:I'inn't. \*,5 5""mbly\ 'lac \ system._ uindows. tor:t:ls\ 1.0.2411.

,',' . JuJApp.!icatl-on. ex.': L06.dlid "c: \uinnt,Au·"lI\bly\qa.c, synna\!. O. Zol!l. O_b'17aScSi&l~~.:; . AnAppl1 c:.t:. a.on . ex.' ~ Lo*d*d . c : \ wi.nnt'.llI.mhly'. 'lac\ s:yst.ra. d.ra.ving\ 1,.. 0, 2:411. O_bO~·

n j' ThA:. proqrDl. • tl$'41 AnAppU.caei.on.oI"x'I1' ha. •• xi"t.oid 'W'i:eh "Qd.e 0 I OxD) .

Hinh 1.5-15 - Hoat df)ng thea tilt trong ella s6 Output.

95l!J

~96

11. TIM KIEM cAc Kt HI~U D~C TRu'NG

Nhan Alt+F12 ho~c chon Edit I Find and Replace I Find Symbol se hi€n th h(lp hi)i thoai Find Symbol. Vci h(lp hQi thoai nay ban co tM tim kiern ky hie (symbol) trong chtnh nhrrng t~p tin U'ng dung cua dl,l' an, cac tham chie (references), ho~c nhung component rna chuang trinh su dung. Ke't qua duoc hi€1 thj trong Ii Find Symbol Results. Nhap chui)t phai tr1'ln mQt muc (entry) trong 0 d se cho phep ban di Wi noidinh nghta tiling. khu vue-soan thao hoac xem luat qu nlurng noi di nh nghta cac tham chie'u cho ky hieu d6. Chon Browse Definition s hien thi 0 Object Browser trong cua so ehinh noi rna ban co th€ nhln thay toan b cay ke' thira doi tuqng cho doi tuqng duqe chon va nhung doi tuong khac tron ehinh nh6m d6.

Hinh 1.5-16 hi€n th] nhtmg bircc d.n lam de tim mot ky hieu (symbol) tron VS.NET.

"".,AnApplicat.on-Mt(ro'!ioftYls.ual(#.NETlde§f9ll1~formJ.ts+ :1. "t;~;;p(' It~p1,~!,:.

fmd'S,;mb(l1 ' 11." =1

;j{ii~;:;::, .J!;!J~ ~i.;iS:-:.: ~

".--:\

Hmh 1-5·16 - SII dlf.ng ht)p thoai Find Symbol.

Giao diijn cua Object Browser hoi khac so voi Browser Info trong VS 6.0. ( su dung Browser Information trong phien ban truce, du an can phai diroc bi€ dich mot each ro rang. Object Browser trong VS.NET luon luon sang sang, ngay ( trUGe khi ban bien dich dl,l' an. N6 cung huu dung cho nhung tac V1,I phat tri~ hang' ngay cua ban. Browser g6m 3 khung - khung Object ben trai, khur Members ben phai, va khung Description iJ ben dudi. Han ntra, thanh cong (

ien ca i~n mg, c~

cau'dNG 1-5: Gi~i thieu Visual Studio .NET

.u

(toolbar) i'r tren chophep ban chon nhtrng tuy chon (options) khac, Sa d\mg Object Browser, ban c6 th~ tim hi~u khong gian ten, lop, ki~u. cac giao tiil'P. ki&u enum, va cac cau true struture. Ban c6 th& tuy y sAp xep cac d6i ttlQ'ng trongkhung Browser bAng each sa dung thanh cong. cu cua Object Browser d~ sAp xep thanh vien thea t~u tl,f abc, theo ki&u dcr lil.\u, theo dlli ttlc;tng truy xult (object .accesa), ho4c nhom theo ki&u d6i tuqng. Hinh 1.5-17 hi&n thi ket qua tim kiem phuong thue InitializeComponent va ke't qua trarig thai eua Object Browser.

AnAppication , {} AnApp!;cation

~,~f'liiIIlIf E II AnOtheIApp ,

'. Global Functions and Vl!flablas ffi "';.;:I mscortib

ffi -0 system.data 1:&.cJ s)lSlem '

r,i: +C.l Sl"'tem, dr .... O;j

it +C.l ')ISIem, .....::low,io,ms It, ,..;.) system, xml

Hinb 1.5-17 - Object Browser.

12. CHi MVC vA KET QuA TiM KIEM

Cil hai khung nay hi~n thi kat qua cua vil.\c tim kiam theo nl)i dung, ho~c bO'i yeu c~u mQt chI muc dan gUin, hoac thong qua sl,f tim hem kha phuc tap. Nhap chu¢t tren nut Search Result se duaban den muc trq giup.

13. CUA 86 GlJ Llh (DEBUG)

" , Ban co th~ thAy ml)t s6 khung ctta s6 khac, Chung 11\ eac kbung Breakpoint X.' CW, ;;a dong l~nh tr1,tc tiep (immediate command window). Chung toi se giai Allich nhirng khung ,ci'(a s6 nay trong pMn "Cd loi chuong trlnh".

~98

PHAN I: Md'dliu

PHANE : CVA s6 THUQC TiNHt DYNAMIC HELP, vA FAVORITES

B§.y gi<r chUngta hay tim hi~u nhi1ng clia a6 thucng' xuyen ali dung nhat trongmoi triJcJngsm;m thao IDE.

13.1. Property Browser

.Hau Mt cac thanh phan cua .NET dliqc cau hinh, di~u khien, va xem xet thong' qua cac thuoc tinh M thong. Cac d6i tuqng ben trong .NET co kha nang hi8'n thj nhi1ng d6i s6 cua chung thOng qua nhi1ng dac tinh rieng, nhi1ng di).c tfnh nay duoc gAn vao nhi1ng thui)c tinh cua chung, Neu ban quen thuoc vai Visual Basic, thi thuoc tinh luai {property grid) se him cho ban cam thay de chiu, Neu ban la nguoi l~p trmh c++ ky cJ!U, thi phan h~ thong thuoc tinh (property system) co tM t6n mi)t It thi'Ji gian dI!' him quen vci n6. Hinh 1.5-18 hie'n thi khung ci'ia s6 Properties dllqc dung M chinh sua cac thanh phdn dieu khien cua Window Forms.

Dropdown Iist of

Hinh 1.5-18 Property Browser.

Khung Property Browser hi~n thi mQt a hroi gam tem va gia tri cua nhi1n~ muc c6 the' nh6m ll;li tuy y thanh nhi1ng phan IOI;li. MQt s6 muc c6 them thuec tinb con. Nhi1ng thu~ tinh nay c6 tM duc;rc hie'n thi nhieu th6ng tin han bang each

u

(:HudNG 1-5: Gi6i thieu Visual Studio .NET

99[IJ

nhan vao billu tuqng dau + ben trai. Tuong tl,l, toan b9 nhung phan loai Qeategories) co thii" rna va thu lai bang each nhan vao billu tilqng + va - thich hcp, MQt each t6ng quat, thuoc tinh h.tdi c6 quan h~ vci nhirng gia tri don gian rieng

it bi~t, vi du, m9t con so hoac mot chu5i gia trio Property Browser con co kha nang I»ie"n d6i eac ki€u thOng tin (vi du mQt gill. tr! mau dang so RGB) thanh phan til giao dien (UI ..:. user interface), chang han nhu nhirng m§.u mau trong hmh 1:5-18 hi~n thi mot thuoc tinh Cursor va gia tri hien hanh duqc chon la Ibeam.

et '( Property Browser khong chi hiii"n thi thong tin & dang than thien ngiloi

19 dilngnia. con hilln th] thea dang gqi nhc, N6 cho phep ban chinh 81ta thea each

ah riling eua mmh NhiYng mau mau hiii"n thi trong hinh 1.5-18 e6 tM duQ'c d6i Iai sa

ial dung' bi> chon mau (color picker) chuyen dung xu at hien khi ban muon thay d6i gia

ElU trl mAu tl10hg irng, Hmh 1.5-19 hi~n thi Property Browser dang thay d6i mot

rn) trong nhi1ng gia tr! mau,

~

so

is,

]

Hinh 1.5-19 - Thay d6i gui tri miui vai Property Browser.

Con mQt s6 trlnh soan thao chuyen dung danh cho nhi1ng thuoc tinh khac cua d6i tuqng. Vi du thuQc tfnh Anchor va Dock cua cac phdn ttc dj~u khiii"n Windo,ws Form co nhang trlnh soan thaD rat tTl!c giac, theo giao di~ d6 hoa,

Thanhcong cl,l cua Property Browser (tren ddu ctca s6 Property Browser) tho phep thay d6i each nhin v~ danh sach thuQc tinh. Vi du ban c6 tM thA'y nhi1ng nut nMl"n sau:

thang : tinh : each

~100

pHAN I: Mer d~u

1.1 Phan loai (Categorized) - NMm cac thuOc tinh thea phfm loai nhu Appearance hoac Behavior.

Iftl Silp xe'p danh sach ten thuQc tinh thea thli tt,l chll cai (Aphabetic) thay vi nhom thea phan loai.

(9'1 SIj ki~n (Events) - Liet ke tat ca cac sll kien cua mot component va cho phep ban tao ra bO xli ly sv kien (event handler) cho chung, D~ tao hoac hi~u chinh nOi dung bl) xli ly cho mi)t sv kien CI,I th~, ban nhap chuQt tren ten sv kien trong danh sach. IDE se cho phep ban danh vao ten cua bQ xli It hol!.c chon bO xli It dd Mn tai tit mi)t danh sach tha xu6ng. Sau khi dd tao xong bi) xii ly; ban co th~ nhap doi chuc)t ken no d~ di tdi rna chuong trtnh. Neu ban mu6n tao bi) xii ly vai m<)t ten du~c chon truce, don gian nhap doi chuQt tren ten sv ki$n (event), IDE se tv tao mQt bi) xii ly tinmg aug cho sl,! kien,

f~cJ ThOng di~p (Messages) - Nut nhan nay se xudt hi~n tren thanh cong cu khi khung clia s6 Class View dang hi~n thi aug dung Windows c++. Ban eo thil' xern, chinh sua, vA them vao nhiffig bi? xli lythOng di¢p cho cac lap c++ thong qua Property Browser. Cach thtrc cua viec them nhimg bi? xlt ly thOng di~p vao cac lap C++ tuong W nhu phan them va hi~u chlnh cac bQ xlt It Sl,f ki~n dd d~ c~p trudc day.

1_:1 Dinh nghta chdng (Overrides) - Khi Class View dang hi€n thi cac lap C++, ban co thg soan thao, them vao, va xem cac thanh phdn dinh nghla chong (g6m phinrng thuc, thuQc ttnh) cho mi)t ldp du~c chon trong Class View bang each nhap chuQt vao nut nhlln riay tren thanh c6ng c\I eua Property Browser.

[I] Trang 'th~Qc tinh (Property pages) - Khi ban sli dung Solution Explorer M xem dV an (project) hoac nhung' cdu hinh cua Solution, thanh cong CI,I cua Property Browser se hi~nthi nut nhan nay. Sli dung n6 M hi~n thi hQp hQi thoai vci nhi1ng thuQc tinh sin sang cho cau hmn ban cAn.

nm) Thuoc tinh (Properties) - Neu ban d§ si'i dung Property Browser M hi~n thi nhirng sV ki~n hoac thong tin khac, tht ban c6 tM chuy~n nguqc lai Wi each xem thu(Jc tinh binh th!lang bl1ng nut nhan nay.

14. TRiNH TR(1 GUlP DQNG (DYNAMIC HELP)

H~ trQ' giup dong <Dynamic Help) mdi trong Visual Studio .NET tao ra 8~ khac bi~t IOn. d6i vdi ngttai l~p trinh. Bay gia ban khong can tim kie'm co sa da lieu tro pup khi dang l~p trinh, Mi vi Dynamic Help luen luen gill mOt danh sach thOng tin duqc c~p nhat lien quan tai nhilng hanh dQng rna ban dang thao taco Th~m chi n6 con giu thong tin v~ nhtrng cua s6 rna ban dang sll dung trong IDE.

,QBudN'G 1"5: Gidi thi~u Visual Studio .NET

101~

Vig ... , n~u ,b~n chon tab Dynamic Help trong phan E va sau do chon Class View, JIlQtnl1,lc .trqgiup Help v~ viec Sl! dung Class View se slin sang bat ky luc nao M "A.tham khao .

. iKinh nghiem cho thay Dynamic Help y!!u cau nhieu cong sac xl! 1:5', hai vi ~6timkiB"m va d6i chieu drr lieu hau nhu v6"i moi thao tac bam phim, di chuyl!"n 'tl'1~t' ' ... Ban 66 tM tuy chon tAt Dynamic Help.

~15.ei1A s6 FAVORITE

h DAy la noi chua danh sach cac dia chi Internet ua thich (gQi la Favorite)

~i ~b~1l:N6 cho phep ban chon mQt lien k€t thuiYngslt dung nhAt va nQi dung ciia

~i tt8l'lg,tai Mu do lien k€t tro den se hien thi trongeira s6 soan thao chinh tll<1ng tI!

.n nhu cU'a s6 trlnh duyii\t Internet Explorer.

LO

hi

n,

aa ~p :k

+,

m fp

d~ ·ty ng

s(! diJ lob ' ;ac! )E ..

16. CHUdNG TRINH GO UlI (DEBUGGING).

Ngay ca nguni I~p trinh tuyet viYi cung c6 th~ tao ra llii, vi v~y c6 mQt chuong trmh get Wi tOt la di~u rf(t sac quan trong, Vi~c get Illi v6i Visual Studio duqc thuc hien kha d~ dang, va ban co kha nhieu tuy chon cho vi~c ngirng chuang trinh va xem xet rna chuang trtnh, each dan gian nha't M get IOi (debug) rna chuongtrlnh Ia khi bAt dau qua trinh bien dich. Chuang trmh get 16i ciing co thE\" My mQtdi~u ki~n 1M, hoac b~n c6 th~ gAn chuang trinh gfJ I6i (debugger) vao ngay ti€n trmh dang chay, Chung ta hay xern xet truong hop dan gian diu WIn .

.Elii' gfJ 1M, chuang trinh cAn phai dttqc dich a chif d<) debug . .Elii' chon kil!"u debug, ban sl! dung Debug I Configuration Manager tit menu chinh.Htnh 1.5-21 Iii cU'a s6 Configuration Manager

Release <New".> <EdL.>

Hinb 1.5-21 - Hr)p thoai Configuration Manager.

1mJ 102

PnAN I: Md' dtiu

Sau khi cdu htnh debug duoc chon, bLiac ke' ti~p la chi ra nrri ban mucin chuang trinh ngirng (stop) d~ ki~m soat, Di~u nay duqc thue hi~n bAng each d~t di~m dUng (breakpoint) ngay trong rna ngudn. Ban cling c6 th~ lam di~u nay bang each chon dong ma nrri rna ban mucin ngiing va nhan F9. M(it dau do se xudt hien i'J mep cua trinh soan thao ma (code editor), luc d6 breakpoint dang {j trang thai kich hoat (active). Ban cung c6 th~ d~t breakpoint bang ca~h nhap chuot vao mep xam ben trai clia 56 soan thao, hoac nhsn Ctrl--B.

Dil kich hoat khung clia 56" Debug, chon Debug I Windows I Breakpoint hoac nhan Ctrls-Alt-B.

Sau khi breakpoint dliqc d~t thanh cong, chuong trtnh c6 th~ chay vdi mong dqi cua vi~c danh trung diii'm dirng (break).· Nhan F5 d~ thirc thi rna chuang trml trong kieu debug.

. "---_._.- - ____,....,

,

, ""

lJIEM DUNG BREAKPOINT

,

MOt vcng tron do rong la mOt breakpoint khOng kich ho:;tt.j Breakpoint c6 t.he dliqc kich hoat (active) hoac i'J dang khong' kich hoaf (deactive). Chon Debug I Windows I Breakpoints hoac nhan Ctrl+Alt+B. MQtl ,di1lm dung break.point vdi met dau hoi ben trong Ch.O biet n6· c6 tM khlin~ ic6 hifi;u luc, bai vi ti~n trlnh mil. n6 hcp tac chua chay. Vi du, di~u nay xif ~a khi ban d~t breakpoint trong ling dung A va sau d6 chay irng' dung B t' i cung Solution. Ngay khi tien trinh chua breakpoint diroc tai vao, dii'!m dUn~ breakpoint se chuylln sang trang thai kich heat. I

Breakpoint vrii mOt ddu cham than khong thil dat, bci vi co mot loi.i !C6 Ie vi tri breakpoint thi khong hop I~ hoac breakpoint c6 tM bi tily thuQq ~i!.o mQt di~u kien mil. c6 tM khiing bao gia thoa man. !

,

!

I M(it breakpoint vdi m(lt cham trong n6 thi dliQ'c d:;!.t trong trangj

IAsp, va diem dirng (break) dliqc anh x!,\ tai trang HTML tuong ling duq~ ~h8.t sinh bai ASP.

!

c ~~ • _

_---_-_ ~ -_ .. "---- -- - -.~------'

17. cAl DAT BREAKPOINT NANG CAO.

Thinh thoang ban c§.n nhi~u han mQt noi M ngirng va kiem tra rna ngudn D~ tao ra met breakpoint mdi, chon dong rna va nhan F9 hoac Ctr'l-i-B, F9 se t dQng di~n VaG ham va dong rna (line of code) noi rna ban muon ngung, Ctrl-i-B s yeu ci1u ban di~n thong tin bang tay. Khi ban sli dung Ctrl-i-B, ban se nhm tM hop h~i thoaiNew Breakpoint, nhu dliqc hig-n thj trong hinh 1.5-22.

You might also like