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
MụC lục Giới thiệu đề tài .6 Phần I: Giới thiệu sơ bộ về nền .NET và ngôn ngữ C# 8 I. Giới thiệu sơ bộ về .NET 8 I.1. Giới thiệu chung về nền .NET (.NET platform) .8 I.2. Kiến trúc phân lớp nền .NET .8 I.3. Những đặc trng của nền .NET 9 I.3.1. Phát triển đa ngôn ngữ 9 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í 10 I.3.3. Quản lí bộ nhớ tự động 10 I.3.4. Hỗ trợ phiên bản 10 I.4. Những thành phần của nền .NET .10 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 .11 I.4.1. CLR .11 I.4.2. Mã quản lí và mã không quản lí ( Managed/Unmanaged Code ) .11 I.4.3. Ngôn ngữ trung gian , hệ thống kiểu thông thờng và CLS 12 I.4.4. Th viện lớp cơ sở của .NET .12 I.4.5. Assembly và metadata .12 I.4.6. Chơng trình dịch Just in time .13 I.4.7. Quản lí bộ nhớ ( Garbage Collection ) 13 I.4.8. Vòng đời của mã 14 II. Giới thiệu sơ bộ ngôn ngữ lập trình C# .14 II.1. Lập trình hớng đối tợng trong C# .14 II.2. Những đặc điểm của ngôn ngữ C# .15 II.2.1. Các toán tử 15 II.2.2. Các kiểu dữ liệu: .15 II.2.3. Các câu lệnh .16 II.2.4. Cấu tạo của một chơng trình C# .16 II.3. C# và những vấn đề nâng cao .18 II.3.1. C# với cơ sở dữ liệu 18 II.3.2. C# với Internet 18 Phần II: Đồ họa trong C# 19 I. Giới thiệu về GDI+ .19 II. Kiến trúc của GDI+ .19 II.1. Đồ họa Vector 2D 20 II.2. Hình ảnh .20 II.3. In ấn v hiển thị font chữ .20 III. Kiến trúc lớp của GDI+ .20 IV. Một số điểm mới trong GDI+ 21 1 IV.1. Bút vẽ Gradient .21 IV.2. Đờng cong Spline 22 IV.3. Đối tợng đồ họa độc lập 22 IV.4. Chức năng chuyển đổi v đối t ợng ma trận .22 IV.5. Vùng ảnh co giãn đợc .23 IV.6. Đổ bóng Alpha 23 V. Thay đổi trong mô hình lập trình 23 V.1. Ngữ cảnh thiết bị, Handles v các đối t ợng đồ họa .23 V.2. Bút vẽ, bút phủ, đồ họa, hình ảnh v Font chữ 24 VI. Giới thiệu các đối tợng đồ họa cơ bản trong GDI+ .24 VI.1. Đồ họa Vector .24 VI.2. Hình ảnh v Metafile .25 VI.3. Các loại hệ tọa độ 26 VI.4. Các phép chuyển đổi 27 Phần III: Đa luồng trong C# 28 I. Khái niệm đa luồng 28 I.1. Đa nhiệm ( multitasking ) 28 I.2. Đa luồng ( multitasking) 28 II. Đa luồng trong C# .29 II.1. Cấu trúc các lớp điều khiển luồng của C# 30 II.2. Tổng quát các phơng thức của lớp Thread 31 II.2.1. Tạo luồng ( create thread ) .32 II.2.2. Nhập luồng ( join thread ) 33 II.2.3. Dừng một luồng 34 II.2.4. Hủy một luồng 34 II.3. Vòng đời của một luồng 34 II.4. Sự u tiên của luồng và định thời gian biểu cho luồng 35 II.5. Đồng bộ hóa các luồng: .37 II.5.1. Lớp Interlocked: .37 II.5.2. Sử dụng lệnh C# lock: 37 II.5.3. Monitor: 38 Phần IV: XML và C# 42 I. Lịch sử các ngôn ngữ đánh dấu .42 I.1. Khái niệm đánh dấu (markup) .42 I.2. Ngôn ngữ đánh dấu 44 II. Tổng quan về ngôn ngữ XML .45 II.1. Ngôn ngữ XML là gì? 45 II.2. Các u điểm của XML .46 II.3. Các ứng dụng XML 46 II.3.1. Mathematical Markup Language (MathML) .46 II.3.2. Resource Description Framework(RDF) 46 II.3.3. XML Linking Language(XLink) .47 II.3.4. Synchronized Multimedia Intergration Language(SMIL) .47 II.3.5. Extensible Stylesheet Language(XSL) .47 II.4. Tơng lai XML .47 2 III. Cấu trúc và cú pháp XML 48 III.1. Cấu trúc XML .48 III.1.1. Cấu trúc logic 48 III.1.2. Cấu trúc vật lí .49 III.2. Cú pháp XML .50 III.2.1. Các thẻ gán và phần tử 50 III.2.2. Các thuộc tính và chú giải .51 IV. XML trong C# .52 IV.1. Tạo một tài liệu XML .52 IV.2. Duyệt tài liệu XML .54 IV.3. Quá trình Serializing .56 IV.4. Quá trình Deserializing .59 Phần V: Lập trình mạng trong C# .60 I. Giới thiệu về lập trình mạng .60 I.1. Nhận dạng máy 60 I.2. Socket .61 I.3. Server phục vụ nhiều clients 64 II. Giao tiếp với Web 66 II.1. Gửi và nhận các yêu cầu HTTP 66 II.2. Các yêu cầu Web không đồng bộ 68 II.3. Dịch vụ Web .68 Phần VI: Một vài so sánh C# với các ngôn ngữ khác .70 I. Sự khác nhau giữa C# và C/C++ .70 I.1. Về môi trờng 70 I.2. Về các lệnh 70 I.3. Về tổ chức chơng trình 71 II. Sự khác biệt giữa C# và Java .71 II.1. Về kiểu dữ liệu .71 II.2. Về truy cập thành phần 72 II.3. Các tham số ref và out .72 II.4. Giao diện (Interfaces) 73 II.5. Về 2 từ khoá khai báo import và using 73 III. Sự khác biệt giữa C# và VB 6.0 73 Kết luận .75 Tài liệu tham khảo 76 Phụ lục .77 I. Mô tả chơng trình minh họa .77 II. Hớng dẫn sử dụng chơng trình 78 III. Hớng dẫn cài đặt chơng trình .78 3 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 4 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 5 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 BasicJava 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# 6 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 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. 7 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: o 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. o Giảm thiểu tối đa xung đột giữa các version của một phần mềm o Đ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 : o Nền .NET: một nền cho phép phát triển các ứng dụng o 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. o 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 8 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, 9 ở đâ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 10 . .NET và ngôn ngữ C# 6 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 Trong đề. từ khoá khai báo import và using..............................................................73 III. Sự khác biệt giữa C# và VB 6.0..........................................................................73