Lập trình mạng trong C#

Trong nhiều năm, các lập trình viên C và C++ luôn phải đối mặt với những vấn đề đau đầu như: sử dụng con trỏ, quản lí bộ nhớ, truyền tham trị, tham biến, xử lý danh sách, xây dựng thư viện, đa kế thừa, xây dựng giao diện thân thiện với người dùng Vì vậy họ luôn mong muốn, tìm kiếm một ngôn ngữ thay thế có khả năng cũng như tính uyển chuyển mạnh như C và C++ hơn nữa lại đơn giản hơn. Vào giữa những năm 90, thế giới lập trình có sự thay đổi lớn với sự bùng nổ Internet ( Internet Boom ) và sự ra đời của ngôn ngữ lập trình Java. Ngay từ khi ra đời, Java đã cho thấy khả năng to lớn của nó trong việc phát triển các ứng dụng trên internet. Hơn nữa Java còn thnàh công với tuyên bố “write once, run anywhere” cố thể tạm dich là : viết một lần, chạy trên mọi nền. Thành công đó xuất phát từ ý tưởng tách rời mã khi biên dịch chương trình và mã khi chạy chương trình, đây là điểm khác biệt lớn so với những ngôn ngữ lập trình C hay C++. Java đưa ra một khái niệm mới : máy ảo. Máy ảo thực hiện các công việc như biên dịch ra mã máy, quản lí bộ nhớ hay nói cách khác, máy ảo đóng vai trò giao tiếp giữa ứng dụng Java và môi trường ( hệ điều hành, hay phần cứng) làm cho ứng dụng Java độc lập với môi trường. Tuy nhiên tốc độ phát triển Java lại chậm dần, và không thể đấp ứng được những đòi hỏi ngày càng cao của người dùng. Các hãng phát triển Java chậm đưa ra một môi trường tích hợp IDE phục vụ cho phát triển các dự án phần mềm. Việc lập trình các ứng dụng trên Windows bằng Java không thuận tiện, Java có nhiều hạn chế trong việc giao tiếp với các ngôn ngữ khác như C++, Visụal Basic Java không có sự phát triển đồng nhất theo xu hướng thuận tiện cho người sử dụng, phải mất nhiều năm Java mới hỗ trợ được điều khiển Mouse – wheel, khó sử dụng thư viện API của hệ điều hành, phiên bản Visual J++ của Microsoft phát triển thì lại mang nhiều nét không giống với nguyên bản. Windows XP ra đời với tuyên bố không hỗ trợ máy ảo Java, không tích hợp máy ảo Java vào trình duyệt IE 6.0 đã làm uy tín của Java suy giảm nặng nề. Cuối cùng thì ngôn ngữ mà các lập trình viên mong đợi cũng xuất hiện, đánh dấu chấm hết cho cuộc tìm kiếm ngôn ngữ lập trình kéo dài nhiều năm của các lập trình viên. Được bắt đầu nghiên cứu từ năm 1997, vào năm 2001, Microsoft giới thiệu một platform mới --.Net, đi cùng với nó là một ngôn ngữ mới - C#.

C# được coi như ngôn ngữ mang tính cách mạng của Microsoft. Dựa trên kinh nghiệm của các ngôn ngữ trước đó như C, C++ và VB, C# được thiết kế nhằm sử dụng đơn giản, hoàn toàn hướng đối tượng. Với sự tích hợp C# với VS. Net, việc phát triển các ứng dụng Windows và Web nhanh và đơn giản. Có thể truy cập vào các thư viện lớp của .Net, C# hỗ trợ phát triển các ứng dụng ASP.Net và dịch vụ Web. Bên cạnh đó, C# tăng cường năng suất lập trình bằng việc xoá bỏ đi những lỗi thông thường có trong C và C++.

Java thành công nhất trên 2 lĩnh vực: lập trình các ứng dụng trên server và trong giảng dạy khoa học tính trong các trường học. C# cũng có khả năng vượt trội Java trên hai lĩnh vực đó. Trong đề tài này, chúng em không thể trình bày hết mọi vấn đề liên quan đến ngôn ngữ C#, chúng em chỉ xin giới thiệu sơ bộ về .NET và C# cùng với một số vấn đề nâng cao trong ngôn ngữ C# như sau:

1. Giới thiệu sơ bộ về nền .NET và ngôn ngữ C#

2. Đồ hoạ trong C#

3. Đa luồng trong C#

4. XML và C#

5. Lập trình mạng trong C#

6. Một vài so sánh C# với các ngôn ngữ khác

 

