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
81 trang |
Chia sẻ: luyenbuizn | Lượt xem: 1460 | Lượt tải: 0
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 cha 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ã cha 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 trng cña nÒn .NET
Nh÷ng ®Æc trng 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 trng 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 cha 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 lu 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 la 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 lu 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Ï thc 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Þ la tr÷ trùc tiÕp d÷ liÖu cña nã, tr¸i l¹i biÕn tham biÕn la 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:
- 27033.DOC