doc81 trang | Chia sẻ: luyenbuizn | Lượt xem: 1460 | Lượt tải: 0download
Bạn đang xem trước 20 trang nội dung tài liệu Lập trình mạng trong C#, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
MôC lôc Danh s¸ch c¸c h×nh vÏ H×nh 1 KiÕn tróc nÒn .NET 9 H×nh 2 CÊu tróc CLR 11 H×nh 3 T« mµu b»ng bót vÏ Gradient tuyÕn tÝnh 21 H×nh 4 §­êng BÐzier ®­îc t« bëi bót phñ Gradient 22 H×nh 5 ChuyÓn ®æi ®å thÞ 22 H×nh 6 Co gi·n vïng ¶nh 23 H×nh 7 C¸c møc ®é trong suèt cña mµu nÒn 23 H×nh 8 HÖ trôc to¹ ®é cña GDI+ 25 H×nh 9 DÞch chuyÓn hÖ to¹ ®é 26 H×nh 10 Vßng ®êi cña mét luång 36 H×nh 11 Vßng lu©n phiªn thùc hiÖn luång 36 H×nh 12 Minh ho¹ so¹n th¶o trong WordPad 42 H×nh 13 M· cña v¨n b¶n ®äc b»ng NotePad 43 H×nh 14 M· cña v¨n b¶n Word ®äc b»ng NotePad 43 H×nh 15 T¹o v¨n b¶n HTML trong NotePad 44 H×nh 16 CÊu tróc cña XML 48 H×nh 17 Khai b¸o thµnh phÇn trong XML 49 H×nh 18 Minh häa cÊu tróc c©y cña vÝ dô 51 H×nh 19 KÕt qu¶ ch­¬ng tr×nh t¹o tµi liÖu trªn IE 6.0 54 H×nh 20 KÕt qu¶ vÝ dô Serializing trªn IE 6.0 58 Danh s¸ch c¸c thuËt ng÷ viÕt t¾t IE 6.0 = Internet Explorer 6.0 CLS = Common Language Spcification CLR = Common Language Runtime IDE = Integrated Development Environment API = Application Programming Interface VB = Visual Basic VC = Visual C VS = Visual Studio XML = Extensible Markup Language MSIL = IL = Microsoft Intermediate Language COM = Component Object Model IDL = Interface Definition Language DLL = Dynamic Link Library GC = Garbage Collection JIT = Just In Time compiler ADO = ActiveX Data Object MS = Microsoft SQL = Structured Query Language GDI = Graphic Device Independence WMF = Window MetaFile EMF = Enhanced MetaFile CPU = Central Processing Unit RTF = Rich Text Format HTML = Hyper Text Markup Language SGML = Standard Generalized Markup Language Giíi thiÖu ®Ò tµi Trong nhiÒu n¨m, c¸c lËp tr×nh viªn C vµ C++ lu«n ph¶i ®èi mÆt víi nh÷ng vÊn ®Ò ®au ®Çu nh­: sö dông con trá, qu¶n lÝ bé nhí, truyÒn tham trÞ, tham biÕn, xö lý danh s¸ch, x©y dùng th­ viÖn, ®a kÕ thõa, x©y dùng giao diÖn th©n thiÖn víi ng­êi dïng… V× vËy hä lu«n mong muèn, t×m kiÕm mét ng«n ng÷ thay thÕ cã kh¶ n¨ng còng nh­ tÝnh uyÓn chuyÓn m¹nh nh­ C vµ C++ h¬n n÷a l¹i ®¬n gi¶n h¬n. Vµo gi÷a nh÷ng n¨m 90, thÕ giíi lËp tr×nh cã sù thay ®æi lín víi sù bïng næ Internet ( Internet Boom ) vµ sù ra ®êi cña ng«n ng÷ lËp tr×nh Java. Ngay tõ khi ra ®êi, Java ®· cho thÊy kh¶ n¨ng to lín cña nã trong viÖc ph¸t triÓn c¸c øng dông trªn internet. H¬n n÷a Java cßn thnµh c«ng víi tuyªn bè “write once, run anywhere” cè thÓ t¹m dich lµ : viÕt mét lÇn, ch¹y trªn mäi nÒn. Thµnh c«ng ®ã xuÊt ph¸t tõ ý t­ëng t¸ch rêi m· khi biªn dÞch ch­¬ng tr×nh vµ m· khi ch¹y ch­¬ng tr×nh, ®©y lµ ®iÓm kh¸c biÖt lín so víi nh÷ng ng«n ng÷ lËp tr×nh C hay C++. Java ®­a ra mét kh¸i niÖm míi : m¸y ¶o. M¸y ¶o thùc hiÖn c¸c c«ng viÖc nh­ biªn dÞch ra m· m¸y, qu¶n lÝ bé nhí… hay nãi c¸ch kh¸c, m¸y ¶o ®ãng vai trß giao tiÕp gi÷a øng dông Java vµ m«i tr­êng ( hÖ ®iÒu hµnh, hay phÇn cøng) lµm cho øng dông Java ®éc lËp víi m«i tr­êng. Tuy nhiªn tèc ®é ph¸t triÓn Java l¹i chËm dÇn, vµ kh«ng thÓ ®Êp øng ®­îc nh÷ng ®ßi hái ngµy cµng cao cña ng­êi dïng. C¸c h·ng ph¸t triÓn Java chËm ®­a ra mét m«i tr­êng tÝch hîp IDE phôc vô cho ph¸t triÓn c¸c dù ¸n phÇn mÒm. ViÖc lËp tr×nh c¸c øng dông trªn Windows b»ng Java kh«ng thuËn tiÖn, Java cã nhiÒu h¹n chÕ trong viÖc giao tiÕp víi c¸c ng«n ng÷ kh¸c nh­ C++, Visôal Basic…Java kh«ng cã sù ph¸t triÓn ®ång nhÊt theo xu h­íng thuËn tiÖn cho ng­êi sö dông, ph¶i mÊt nhiÒu n¨m Java míi hç trî ®­îc ®iÒu khiÓn Mouse – wheel, khã sö dông th­ viÖn API cña hÖ ®iÒu hµnh, phiªn b¶n Visual J++ cña Microsoft ph¸t triÓn th× l¹i mang nhiÒu nÐt kh«ng gièng víi nguyªn b¶n. Windows XP ra ®êi víi tuyªn bè kh«ng hç trî m¸y ¶o Java, kh«ng tÝch hîp m¸y ¶o Java vµo tr×nh duyÖt IE 6.0 ®· lµm uy tÝn cña Java suy gi¶m nÆng nÒ. Cuèi cïng th× ng«n ng÷ mµ c¸c lËp tr×nh viªn mong ®îi còng xuÊt hiÖn, ®¸nh dÊu chÊm hÕt cho cuéc t×m kiÕm ng«n ng÷ lËp tr×nh kÐo dµi nhiÒu n¨m cña c¸c lËp tr×nh viªn. §­îc b¾t ®Çu nghiªn cøu tõ n¨m 1997, vµo n¨m 2001, Microsoft giíi thiÖu mét platform míi --.Net, ®i cïng víi nã lµ mét ng«n ng÷ míi - C#. C# ®­îc coi nh­ ng«n ng÷ mang tÝnh c¸ch m¹ng cña Microsoft. Dùa trªn kinh nghiÖm cña c¸c ng«n ng÷ tr­íc ®ã nh­ C, C++ vµ VB, C# ®­îc thiÕt kÕ nh»m sö dông ®¬n gi¶n, hoµn toµn h­íng ®èi t­îng. Víi sù tÝch hîp C# víi VS. Net, viÖc ph¸t triÓn c¸c øng dông Windows vµ Web nhanh vµ ®¬n gi¶n. Cã thÓ truy cËp vµo c¸c th­ viÖn líp cña .Net, C# hç trî ph¸t triÓn c¸c øng dông ASP.Net vµ dÞch vô Web. Bªn c¹nh ®ã, C# t¨ng c­êng n¨ng suÊt lËp tr×nh b»ng viÖc xo¸ bá ®i nh÷ng lçi th«ng th­êng cã trong C vµ C++. Java thµnh c«ng nhÊt trªn 2 lÜnh vùc: lËp tr×nh c¸c øng dông trªn server vµ trong gi¶ng d¹y khoa häc tÝnh trong c¸c tr­êng häc. C# còng cã kh¶ n¨ng v­ît tréi Java trªn hai lÜnh vùc ®ã. Trong ®Ò tµi nµy, chóng em kh«ng thÓ tr×nh bµy hÕt mäi vÊn ®Ò liªn quan ®Õn ng«n ng÷ C#, chóng em chØ xin giíi thiÖu s¬ bé vÒ .NET vµ C# cïng víi mét sè vÊn ®Ò n©ng cao trong ng«n ng÷ C# nh­ sau: Giíi thiÖu s¬ bé vÒ nÒn .NET vµ ng«n ng÷ C# §å ho¹ trong C# §a luång trong C# XML vµ C# LËp tr×nh m¹ng trong C# Mét vµi so s¸nh C# víi c¸c ng«n ng÷ kh¸c Trong ®Ò tµi nµy, chóng em kh«ng d¸m ch¾c mäi tr×nh bµy, ®¸nh gi¸ lµ chÝnh x¸c, x¸c ®¸ng. Trong khi lµm ®Ò tµi cã mét sè thuËt ng÷ Anh khã chuyÓn t¶i ®óng nghÜa sang tiÕng ViÖt nªn ®­îc gi÷ nguyªn. Chóng em kÝnh mong thÇy th«ng c¶m vµ gãp ý söa ch÷a nh÷ng ®iÓm ch­a tèt trong b¸o c¸o. PhÇn I: Giíi thiÖu s¬ bé vÒ nÒn .NET vµ ng«n ng÷ C# NÕu nh­ Java ra ®êi, næi tiÕng víi tuyªn bè: “ write once, run anywhere”, th× ngay tõ khi chµo ®êi, C# vµ .NET ®­îc c¸c nhµ thiÕt kÕ g¾n víi tuyªn bè: “ Every language, one platform”, cã thÓ t¹m dÞch lµ: mäi ng«n ng÷ ®Òu ch¹y trªn mét nÒn. NÒn ®ã chÝnh lµ .NET ( .NET Framework). VËy .NET lµ g× ? Chóng ta sÏ cïng nhau t×m hiÓu vÒ .NET qua c¸c vÊn ®Ò sau : Giíi thiÖu chung vÒ nÒn .NET Nh÷ng ®Æc ®iÓm cña nÒn .NET Nh÷ng thµnh phÇn cña .NET I. Giíi thiÖu s¬ bé vÒ .NET I.1. Giíi thiÖu chung vÒ nÒn .NET (.NET platform) NÒn .NET lµ mét kh¸i niÖm míi trong khoa häc m¸y tÝnh; nã v­ît ra ngoµi khu«n khæ cña mét ng«n ng÷ lËp tr×nh, mét bé th­ viÖn; nã ch­a ph¶i lµ mét hÖ ®iÒu hµnh, chóng ta cã thÓ hiÓu ®¬n gi¶n nã lµ mét nÒn ®Ó tõ ®ã cã thÓ ph¸t triÓn c¸c øng dông c¶ trªn Windows lÉn trªn Internet thuËn tiÖn h¬n. NÒn .NET ®­îc thiÕt kÕ ®Ó phôc vô c¸c môc ®Ých sau: Cung cÊp mét m«i tr­êng lËp tr×nh h­íng ®èi t­îng tuyÖt ®èi, m· cña ch­¬ng tr×nh ®­îc thùc thi trªn mét m¸y hay c÷ng cã thÓ thùc thi tõ mét m¸y tõ xa th«ng qua Internet. Gi¶m thiÓu tèi ®a xung ®ét gi÷a c¸c version cña mét phÇn mÒm §em l¹i mét m«i tr­êng cho phÐp c¸c ng«n ng÷ lËp tr×nh cã thÓ giao tiÕp víi nhau, tÝch hîp víi nhau Chó ý: chóng ta còng cÇn ph¶i ph©n biÖt gi÷a hai thuËt ng÷: .NET vµ nÒn .NET. .NET bao gåm 3 thµnh phÇn c¬ b¶n : NÒn .NET: mét nÒn cho phÐp ph¸t triÓn c¸c øng dông C¸c s¶n phÈm .NET: bao gåm tÊt c¶ c¸c s¶n phÈm cña Microsoft dùa trªn nÒn .NET. C¸c dÞch vô .NET: c¸c dÞch vô ®­îc cung cÊp bëi Microsoft phôc vô cho viÖc ph¸t triÓn c¸c øng dông ch¹y trªn nÒn .NET. Nh­ vËy nÒn .NET chØ lµ mét thµnh phÇn cña .NET. NÒn .NET gåm hai thµnh phÇn chÝnh: Common language runtime ( CLR ) vµ th­ viÖn líp nÒn .NET. Hai thµnh phÇn nµy sÏ ®­îc tr×nh bµy cô thÓ ë nh÷ng phÇn sau. I.2. KiÕn tróc ph©n líp nÒn .NET H×nh 1 biÓu diÔn kiÕn tróc nÒn .NET. Mçi ng«n ng÷ thuéc gia ®×nh .NET ( phiªn b¶n ®Çu tiªn gåm c¸c ng«n ng÷ : VC.NET, VB.NET, C#, sau ®ã cã thªm VJ# ) H×nh 1 KiÕn tróc nÒn .NET ®Òu ®­îc dÞch sang ng«n ng÷ trung gian Microsoft ( MSIL hay gäi ng¾n lµ IL ) – ng«n ng÷ dùa theo tiªu chuÈn cña Common Language Specification ( CLS ). Cã 3 lo¹i øng dông c¬ b¶n lµ: c¸c øng dông Web, c¸c dÞch vô Web, c¸c øng dông Form trªn Windows. Nh÷ng øng dông nµy sö dông c¸c ®èi t­îng, ph­¬ng thøc tõ th­ viÖn líp c¬ së vµ ch¹y trong m«i tr­êng CLR. I.3. Nh÷ng ®Æc tr­ng cña nÒn .NET Nh÷ng ®Æc tr­ng chñ chèt cña nÒn .NET chñ yÕu n»m trong CLR, th­ viÖn líp c¬ s¬ vµ CLS. Chóng em chØ xin tr×nh bµy mét sè ®Æc tr­ng chóng em cho lµ dÔ nhËn biÕt vµ n¾m b¾t nhÊt I.3.1. Ph¸t triÓn ®a ng«n ng÷ Tr­íc ®©y, vÊn ®Ò sö dông ®a ng«n ng÷ ( multilanguage ) hay giao thoa ng«n ng÷ lËp tr×nh ( cross – language ) ®· ®­îc ®Ò cËp nhiÒu khi ph¸t triÓn c¸c øng dông. §a ng«n ng÷ cã thÓ hiÓu lµ viÖc sö dông nhiÒu ng«n ng÷ ph¸t triÓn mét øng dung, mçi ng«n ng÷ viÕt lªn mét phÇn øng dông. Víi gi¶i ph¸p nµy, ng­êi lËp tr×nh cã thÓ sö dông mét ng«n ng÷ mµ m×nh quen thuéc kÕt hîp sö dông l¹i nh÷ng ®o¹n m· ®­îc viÕt trªn nh÷ng ng«n ng÷ kh¸c phï hîp víi môc ®Ých cña mét phÇn ch­¬ng tr×nh nhÊt ®Þnh ®Ó x©y dùng lªn mét øng dông hoµn chØnh. Mét ph­¬ng ph¸p truyÒn thèng ®Ó thùc hiÖn gi¶i ph¸p nµy lµ x©y dùng nªn c¸c th­ viÖn ®éng .dll. Ph­¬ng ph¸p nµy ®­îc ¸p dông trong VS 6.0. Mçi ng«n ng÷ ®Òu cã thÓ x©y dùng nªn mét th­ viÖn .dll. Mét ng«n ng÷ kh¸c sÏ sö dông file .dll ®ã nh­ lµ mét phÇn th­ viÖn cña m×nh. Ph­¬ng ph¸p th­ hai lµ sö dông m« h×nh ®èi t­îng h­íng thµnh phÇn – COM ( trong ®Ò tµi nµy sÏ kh«ng tr×nh bµy vÒ COM, ë ®©y chóng em chØ ®iÓm qua). C¶ hai ph­¬ng ph¸p trªn ®Òu sö dông ng«n ng÷ ®Þnh nghÜa giao diÖn ( IDL ). Víi nÒn .NET, chóng ta cã thÓ thùc hiÖn viÖc phèi hîp ng«n ng÷ dÔ dµng h¬n. NÒn .NET cho phÐp ng«n ng÷ nµy cã thÓ tÝch hîp víi ng«n ng÷ kh¸c b»ng viÖc sö dông ng«n ng÷ trung gian lµ MSIL TÊt c¶ c¸c ng«n ng÷ khi so¹n th¶o cã thÓ kh¸c nhau, sau ®ã ®­îc dich bëi mét ch­¬ng tr×nh dÞch thÝch hîp, chóng ®Òu trë thµnh d¹ng ng«n ng÷ trung gian, kh¸c biÖt gi÷a c¸c ng«n ng÷ hoµn toµn bÞ xo¸ bá. Ng«n ng÷ trung gian sÏ ®­îc ®­a vµo CLR ®Ó thùc thi. I.3.2. Ch­¬ng tr×nh øng dông ®éc lËp víi hÖ ®iÒu hµnh vµ bé vi xö lÝ Ng«n ng÷ trung gian IL lµ ng«n ng÷ ®éc lËp víi bé vi xö lÝ, nã lµ ng«n ng÷ ë cÊp cao h¬n ng«n ng÷ m¸y. Khi nµo cÇn thùc thi, IL sÏ ®­îc dÞch ra ng«n ng÷ m¸y thÝch hîp. BÊt cø hÖ ®iÒu hµnh nµo hç trî nÒn .NET th× øng dông .NET sÏ ch¹y vµ kh«ng gÆp khã kh¨n g×. §èi víi c¸c hÖ ®iÒu hµnh thuéc hä Windows tõ Win 98 trë nªn ®Òu hç trî nÒn .NET. Th¸ng 6 – 2001, khi míi cho ra ®êi .NET, Microsoft ®· th«ng b¸o r»ng hä ®· ®¹t ®­îc tho¶ thuËn ph¸t triÓn .NET trªn Unix, tuy nhiªn ®Õn nay vÉn ch­a cã kÕt qu¶ chÝnh thøc. Th¸ng 10 – 2001, Microsoft cho phÐp Ximian, ng­êi ®· ph¸t triÓn giao diÖn GNOME th«ng dông trªn Linux, ph¸t triÓn mét ch­¬ng tr×nh dÞch C# vµ CLR trªn Linux. Phiªn b¶n ®Çu tiªn cã tªn Mono cã thÓ t×m trªn www.go-mono.net. C«ng viÖc hiÖn ®ang tiÕn hµnh ë giai ®o¹n x©y dùng th­ viÖn c¬ së trªn Linux. I.3.3. Qu¶n lÝ bé nhí tù ®éng Rß rØ bé nhí lu«n lµ vÊn ®Ò phøc t¹p trong lËp tr×nh khi ta kh«ng qu¶n lý næi nh÷ng vïng nhí ®· ®­îc cÊp ph¸t. Trong Visual Basic, qu¶n lý bé nhí ®­îc thùc hiÖn bëi kÜ thuËt ®Õm sè lÇn truy cËp. Trong C vµ C++, c¸ch tèt nhÊt ®Ó qu¶n lý bé nhí lµ tù m×nh tr¶ l¹i cho hÖ ®iÒu hµnh nh÷ng vïng nhí kh«ng dïng n÷a. Trong .NET, cã mét bé phËn lµ GC( Garbage Collection ) lµm nhiÖm vô thu håi l¹i vïng nhí hiÖu qu¶ h¬n nh÷ng c¸ch trªn. I.3.4. Hç trî phiªn b¶n Nh÷ng lËp tr×nh viªn ®· tõng lËp tr×nh víi th­ viÖn ®éng DLL ch¾c h¼n ®Òu biÕt ®Õn thuËt ng÷ ‘DLL Hell’. DLL Hell cã thÓ miªu t¶ nh­ sau : b¹n ®ang sö dông mét ch­¬ng tr×nh øng dông víi mét DLL phiªn b¶n 1.0, sau ®ã b¹n cµi thªm mét øng dông kh¸c còng sö dông mét DLL gièng nh­ vËy víi phiªn b¶n 1.1. Khi ®ã øng dông c÷ lËp tøc sÏ cã vÊn ®Ò, cã thÓ kh«ng ch¹y. Khi b¹n thay thÕ DLL ®ã víi DLL phï hîp víi øng dông cò th× øng dông míi l¹i kh«ng ch¹y. Trong .NET, c¸c thµnh phÇn cña ®èi t­îng lu«n ®­îc ph©n t¸ch riªng rÏ, mét øng dông chØ load nh÷ng thµnh phÇn ®· ®­îc x©y dùng, kiÓm tra ch¹y thö víi øng dông ®ã. Sau khi mét øng dông ®· cµi ®Æt vµ ch¹y thö thµnh c«ng th× nã lu«n ch¹y. .NET thùc hiÖn vÊn ®Ò nµy b»ng c¸ch sö dông thªm thµnh phÇn lµ assemblies. Nh÷ng thµnh phÇn ®­îc ®ãng gãi l¹i trong mét assembly. Assembly cã chøa th«ng tin vÒ phiªn b¶n, vµ CLR trong .NET sÏ sö dông th«ng tin nµy ®Ó n¹p ®óng nh÷ng thµnh phÇn phôc vô cho øng dông I.4. Nh÷ng thµnh phÇn cña nÒn .NET Nh­ chóng ta ®· xem ë phÇn tr­íc, cã nhiÒu thµnh phÇn trong nÒn .NET. Trong phÇn nµy chóng ta sÏ tr×nh bµy c¸c thµnh phÇn næi bËt vÒ tÝnh chÊt vµ vai trß cña chóng trong c¶ hÖ thèng. I.4.1. CLR CLR cã thÓ ®­îc coi nh­ tr¸i tim cña nÒn .NET. CLR n»m ë cÊp cuèi cïng trong s¬ ®å ph©n cÊp cña nÒn .NET, trùc tiÕp giao tiÕp víi hÖ ®iÒu hµnh hay c¸c thiÕt bÞ phÇn cøng. Vai trß cña nã lµ nhËn m· IL, dÞch chuyÓn sang m· m¸y thÝch hîp. Tõ IL trë xuèng CLR gièng nhau cho mäi ng«n ng÷ thuéc dßng .NET, ®iÒu nµy gi¶i quyÕt ®­îc vÊn ®Ò ®a ng«n ng÷ trong mét øng dông Memory Management Including Garbage Collection Execution Support CIL Compiler Common Type system Security C I L Class Loader M A C H I N E C O D E H×nh 2 CÊu tróc CLR I.4.2. M· qu¶n lÝ vµ m· kh«ng qu¶n lÝ ( Managed/Unmanaged Code ) Nh÷ng m· ®­îc so¹n th¶o, dÞch nh»m môc ®Ých ®­îc ch¹y trong m«i tr­êng CLR th× ®­îc gäi lµ m· m· qu¶n lÝ ( managed code ). Cã thÓ hiÓu ®¬n gi¶n h¬n, m· qu¶n lÝ lµ lo¹i m· mµ ch­¬ng tr×nh thùc thi m· ®ã ®­îc qu¶n lÝ bëi CLR vµ nã ®­îc thõa h­ëng mäi dÞch vô mµ CLR cã. Th«ng th­êng, m· qu¶n lÝ lµ nh÷ng m· ®­îc tÝch hîp s½n ë trong c¸c th­ viÖn líp hay nh÷ng m· ®­îc dÞch bëi mét ch­¬ng tr×nh dÞch tu©n theo chuÈn CLS t¹o ra ng«n ng÷ trung gian. M· kh«ng qu¶n lÝ (unmanaged code) lµ nh÷ng m· kh«ng ®­îc so¹n th¶o, dÞch trong m«i tr­êng .NET vµ kh«ng nh»m môc ®Ých ch¹y trong CLR tuy nhiªn CLR vÉn n¹p nh÷ng m· nµy vµo ch¹y, nã chØ kh«ng hç trî c¸c dÞch vô cho lo¹i m· nµy. §iÓn h×nh cho lo¹i m· nµy lµ c¸c th­ viÖn DLL cã tõ tr­íc .NET vµ th­ viÖn Windows APIs, nh÷ng ch­¬ng tr×nh .NET sö dông Windows APIs cã nghÜa lµ nã ®· sö dông m· kh«ng qu¶n lý. I.4.3. Ng«n ng÷ trung gian , hÖ thèng kiÓu th«ng th­êng vµ CLS Ng«n ng÷ trung gian MSIL trong .NET, hÖ thèng kiÓu th«ng th­êng vµ CLS lµ 3 yÕu tè g¾n liÒn víi nhau t¹o nªn kh¶ n¨ng phèi hîp ®a ng«n ng÷ vµ ®éc lËp víi m«i tr­êng cña c¸c øng dông .NET. HÖ thèng kiÓu th«ng th­êng ( common type system ) bao gåm c¸c kiÓu d÷ liÖu mµ c¸c ng«n ng÷ .NET cã thÓ sö dông còng nh­ qui c¸ch ng­êi dïng ph¶i tu©n theo ®Ó x©y dùng nªn nh÷ng kiÓu d÷ liÖu cña ng­êi dïng. C¸c kiÓu d÷ liÖu trong hÖ thèng kiÓu th«ng th­êng ®­îc chia thµnh 2 lo¹i : Lo¹i tham trÞ: nh÷ng kiÓu tham trÞ trùc tiÕp l­u tr÷ c¸c d÷ liÖu, ®­îc cÊp ph¸t ë vïng nhí stack. Nh÷ng d÷ liÖu kiÓu nµy th­êng lµ kiÓu d÷ liÖu x©y dùng s½n nh­ Int, long, boolean,.. hay kiÓu struct do ng­êi dïng ®Þnh nghÜa. Lo¹i tham biÕn: kiÓu tham biÕn l­a gi÷ ®Þa chØ chØ tíi mét vïng d÷ liÖu, chóng ®­îc cÊp ph¸t ë vïng nhí Heap. Nh÷ng d÷ liÖu kiÓu nµy th­êng lµ c¸c biÕn ®èi t­îng. CLS ( common language specification) lµ mét tËp hîp c¸c ®Æc ®iÓm ng«n ng÷ mµ tÊt c¶ c¸c ng«n ng÷ lËp tr×nh trªn .NET ph¶i tu©n theo, nã còng bao gåm c¸c kiÓu d÷ liÖu vµ c¸c qui c¸ch trong hÖ thèng kiÓu th«ng th­êng. Nh÷ng ng­êi muèn ph¸t triÓn mét ng«n ng÷ trªn .NET th× còng ph¶i dùa theo CLS ®Ó x©y dùng ch­¬ng tr×nh dÞch gäi lµ ch­¬ng tr×nh dÞch CLS . Ng«n ng÷ trung gian IL ®­îc dÞch ra tõ m· nguån cña mét ng«n ng÷ lËp tr×nh cÊp cao b»ng mét ch­¬ng tr×nh dÞch CLS, ng«n ng÷ trung gian IL sau ®ã ®­îc CLR dÞch l¹i mét lÇn n÷a ra m· m¸y ®Ó thùc thi. I.4.4. Th­ viÖn líp c¬ së cña .NET .NET cã mét th­ viÖn ®è sé nh÷ng kiÓu d÷ liÖu cã thÓ sö dông l¹i, ®­îc tÝch hîp chÆt chÏ víi CLR. Th­ viÖn líp nµy hoµn toµn h­íng ®èi t­îng, cung cÊp nh÷ng kiÓu d÷ liÖu mµ chóng ta cã thÓ sö dông rÊt nhiÒu chøc n¨ng tõ ®ã. Nhê sö dông th­ viÖn líp c¬ së chóng ta cã thÓ ph¸t triÓn c¸c kiÓu øng dông sau: øng dông vµo ra Console Nh÷ng øng dông Windows víi giao diÖn ®å ho¹ Nh÷ng øng dông ASP.NET DÞch vô Web C¸c th­ viÖn Khi muèn lËp tr×nh trªn Windows chóng ta cã thÓ sö dung c¸c líp Form, Button, CheckBox, Text… ®Ó ph¸t triÓn c¸c giao diÖn ®å ho¹. Khi muèn ph¸t triÓn mét øng dông Web, chóng ta cã thÓ sö dông c¸c líp Web Forms. TÊt c¶ c¸c ng«n ng÷ cña .NET ®Òu sö dông th­ viÖn nµy, ®iÒu nµy lµm cho viÖc sö dông ®a ng«n ng÷ còng dÔ dµng h¬n. I.4.5. Assembly vµ metadata NÕu chóng ta muèn tr×nh bµy kÜ vÒ assembly vµ metadata th× cÇn ph¶i cã mét ®Ò tµi chuyªn vÒ m¶ng nµy, trong giíi h¹n ®Ò tµi nµy, chóng em chØ xin tr×nh bµy mang tÝnh kh¸i niÖm vÒ hai vÊn ®Ò trªn. Assembly cã thÓ hiÓu nh­ lµ mét gãi c¶ m· ch­¬ng tr×nh, c¸c thµnh phÇn, c¸c tµi nguyªn. Mét assembly bao gåm th«ng tin metadata, m· ch­¬ng tr×nh ë d¹ng IL, c¸c file tµi nguyªn vÝ dô nh­ c¸c file ¶nh, ©m nh¹c, c¸c th­ viÖn thµnh phÇn. Metadata lµ tËp hîp d÷ liÖu ë d¹ng nhÞ ph©n diÔn t¶ c¸c thµnh phÇn cña ch­¬ng tr×nh. Metadata ®­îc l­u tr÷ ë file cã thÓ thùc thi ( executable hay .exe , .dll) cïng víi m· IL cña ch­¬ng tr×nh. Metadata chøa nh÷ng lo¹i d÷ liÖu cô thÓ sau: Tªn assembly Sè hiÖu phiªn b¶n  Culture : th«ng tin vÒ lo¹i ng«n ng÷ mµ assembly hç trî Th«ng tin vÒ strong name Danh s¸ch tÊt c¶ c¸c file ®­îc ®ãng gãi Th«ng tin vÒ tham chiÕu kiÓu d÷ liÖu: CLR sö dông th«ng tin nµy ®Ó t×m ra nh÷ng file ®Þnh nghÜ kiÓu d÷ liÖu ®ã. Th«ng tin phôc vô cho tham chiÕu ®Õn c¸c assembly kh¸c CLR hoµn toµn dùa nh÷ng th«ng tin nµy ®Ó ®iÒu khiÓn øng dông. Assembly vµ metadata ®­îc t¹o ra ngay khi ta biªn dÞch m· nguån I.4.6. Ch­¬ng tr×nh dÞch Just in time Ch­¬ng tr×nh dÞch Just In Time lµ n»m trong CLR, cã nhiÖm vô chuyÓn m· IL sang m· m¸y thÝch hîp. Trong .NET cã 3 lo¹i ch­¬ng tr×nh dÞch JIT: Pre-JIT: lo¹i JIT nµy dÞch ngay toµn bé m· IL sang m· m¸y khi nã ®­îc gäi tíi. Econo-JIT: lo¹i nµy sö dông cho c¸c hÖ thèng h¹n chÕ bé nhí, nã dÞch m· IL sang m· m¸y tõng bit mét, nh÷ng m· m¸y sau khi ®­îc dÞch vµ ®­a vµo thùc thi nã cßn ®­îc ®Ó ë vïng nhí ®Öm, nÕu hÕt vïng nhí ®Öm JIT sÏ xo¸ c¸c m· m¸y nµy. Normal JIT: ®©y lµ lo¹i ngÇm ®Þnh, dÞch m· IL chØ khi nã ®­îc gäi tíi, m· m¸y sau khi dÞch sÏ ®­îc ®­a vµo thùc thi ®ßng thêi ®­îc ®Æt vµo trong bé nhí ®Öm. I.4.7. Qu¶n lÝ bé nhí ( Garbage Collection ) Nh÷ng ng­êi lËp tr×nh th­êng gÆp nhiÒu khã kh¨n khi gi¶i quyÕt vÊn ®Ò cÊp ph¸t bé nhí, rß rØ bé nhí, c«ng viÖc nµy lµm gi¶m n¨ng suÊt lËp tr×nh. §Ó gi¶i quyÕt vÊn ®Ò nµy, .NET ®­a ra hÖ thèng thu gom bé nhí GC. Khi ch­¬ng tr×nh ®ßi cÊp ph¸t thªm bé nhí, bé phËn cÊp ph¸t bé nhí trong phÇn qu¶n lÝ bé nhí trong CLR sÏ th­c hiÖn, nÕu kh«ng cßn ®ñ bé nhí nã sÏ th«ng b¸o lµ kh«ng cßn bé nhí ®Ó cÊp ph¸t. GC b¾t ch¹y, nã gi¶ ®Þnh r»ng tÊt c¶ mäi thø trong bé nhí ®Òu cã thÓ thu håi. Sau ®ã, nã xem toµn bé bé nhí dµnh cho ch­¬ng tr×nh øng dông, x©y dùng nªn mét ®å thÞ diÔn t¶ tÊt c¶ c¸c vïng bé nhí ®­îc tham chiÕu bëi ch­¬ng tr×nh vµ tham chiÕu lÉn nhau. Sau x©y dùng xong ®å thÞ, GC tiÕn hµnh thu gän bé nhí Heap b»ng c¸ch di chuyÓn tÊt c¶ c¸c vïng nhí thËt sù dïng vÒ vÞ trÝ míi b¾t ®Çu t¹i mét vïng nhí Heap cßn trèng. Cuèi cïng nã cËp nhËt l¹i c¸c con trá trá ®Õn c¸c vïng bé nhí võa ®­îc di chuyÓn. Chóng ta cã thÓ thÊy d­êng nh­ GC thùc hiÖn rÊt nhiÒu viÖc, tuy nhiªn nã ®­îc thùc thùc hiÖn tù ®éng b»ng CLR, gi¶m nhÑ ®i rÊt nhiÒu c«ng viÖc cña ng­êi lËp tr×nh. I.4.8. Vßng ®êi cña m· Trong phÇn nµy, chóng em sÏ giíi thiÖu vÒ tr×nh lµm viÖc cña mét øng dông .NET tõ khi so¹n th¶o m· nguån ®Õn khi ch¹y ch­¬ng tr×nh : B¾t ®Çu tõ viÖc so¹n th¶o m· nguån trªn mét ng«n ng÷ .NET quen thuéc trªn mét hÖ so¹n th¶o v¨n b¶n th«ng th­êng. Dïng mét ch­¬ng tr×nh dÞch .NET dÞch m· nguån ra m· IL, ®ång thêi x©y dùng assembly cho øng dông. Khi ch­¬ng tr×nh øng dông thùc thi, hÖ ®iÒu hµnh sÏ ®äc header cña ch­¬ng tr×nh vµ ®­a CLR vµo qu¶n lÝ ch­¬ng tr×nh, CLR ®äc c¸c th«ng tin metadata, ®iÒu khiÓn Loader n¹p c¸c th­ viÖn cÇn thiÕt vµo bé nhí. Hµm _CorExeMain ®­îc chÌn vµo ®iÓm nhËp cña ch­¬ng tr×nh. Bé phËn Loader nh¶y vµo ®iÓm nhËp ch­¬ng tr×nh vµ gäi hµm _CorExeMain thùc thi. Khi _CorExeMain thùc thi, nã gäi ch­¬ng tr×nh dÞch JIT ra thùc thi. JIT dÞch m· IL sang m· m¸y vµ ®­a vµo thùc thi ®ång thêi ®­îc dù tr÷ ë bé nhí ®Öm ®Ó khi cÇn kh«ng ph¶i dÞch l¹i. II. Giíi thiÖu s¬ bé ng«n ng÷ lËp tr×nh C# Cã thÓ coi ng«n ng÷ lËp tr×nh C# lµ ng«n ng÷ lËp tr×nh ®¬n gi¶n v× nã chØ cã kho¶ng 80 tõ kho¸ vµ kho¶ng 12 kiÓu d÷ liÖu x©y dùng s½n ( built-in) tuy nhiªn nã hç trî tÊt c¶ c¸c m« h×nh lËp tr×nh : lËp tr×nh cÊu tróc, lËp tr×nh h­íng ®èi t­îng vµ lËp tr×nh h­íng thµnh phÇn ( COM ). II.1. LËp tr×nh h­íng ®èi t­îng trong C# C# lµ ng«n ng÷ hoµn toµn h­íng ®èi t­îng. TÝnh chÊt h­íng ®èi t­îng cã thÓ tr×nh bµy tãm t¾t nh­ sau: “TÊt c¶ ®Òu lµ ®èi t­îng”. Trong C#, mäi thùc thÓ ®Òu ®­îc biÓu diÔn lµ ®èi t­îng, ®i cïng víi nã lµ c¸c thuéc tÝnh, hµnh vi ( method ) cña thùc thÓ ®ã. Nh­ vËy, mét thuéc tÝnh hay mét method ch¾c ch¾n ph¶i thuéc vÒ mét ®èi t­îng nµo ®ã. Mét ch­¬ng tr×nh øng dông bao gåm nhiÒu ®èi t­îng. Khi chóng muèn mét ®èi t­îng thùc hiÖn mét c«ng viÖc hay ®èi t­îng nµy muèn ®èi t­îng kia thùc hiÖn mét c«ng viÖc, chóng ta hay c¸c ®èi t­îng giao tiÕp víi nhau b»ng c¸ch göi th«ng ®iÖp. Th«ng ®iÖp cã thÓ hiÓu nh­ mét lêi gäi hµm gäi mét method cña ®èi t­îng nµo ®ã lµm viÖc. Mçi ®èi t­îng cã mét vïng nhí riªng. Mçi ®èi t­îng cã mét kiÓu d÷ liÖu riªng, kiÓu d÷ liÖu ®­îc ®Þnh nghÜa bëi mét class ( líp ). Mçi ®èi t­îng cã mét giao diÖn ®Ó giao tiÕp víi c¸c ®èi t­îng kh¸c vµ mét phÇn d÷ liÖu ®­îc che giÊu ®èi víi c¸c ®èi t­îng kh¸c. Ngoµi ra, C# cóng cho phÐp ng­êi lËp tr×nh thùc hiÖn c¸c ho¹t ®éng sö dông l¹i d÷ liÖu nh­ kÕ thõa, ®a h×nh th¸i vµ kÕt tËp. II.2. Nh÷ng ®Æc ®iÓm cña ng«n ng÷ C# C# ®­îc x©y dùng tõ nh÷ng ng«n ng÷ tiÒn ®Æc biÖt lµ C vµ C++ cho nªn nh÷ng ®Æc ®iÓm ng«n ng÷ cña C# rÊt gièng víi ng«n ng÷ C, C++. Trong phÇn nµy, chóng em sÏ tr×nh bµy mét vµi ®Æc ®iÓm cña C#. II.2.1. C¸c to¸n tö Trong C# cã c¸c to¸n tö th«ng th­êng sau: C¸c to¸n tö mét to¸n h¹ng: ++,- -, !,~ C¸c to¸n tö hai to¸n h¹ng: *, /, %, +, - C¸c to¸n tö g¸n: =, *=, /=, %=, +=, -=, >=, &=, ^=, != C¸c to¸n tö quan hÖ: , =, is, as, ==, != C¸c to¸n tö l«- gÝc: &, ^, !, &, |, > C¸c to¸n tö ®iÒu kiÖn: &&, ||, ?: To¸n tö sizeof x¸c ®Þnh kÝch th­íc mét kiÓu d÷ liÖu. Trong C# còng cho phÐp chång to¸n tö vµ ®Þnh nghÜa c¸c to¸n tö míi theo c¸c qui t¾c sau: To¸n tö mét to¸n h¹ng: type_of_x operation op(x) To¸n tö hai to¸n h¹ng: type_of_x,y operation op(x,y) Trong C# kh«ng cho phÐp ®Þnh nghÜa l¹i to¸n tö g¸n. II.2.2. C¸c kiÓu d÷ liÖu: C# hç trî hai lo¹i kiÓu d÷ liÖu lµ kiÓu tham trÞ vµ kiÓu tham biÕn. KiÓu tham trÞ bao gåm c¸c kiÓu ®¬n gi¶n nh­ char, int, float. KiÓu tham biÕn gåm c¸c kiÓu líp, kiÓu Interface, kiÓu m¶ng hay nãi c¸ch kh¸c tÊt c¶ c¸c ®èi t­îng ®Òu lµ tham biÔn. KiÓu tham trÞ kh¸c kiÓu tham biÕn ë chç: nh÷ng biÕn tham trÞ l­a tr÷ trùc tiÕp d÷ liÖu cña nã, tr¸i l¹i biÕn tham biÕn l­a tr÷ con trá trá tíi ®èi t­îng. C# cung cÊp mét tËp c¸c kiÓu ®­îc ®Þnh nghÜa tr­íc hÇu hÕt ®· cã trong C vµ C++. Ngoµi ra , C# l¹i ®­a thªm vµo kiÓu boolean, string gièng nh­ trong Pascal. C# cho phÐp chuyÓn kiÓu gièng nh­ C nµ C++. II.2.3. C¸c c©u lÖnh C# kÕ thõa hÇu hÕt c¸c c©u lÖnh tõ C vµ C++, tuy nhiªn còng cã mét vµi bæ xung vµ thay ®æi ®¸nh chó ý. Chóng ta sÏ ®iÓm qua c¸c c©u lÖnh sau: C¸c lÖnh ®­îc g¸n nh·n vµ lÖnh goto: c¸c lÖnh ®­îc g¾n nh½n cã mét nh·n ®øng ®»ng tr­íc. C¸c lÖnh goto sÏ nh¶y ®Õn c¸c nh·n nµy vµ thùc thi c©u lÖnh ®­îc g¸n nh·n LÑnh if: lÖnh if sÏ chän mét biÓu thøc ®Ó lµm viÖc dùa trªn gi¸ trÞ mét biÓu thøc l«- gic . Mét lÖnh if cã thÓ cã thªm lÖnh else ®Ó thùc thi c©u lÖnh kh¸c khi gi¸ trÞ biÓu thøc lµ sai. LÖnh swich: lÖnh switch thùc thi mét nh÷ng lÖnh phô thuéc vµo gi¸ trÞ mét biÓu thøc cho tr­íc. C¸c lÖnh lÆp: c¸c lÖnh lÆp trong C# bao gåm c¸c lÖnh lÆp while, do – while, for nh­ trong C LÖnh lÆp foreach ( gièng nh­ trong VB): mét lÖnh lÆp foreach liÖt kª c¸c thµnh phÇn trong mét tËp hîp, thùc thi mét c©u lÖnh cho mçi thµnh phÇn cña tËp hîp ®ã. C¸c lÖnh throw, try, catch: c¸c lÖnh phôc vô cho qu¸ tr×nh qu¶n lÝ lçi trong thêi gian ch¹y ( runtime – error ) gåm cã ph¸t ra mét lçi ( throw ), cÆp lÖnh try – catch ®ãn nhËn mét lçi vµ ®­a ra hµnh ®éng xö lÝ lçi. II.2.4. CÊu t¹o cña mét ch­¬ng tr×nh C# NÕu nh­ trong C, ®¬n vÞ ch­¬ng tr×nh lín nhÊt lµ c¸c hµm ( modul), trong Java vµ C++, ®¬n vÞ ch­¬ng tr×nh lín nhÊt lµ c¸c líp ( class) th× trong C#, ®¬n vÞ ch­¬ng tr×nh lín nhÊt lµ kh«ng gian tªn (namespace). Mét ch­¬ng tr×nh C# chøa mét hay nhiÒu kh«ng gian tªn, trong ®ã mét kh«ng gian tªn chøa d÷ liÖu cña ch­¬ng tr×nh, c¸c kh«ng gian tªn cßn l¹i lµ c¸c kh«ng gian tªn chøa phÇn d÷ liÖu ë c¸c ch­¬ng tr×nh kh¸c ®­îc khai b¸o víi tõ kho¸ using sö dông nh­ lµ phÇn th­ viÖn, vÝ dô : Namespace 1: namespace Microsoft.CSharp.Introduction { public class HelloMessage { public string GetMessage() { return "Hello, world"; } } } Namespace 2: using Microsoft.CSharp.Introduction; class Hello { static void Main() { HelloMessage m = new HelloMessage(); System.Console.WriteLine(m.GetMessage()); } } Trong mét namespace cã thÓ lång mét hay nhiÒu namespace kh¸c, vÝ dô: namespace Microsoft { namespace CSharp { namespace Introduction {....} } } D­íi namespace lµ c¸c ®¬n vÞ ch­¬ng tr×nh cã thÓ coi lµ cïng cÊp : líp (class), cÊu tróc (struct), giao diÖn (Interface). Líp: líp ®­îc dïng ®Ó ®Þnh nghÜa nh÷ng kiÓu ®èi t­îng míi. Trong mét líp cã thÓ cã c¸c h»ng sè, c¸c tr­êng, ph­¬ng thøc, thuéc tÝnh, sù kiÖn, to¸n tö, hµm dùng, hµm huû. §èi víi mçi thµnh phÇn cña líp th× cã c¸c thuéc tÝnh truy cËp sau: public: tÊt c¶ c¸c ®èi t­îng kh¸c ®Òu cã thÓ truy cËp ®Õn c¸c thµnh p

Các file đính kèm theo tài liệu này:

  • doc27033.DOC