Tìm hiểu microsoft visual basic net và ứng dụng
Trang 1KHOA CÔNG NGHỆ THÔNG TIN
!
ĐỒ ÁN TỐT NGHIỆP KHOA CÔNG NGHỆ THÔNG TIN
CHUYÊN NGÀNH : CÔNG NGHỆ PHẦN MỀM
Tp HCM – 7/2002
Trang 2SVTH:Võ Hoàng Anh MSSV:9800503
Lời Cảm Ơn
" ! #
Chúng em xin chân thành cảm ơn thầy Nguyễn Tấn Trần Minh
Khang, người đã hướng dẫn chúng em rất nhiệt tình trong quá trình thực
hiện đề tài
Xin cảm ơn tất cả các thầy cô khoa CNTT, anh chị sinh viên đi
trước, các bạn sinh viên cùng khóa đã tận tình giúp đỡ, giới thiệu tài
liệu, sách vở cho chúng em trong 4 năm học qua
Mặc dù đã cố gắng và nỗ lực trong việc tìm hiểu, nghiên cứu và
thực hiện đề tài, nhưng do thời gian có phần hạn chế, nội dung đề tài
khá mới nên việc thực hiện Đồ Aùn sẽ không tránh khỏi thiếu sót Rất
mong nhận được sự đóng góp ý kiến của tất cả thầy cô, anh chị và các
bạn để tạo điều kiện cho việc thực hiện Đồ Án Tốt Nghiệp ngày càng
hoàn chỉnh hơn Xin chân thành cảm ơn !
Nhóm sinh viên thực hiện đề tài
Trang 3SVTH:Võ Hoàng Anh MSSV:9800503
Lời Giới Thiệu
$%&
Trong vài thập niên trở lại đây, công nghệ thông tin phát triển một cách mạnh mẽ Máy tính đã trở nên phổ biến, nó trở thành một công cụ trợ giúp đắc lực cho con người Hầu hết, mọi công việc văn phòng đều đã sử dụng máy tính, phần mềm máy tính Song song bên cạnh đó, các ngôn ngữ lập trình để tạo ra các phần mềm cũng ngày càng phát triển phong phú : ngôn ngữ lập trình hướng cấu trúc, ngôn ngữ lập trình hướng đối tượng , đặc biệt là lập trình Web, công nghệ Internet…
Visual Basic.NET là một trong số các công cụ để viết chương trình phần mềm Ngay từ lúc sơ khai, ngôn ngữ lập trình Visual Basic(tiền Visual Basic.NET ) đã được Microsoft xây dựng dựa trên cơ sở của một ngôn ngữ lập trình đa chức năng dễ sử dụng và được rất nhiều lập trình viên chọn làm ngôn ngữ chính cho mình…và nay Visual Basic.NET lại được Microsoft tung ra với nhiều tính năng mới nhằm đáp ứng những phần mà Visual Basic 6.0 chưa hổ trợ được hay chưa thoả mãn những người lập trình trên thế giới Vì vậy với những cái mới của Visual Basic.NET (ví dụ như: hướng đối tượng, lập trình Web, đồ hoạ,… ) sẽ dẫn những nhà lập trình đến với những hứa hẹn mới
-oOo -
Trang 4SVTH:Võ Hoàng Anh MSSV:9800503
MỤC LỤC
Phần 1 7
TÌM HIỂU VISUAL STUDIO.NET 7
Chương 1 8
GIỚI THIỆU VISUAL STUDIO.NET 8
1.1 Các khối kiến tạo của NET(CLR,CTS và CLS) 8
1.2 Các thư viện cơ sỡ NET (Base class library) 9
1.3 Nhị phân.NET (NET assembly) 9
1.4 Vùng dữ liệu Mêta (MetaData) 9
1.5 Quá trình thự hiện luồng công việc của NET 10
1.6 Các không gian tên (Namespace) của NET 10
1.7 Visual Studio.NET 12
Chương 2 18
NGÔN NGỮ VISUAL BASIC.NET 18
2.1 Giới thiệu : 18
2.2 Namespaces 18
2.3 Kiểu dữ liệu 23
2.3.1 Hằng (Constants) 24
2.3.2Các Toán Tử và Phép Toán 24
2.3.3Cấu trúc 26
2.3.4Lệnh rẽ nhánh .26
2.3.4.1 Lệnh IF…THEN… ELSE 26
2.3.4.2 Lệnh Switch Case 27
2.3.5Lệnh Lặp 28
2.3.5.1 Lệnh While Loops 28
2.3.5.2 Lệnh For Loops 29
2.3.6Mảng 30
2.3.7Hàm 32
Chương 3 36
HƯỚNG ĐỐI TƯỢNG MỚI TRONG VB.NET(OOP) 36
3.1 Vấn đề khái quát của hướng đối tượng 36
3.1.1.Classes và Objects, nguyên tắc Abstraction 36
3.2 Fields, Properties, Methods và Events, nguyên tắc Encapsulation 37
3.2.1 Inheritance (Thừa Kế) 39
3.2.2 Polymorphism (Đa dạng) 41
3.3 Dùng hướng đối tượng trong VB.NET 42
3.3.1.Tạo một Class mới 42
3.3.1.1 Class Keyword 43
Trang 5SVTH:Võ Hoàng Anh MSSV:9800503
3.3.1.2 Classes và Namespaces 43
3.3.1.3 Tạo ra Methods 44
3.3.1.4 Tạo ra Properties 45
3.3.1.5 ReadOnly và WriteOnly property 45
3.3.1.6 Default Properties 45
3.3.2.Overloading methods(phương thức quá tải) 47
3.3.3.Object Lifecycle (cuộc đời của đối tượng) 47
3.3.3.1 New method(tạo phương thức mới) 47
3.3.3.2 Termination(sự hoàn thành, kết thúc) 49
3.3.3.3 Dùng Dispose Method 50
3.3.4.Thừa kế 51
3.3.5.Ngăn cản Thừa kế 54
3.3.6.Thừa kế và Phạm vi hoạt động 54
3.3.7.Protected Methods 56
3.3.8.Overriding Methods 56
3.3.8.1 Virtual Methods 57
3.3.8.2 Keyword Me 58
3.3.8.3 Keyword MyBase 59
3.3.8.4 Keyword MyClass 60
3.3.9.Overridding Method New 62
3.3.10.Tạo BaseClasses và Abstract Methods 62
3.3.10.1 Keyword MustInherit (Phải được Thừa Kế) 62
3.3.10.2 Keyword MustOverride (Phải bị Lấn Quyền) 63
3.3.10.3 Abstract Base Classes 63
3.3.11.Shared class members ( Các thành viên để dùng chung của class) 64
3.3.11.1 Shared Methods 64
3.3.11.2 Shared Variables 65
3.3.11.3 Global values 66
3.3.12.Events (Sự kiện) 67
3.3.12.1 Raising Event để xử lý trong một Project khác 67
3.3.12.2 Shared Events 70
3.3.13.Early Binding hay Late Binding (Hiệu lực Sớm hay Trể) 71
3.3.13.1 Dùng Object Type 72
3.3.13.2 Late Binding và Reflection 72
3.3.13.3 Dùng Function CType 73
3.3.14.Thừa kế từ một ngôn ngữ khác 74
3.3.14.1 Tạo một VB.NET BaseClass 74
3.3.14.2 Tạo một C# SubClass 74
3.3.14.3 Tạo một program Client 76
Trang 6SVTH:Võ Hoàng Anh MSSV:9800503
Chương 4 78
LÀM VIỆC VỚI ĐỐI TƯỢNG ĐỒ HỌA(GDI+) 78
4.1 So sánh giữa đồ hoạ của VB.NET và VB 6.0 78
4.2 Khảo sát Không gian Đồ họa GDI+ 78
4.3 Khái quát về Không gian tên System.Drawing 79
4.4 Xây dựng một không gian làm việc với GDI+ 81
4.4.1Các kiểu tiện ích của Sytem.Drawing 82
4.4.1.1 Kiểu Point(F) 82
4.4.1.2 Kiểu Rectangle(F) 83
4.4.1.3 Kiểu Size(F) và Region 83
4.4.1.4 Lớp Region 83
4.4.2Trình điều khiển Paint() 84
4.4.3Lớp Graphics 87
4.5 Tìm hiểu về màu (color) 88
4.6 Làm việc với Phông chữ 90
4.7 Không gian tên System.Drawing.Drawing2D 91
4.8 Chuyển đạt các ảnh 93
Chương 5 94
NHẬP, XUẤT và Namespace SYSTEM.IO 94
5.1 Kiểu Directory(Info) 94
5.2 Kiểu FileInfo 95
5.3 Xem xét phương pháp FileInfo.Open() 96
5.4 Kiểu FileStream 97
5.5 Kiểu Streamwriter & StreamReader 97
Chương 6 99
GIỚI THIỆU WINDOWS FORMS 99
6.1 Hai không gian tên GUI 99
6.2 Khái quát về Windows.Forms 99
6.3 Tạo một Form 99
6.3.1.Tạo form với VB.NET 100
6.3.2.Làm việc nhiều form trong một Project với VB.NET 104
6.4 Thêm một sự kiện điều khiển vào Form(Event Handler) 106
6.4.1.Làm việc với các sự kiện chuột: 106
6.4.2.Làm việc với các sự kiện bàn phím 109
6.5 Xây dựng một ứng dụng MDI (Multiple document interface) 111
6.5.1.Xây dựng Form Cha(MDI parent ) và form con (MDI children) 111
6.6 Tạo thực đơn cửa sổ( Windows Menu) 112
6.7.1.Kiểu Menu$MenuItemCollection 114
6.7.2.Thêm hệ thống menu vào trong Form(adding menus to a form) 115
Trang 7SVTH:Võ Hoàng Anh MSSV:9800503
6.7.3.Dùng PopUp Menu vào trong Form 117
6.7.4.Dùng ContextMenu vào trong Form 117
6.7 Tìm hiểu về thanh tình trạng(status bar) 118
6.8 Thêm Toolbar vào form 119
Chương 7 121
LẬP TRÌNH VỚI CÁC WINDOWS FORMS CONTROL TRONG VB.NET 121
7.1 Hệ phân cấp Windows Forms 121
7.2 Các control trong WindowsForms: 123
7.2.1.TextBox control 123
7.2.2.RichTextBox control 124
7.2.3.Label control 124
7.2.4.Button control 124
7.2.5.RadioButton và GroopBox control 125
7.2.6.ListBox control 125
7.2.7.ComboBox control 126
7.2.8.TrackBar control 127
7.2.9.MonthCalender Control 128
7.2.10.Các điều khiển con chạy : DomainUpDown và NumericUpDown 130
7.2.11.Làm việc với các Điều khiển Panel 132
7.2.12.Làm việc với ToolTips – Gán các ToolTips cho các control 133
7.2.13.Anchoring (bỏ neo) 134
7.2.14.Docking (gắn vào) 136
7.2.15.Control Splitter 138
Chương 8 142
ADO.NET 142
8.1 ADO.NET là gì ? 142
8.1.1.Sự khác nhau giữa ADO.NET và ADO cổ điển: 142
8.1.2.Hoạt động toàn cảnh của ADO.NET 143
8.1.3.Phương thức kết nối dữ liệu của ADO.NET 144
8.2 Mô hình hoạt động của ADO.NET 145
8.3 Kiến trúc của ADO.NET 146
8.4 Các kiểu của không gian (Namespace) System.Data 146
8.4.1.Kiểu DataSet 147
8.4.1.1 Vai trò của DataSet 147
8.4.1.2 Các tính chất của DataSet 149
8.4.1.3 Các phương thức của DataSet 150
8.4.2.DataTable 151
8.4.2.1.Vai trò của DataTable 151
8.4.2.2.Tính chất của DataTable 151
Trang 8SVTH:Võ Hoàng Anh MSSV:9800503
8.4.2.3.Xây dựng và thao tác DataTable 152
8.4.3.DataColumn 153
8.4.4.DataRow 154
8.5 Các kiểu của không gian (Namespace) System.Data.OleDb 155
8.5.1.OleDbConnection 156
8.5.2.OleDbCommand 157
8.5.3.OleDbDataReader 157
8.5.4.OleDbParameter 158
8.5.5.OleDbDataAdapter 160
8.6 Các kiểu của không gian (Namespace) System.Data.SqlClient 161
8.7 Vận dụng Wizards và dùng DataGrid 162
Chương 9 167
GIỚI THIỆU ASP.NET (ASP+) 167
9.1 Giới thiệu ASP.NET 167
9.2 Tìm hiểu bộ khung web nền thế hệ kế tiếp NGWSF(Next Generation Web Service Framework) .167
9.2.1.Giới thiệu : 167
9.2.2.Tìm hiểu khung nền NGWSF 168
9.2.3.Ngôn ngữ trung gian phổ dụng (common intermediate) 169
9.3 Cơ sở hạ tầng của các ứng dụng Web 170
9.4 Những khác biệt giữa ASP.NET và ASP 171
9.5 ASP.NET và dịch vụ Web 173
9.6 ASP.NET cấu hình và phân phối ứng dụng .173
9.6.1.Tập tin web.config 173
9.6.2.Tập tin global.aspx .174
9.7 Trạng thái của biến Session và Application trong ASP.NET 174
9.8 Xử lý lỗi trong ASP.NET .175
9.9 Kết chương 176
Chương 10 177
CÁCH TẠO TRANG ASP.NET 177
10.1 Giới thiệu Web Forms 177
10.2 So sánh sự khác biệt giữa Web forms và Windows forms 177
10.3 Sau đây chúng ta sẽ xem cách tạo một Web forms đơn giản .178
10.4 Cách đưa một controls vào Web Forms 180
10.5 Các thành phần điểu khiển trong ASP.NET 184
10.5.1.Điều khiển nội tại (intrinsic control) 185
10.5.2.Điểu khiển danh sách (Listcontrol) 186
10.5.3.Điều khiển đa năng (rich control) 187
10.5.4.Điều khiển kiểm tra (Validate control) 187
Trang 9SVTH:Võ Hoàng Anh MSSV:9800503
Chương 11 188
XÂY DỰNG TRANG ASP.NET NÂNG CAO 188
11.1 Lập trình với mã ẩn 188
11.2 Tạo các mẫu trang có khả năng dùng lại (Pagelets) .190
11.2.1.Xây dựng các mẩu Pagelet 191
11.2.2.Ví dụ về sữ dụng Pagelet 192
11.2.3.Định nghĩa thuộc tính và phương thức cho Pagelets 193
11.3 Sử dụng vùng đệm Cache của ASP.NET 194
11.3.1.Lập vùng đệm cho dữ liệu kết xuất .194
11.3.2.Sử dụng cache để lưu trữ biến môi trường 196
11.3.2.1 Tạo và truy xuất các biến của đối tượng cache 196
11.3.2.2 Sử dụng cache trong ASP.NET 197
11.4 Kết chương 198
Chương 12 199
NÂNG CẤP CÁC ĐỀ ÁN VB 6.0 LÊN NET 199
(Upgrading VB to NET) 199
12.1 Những điều lưu ý (considerations) trước khi nâng cấp lên NET 199
12.2 Các bước tiến hành Nâng cấp (Upgrade) 200
12.3 Có nên nâng cấp không ? 202
PHẦN 2 203
BÀI ỨNG DỤNG 203
Đề tài 204
Xây dựng Trang Web Dạy Học VB.NET 204
1 Hiện Trạng 204
2 Yêu cầu 204
3 Phân Tích 204
•Sơ đồ lớp 204
•Reletionships 204
•Mô tả dữ liệu các bảng 205
4 Cài đặt 206
5 Giao diện 207
•Sơ đồ giao diện 207
•Các trang chính 208
TÀI LIỆU THAM KHẢO 215
Trang 10SVTH:Võ Hoàng Anh MSSV:9800503
Phần 1
Tìm Hiểu Visual Studio.NET
Trang 11SVTH:Võ Hoàng Anh MSSV:9800503
Chương 1
GIỚI THIỆU VISUAL STUDIO.NET
Hiện nay trên thế giới Ngôn ngữ VisualBasic được nhiều nhà lập trình chọn là một ngôn ngữ chính cho việc thiết kế,lập trình những ứng dụng, đặc biệt là ứng dụng quản lý cơ sỡ dữ liệu ,… Nhưng đối với ngôn ngữ VB thì không làm họ vừa lòng rất nhiều vấn đề như : hổ trợ lập trình hướng đối tượng, đồ họa , đặc biệt là lập trình về các ứng dụng Web ….nay VisualStudio.NET ra đời đã đáp ứng được một phần nào mong chờ của những người lập trình
Nền tảng NET của Microsoft biểu thị một phong cách hoàn toàn mới lạ để xây dựng các ứng dụng có phân phối , ứng dụng Desktop, và di động Và cũng dính dáng gì với COM cổ điển, VB 6.0, hoặc bất kỳ cơ cấu tiền NET nào Vì rằng NET là sự chuyển hướng triệt để để rời xa lối làm việc hiện hành của tiến trình phát triển Win32, Microsoft cũng đã cho xuất xưởng một đợt cấp nhật mới tinh của ngôn ngữ lập trình VisualBasic vốn dĩ phổ dụng, có tên là VB.NET, cũng đã được hướng cụ thể về phía các ứng dụng NET Khi tìm hiểu qua VB.NET bạn sẽ thấy VB.NET không đơn thuần là bản nâng cấp của VB 6.0 Thay vì thế, tốt nhất ta nên VB.NET như là một ngôn ngữ lập trình mới đơn giản tình cờ có vẽ ta ngờ ngợi như là lặp lại trước đây của một ngôn ngữ
Để tìm hiểu VB.NET ta phải tìm hiểu sơ lược về cơ chế hoạt động cũng như cách thức tổ chức của hướng tiếp cận mới của NET
1.1 Các khối kiến tạo của NET(CLR,CTS và CLS)
Trên quan điểm của lập trình viên.NET có thể được hiểu như một môi trường thời gian chạy mới và một thư viện lớp cơ sỡ chung Tầng thời gian chạy được gọi là Common Language Runtime(CLR) Vai trò chính của CLR là định vị, và quản lý các kiểu NET định danh CLR quan tâm đến một số chi tiết cấp thấp chẳng hạn như quản lý bộ nhớ tự động, tích hợp ngôn ngữ, và triển khai giản lược (và định phiên bản) các thư viện mã nhị phân
Khối kiến tạo khác của của NET đó là Common Type System (CTS) CTS mô tả đầy đủ tất cả các kiểu dữ liệu khả dĩ mà thời gian chạy hổ trợ, chỉ định cách tượng tác của các kiểu đó với nhau và nêu chi tiết cách biểu thị chúng theo dạng thức dữ liệu Mata.NET
Commom Language Specification (CLS) là một loạt các quy tắc định nghĩa cho một tập con các kiểu chung bảo đảm các file nhị phân NET có thể được dùng một cách thông suốt qua tất cả các ngôn ngữ nhắm đến nền tảng NET Các kiểu dữ liệu nội tại của CLS như bảng sau sau :
Trang 12SVTH:Võ Hoàng Anh MSSV:9800503
Lớp cơ sỡ NET Phần biểu thị VB.NET Phần biểu thị C#
System.Single Single float
System.Double Double double
System.Object Object object
System.String String string
System.Decimal Decimal decimal
System.Boolean Boolean bool
1.2 Các thư viện cơ sỡ NET (Base class library)
Ngoài các định chuẩn CLR , CTS và CLS, nền tảng NET còn cung cấp một số thư viện lớp cơ sỡ sẵn có cho tất cả các ngôn ngữ lập trình NET Không những thư viện lớp cơ sỡ này gói riêng nhiều kiểu nguyên thủy khác nhau (ví dụ
IO tập tin, chuyển đạt đồ họa, và khả năng tương tác với các thiết bị phần cứng bên ngoài ) mà còn cung cấp phần hổ trợ cho một số dịch vụ mà hầu hết các ứng dụng đời thực yêu cầu (ví dụ : điều tác Data Base, Tích hợp XML,…)
1.3 Nhị phân.NET (NET assembly)
Ứng dụng NET xây dựng từ các assemblies Mỗi assembly phải có một
manifest(bản kê) Có thể nó nằm riêng trong một file hay nằm bên trong một
module Manifest chứa những metadata sau đây:
• Tên và Version number của assembly
• Những assembly khác (kể cả version number của assembly) mà assembly nầy tùy thuộc vào để chạy
• Types (classes và members) mà assembly nầy cho xuất khẩu
• Assembly nầy đòi hỏi điều kiện an ninh nào (security permissions)
Manifest cho phép ta dùng hơn một version của assembly (tương đương với DLL trước đây) cùng một lúc Từ đây không còn register DLL nữa Thay vào đó,
ta chỉ cần copy các assembly vào một subfolder /bin của chương trình chính
1.4 Vùng dữ liệu Mêta (MetaData)
Metadata là các dữ kiện cắt nghĩa(mô tả) cho ta biết về dữ kiện như lớp,
cấu trúc , kiểu điểm danh,vv Ví dụ IDL [interface Definition Language] là một ngôn ngữ Meta dùng để mô tả các kiểu hàm bên trong mộ hệ phục vụ COM đã
Trang 13SVTH:Võ Hoàng Anh MSSV:9800503
cho Thí dụ XML Schema của một XML file là metadata cắt nghĩa về data
structure của data trong file XML Chính cái XML Schema cũng là một file XML
Các ứng dụng NET components, gọi là Assembly, chứa rất nhiều metadata để
cắt nghĩa về chính nó (self describing) Tìm biết về một ứng dụng NET để có thể
làm việc với nó thì gọi là Reflection
1.5 Quá trình thự hiện luồng công việc của NET
1.6 Các không gian tên (Namespace) của NET
Trong NET thì Namespace(tìm hiểu rõ ở chương sau) quan trọng nhất mà ta chú ý đó là tên “System” Không gian tên này cung cấp một thân lõi mà các kiểu mà ta cần huy động nhiều với tư cách là một nhà phát triển Namespace
“System” cung cấp nhiều không gian tên NET được thể hiện ở bảng như sau : Các Namespace của NET
Các Namespace.NET Ý nghĩa
System Bên trong System có nhiều lớp cấp thấp ứng
phó với với các kiểu nguyên thủy, các phép
Mã nguồn NET củaVB.NET, C#,C++.NET,…
Trang 14SVTH:Võ Hoàng Anh MSSV:9800503
toán học, gom rác ,v.v.v System.Collections Namspace này định nghĩa một số đối tượng
thùng chứa lưu trữ ví dụ : Array Ust,Queue,Sortadlist
System.Data
System.Data.Commom
System.Data.OleDb
System.Data.SqlClient
Các NameSpace này được dùng cho thao tác
Cơ sỡ dữ liệu
System.Diagnostics Namespace này chúng ta gặp nhiều kiểu có thể
được các ngôn ngự NET sử dụng đễ gởi rối và theo dõi thi hành của mã nguồn
System.IO Namespace này gồm đầy đủ các điểu tác xuất
nhập bao gồm xuất nhập tập tin , vùng đệm v.vv
System.NET Namespace này chứa các kiểu liên quan đến
lập trình mạng.(yêu cầu, đáp ứng , nối,…) System.Reflection
System.Reflection.Emit Định nghĩa các mục hổ trợ tính năng khám phá kiểu vào thời gian chạy, tạo động và triệu gọi
các kiểu tùy biến
System.Security Bảo mật là một khía tích hợp của vũ trụ NET
Ở đậy gặp nhiều ứng phó với các mật mã hóa quyền,v.v
System.Threading Namespace này ứng phó với các vấn đề lập
sâu Ở đây gặp nhiều kiểu Mutex, Thread va Times out
System.Web Namespace này được ứng dụng cho việc lập
trình web
System.Windows.Forms Cung cấp các control cho người dùng thiết kế
giao diện một cách trực quan
System.Xml Chứa nhiều biểu thị cho XML lõi, các căn tốt
[primitives]và các kiểu điều tác với dữ liệu Xml
Trang 15SVTH:Võ Hoàng Anh MSSV:9800503
1.7 Visual Studio.NET
Để chạy Visual Studio.NET ta phải tham khảo và tiến hành theo như bước sau:
Có hai cách để bắt đầu một project mới trong VS.NET Hoặc Click New
Project trong trang Web StartPage như dưới đây:
Hoặc dùng Menu command File | New | Project giống như trong VB6 IDE:
Khi Add New Project, Name sẽ là subfolder name của New Project Bạn có thể
Trang 16SVTH:Võ Hoàng Anh MSSV:9800503
chọn VB.NET, C# hay VC++.NET project Trong tương lai chúng ta sẽ chỉ nhắm vào VB.NET và C# thôi Ngoài ra SetUp and Deployment bây giờ là một loại project nằm trong IDE của Visual Studio.NET, ta không cần phải chạy riêng chương trình Package and Deployment bên ngoài VB6 IDE như trước đây
Solution trong VS.NET có thể chứa hơn một Project và bao gồm tất cả
những files bạn liệt ra là cần thiết cho Solution Nếu một trong những files ấy bị thay đổi bên ngoài VS.NET, khi VS.NET khám phá ra nó sẽ load vào trong VS.NET cho bạn nếu bạn đồng ý
Để mở một Solution/Project có sẵn, bạn có thể click link của tên project trên trang StartPage, hay dùng Menu command File | Open | Project , hay Menu Command File | Recent Projects
• Visual Studio.NET IDE
Trang 17SVTH:Võ Hoàng Anh MSSV:9800503
Giao diện của VS.NET có những đặc điểm giống như Delphi và Visual InterDev
ở chỗ code được phát sinh tự động, Windows nằm chung thành Tab set hay float khắp nơi, và hổ trợ Solution rất thích hợp cho việc triển khai của cả đội
Toolbox bên trái chứa Controls cho Windows Forms, Web Forms, General Components, Data Components, HTML tags, XML Schema tools v.v Khi
một Form đang hiển thị, click lên một button trong Toolbox để chọn Tool Set bạn
cần Toolbox ở trạng thái Fixed displayed (như trong hình trên) khi cây ghim phía
trên đâm xuống Bạn có thể click cây ghim cho nó nằm ngang và vertical
Toolbox tab hiện ra bên trái Lúc ấy, Toolbox ở trong trạng thái Auto Hide (hiện
ra/rút vào) như dưới đây:
Bạn có thể gọi hầu hết các Windows hiển thị bằng cách dùng Menu commands
View, View | Other Windows và Debug | Windows:
Trang 18SVTH:Võ Hoàng Anh MSSV:9800503
Các Windows bên phải có thể nổi, nằm chồng lên nhau thành những Tabs trong một tập Window hay nằm cạnh nhau vertically tiled Nắm Tittle bar để dời nguyên một tập Window đi Nắm Window Tab của một tập Window để kéo chỉ một Window ra Bạn có thể để chồng hai Windows lại với nhau bằng cách nắm Tittle bar của một Window để chồng lên một Window khác Thử nhích đi, nhích lại, trước khi buông Window ra để làm quen với kết quả
Phía dưới có Task List Window để bạn giữ sổ sách về diễn tiến của dự án và quản lý cả đội Khi bạn dùng menu command Build | Build để compile program,
nếu có errors chúng sẽ được hiển thị trong Task List Window Double click lên một hàng error để mang cursor đến chỗ gây ra error ấy trong code window
Trong hình dưới đây, ta cố ý comment out hàng Dim sw As StreamWriter:
Trang 19SVTH:Võ Hoàng Anh MSSV:9800503
Ngoài ra, để Debug bây giờ bạn có Output Window để in ra các messages mà
trong VB6 bạn dùng Immediate Window Thí dụ trong VB6 bạn viết:
Debug.Print "Count=" & CStr(Count)
để in ra trong Immediate Window, thì trong VB.NET bạn có thể viết:
Console.WriteLine("Count= {0}", Count)
để in ra trong Output Window
Dĩ nhiên bạn vẫn có thể tiếp tục dùng Immediate Window trong công tác Debug như trước đây trong VB6
Chưa hết, VS.NET còn cho bạn Command Window để ta có thể enter những
VS.NET commands để manipulate IDE, xử lý macros, v.v
Để hiển thị Window nầy bạn dùng menu command View | Other Windows |
Command Window Để tiện hơn, bạn drag title bar của nó để chồng lên tab bar
của Task List và Output windows
Trang 20SVTH:Võ Hoàng Anh MSSV:9800503
Nếu ta enter một command như:
File.AddNewProject
IDE sẽ hiển thị Add New Project dialog
VS.NET hổ trợ Macro để bạn có thể record và playback một chuỗi công tác Phương tiện Integrated Debugging cho ta Debug Menu, Call Stack Window,
Breakpoints Window và Watch and Value Display Windows
Thường thường bạn sẽ Add Reference các NET components Nhưng bạn cũng có thể dùng ActiveX (có sẵn trong VB6) trong NET application bằng cách Add Reference COM (click Tab COM trên Add Reference Dialog) .NET sẽ gói ActiveX thành một NET component (click Yes trả lời câu hỏi "Would you like to have a wrapper generated for you?") Ngoài ra dùng Add Reference Projects để
refer đến DLL của các User developed DLL
Trang 21SVTH:Võ Hoàng Anh MSSV:9800503
Chương 2
NGÔN NGỮ VISUAL BASIC.NET
2.1 Giới thiệu :
VB.NET, còn gọi là VB7, chẳng qua là C# viết theo lối Visual Basic Nay
VB7 đã hoàn toàn là Object Oriented, tức là cho ta dùng lại (reuse)
classes/forms theo cách thừa kế thật thoải mái, nên nó khác VB6 nhiều lắm
Dầu vậy, đối với VB6 programmers học VB.NET không khó Lý do là
VB.NET không cho thêm nhiều từ mới (reserved words) Nói chung các ý niệm
mới trong VB.NET đều dễ lĩnh hội, nhất là khi đem ra áp dụng cách thực tế Đó
là nhờ Microsoft vẫn giữ nguyên tắc dấu và làm sẵn (của VB6) những gì rắc rối
phía sau sân khấu, để ta có thể tập trung vào việc tìm kiếm một giải pháp, thay vì quá bận tâm vào cách thức làm một việc gì Chính nguyên tắc ấy đã giúp Microsoft chiêu mộ được 3 triệu VB6 programmers trên khắp thế giới VB.NET cống hiến cho VB programmers một công cụ rất hữu hiệu để dùng cho mọi hoàn cảnh, từ database, desktop, distributed, Internet cho đến real-time hay mobile (pocket PC)
Những ưu điểm (features) của VB.NET đến từ chức năng của NET
Framework Nó mang đến phương tiện lập trình cho mạng cách Object Oriented
như XML, Remoting, Streaming, Serialisation, Threading v.v Những thứ nầy tuy lạ nhưng không khó học, ngược lại sẽ tiết kiệm rất nhiều thì giờ
Mặc dầu VB6 là một ngôn ngữ lập trình trưởng thành và hiệu năng, chắc chắn hãy còn tồn tại trong nhiều năm nữa, nhưng học thêm VB.NET là một đầu tư tương đối ít tốn kém và đảm bảo huê lợi gấp bao nhiêu lần trong hàng thập niên tới
2.2 Namespaces
Namespaces là một cách đặt tên để giúp sắp đặt các Classes ta dùng trong
program một cách thứ tự hầu dễ tìm kiếm chúng Tất cả code trong NET, viết bằng VB.NET, C# hay ngôn ngữ nào khác, đều được chứa trong một namespace Điểm nầy cũng áp dụng cho code trong NET system class libraries Chẳng hạn, các classes của WinForms đều nằm trong System.Windows.Forms namespace Và các classes dùng cho collections như Queue, Stack, Hashtable v.v đều nằm trong System.Collections namespace
Tất cả code ta viết trong program của mình cũng đều nằm trong các namespaces
Trước đây trong VB6, mỗi khi nhắc đến một Class trong một COM tên
Trang 22SVTH:Võ Hoàng Anh MSSV:9800503
CompName ta viết CompName.Classname (còn gọi là PROGID) , tức là cũng
dùng một dạng namespace
Tuy nhiên phương pháp nầy có một vài giới hạn:
• Địa chỉ của class bị buộc cứng vào component đang chứa nó
• Những classes không nằm trong một COM component thì không có
"namespace"
• Cách gọi tên PROGID chỉ có một bậc thôi, không có bậc con, bậc cháu
• Tên của Component luôn luôn có hiệu lực trên khắp cả computer
Namespaces trong NET khắc phục được mọi giới hạn nói trên trong VB6
Nhiều assemblies có thể nằm trong cùng một namespace, nghĩa là classes
tuyên bố trong các components khác nhau có thể có chung một namespace Điều nầy cũng áp dụng xuyên qua các ngôn ngữ, giúp cho một class viết trong VB.NET có thể nằm trong cùng một namespace với một class viết trong C#, chẳng hạn
Hơn nữa, trong một assembly có thể có nhiều namespaces, dù rằng thông thường ta chỉ dùng một namespace duy nhất cho tất cả các classes trong ấy
Nhớ là một assembly trong NET thì đại khái tương đương với một COM component
Tất cả code trong NET đều nằm trong những assemblies
By default, tên của project được dùng làm namespace Nếu bạn right click lên
project name NETListbox trong Solution Explorer của program Demo, rồi chọn
Properties trong popup menu, IDE sẽ hiển thị Property Pages dialog như dưới
đây:
Bạn thấy Root namespace của project là NETListbox Bạn có thể thay đổi
tên namespace ấy nếu bạn muốn
Trang 23SVTH:Võ Hoàng Anh MSSV:9800503
Namespaces có thể được phân chia thứ bậc giống như Folders trong một File Directory Nó sẽ giúp user sắp đặt các classes theo đúng nhóm cho trong sáng và dễ đọc Thí dụ bạn đang viết một program cho một hảng sản xuất, bạn sẽ dùng
namespace NhàSảnXuất ở root level Bên trong namespace ấy bạn sẽ tạo thêm các nhánh của chương trình như:
1.NhàSảnXuất.TồnKho
2.NhàSảnXuất.SảnPhẩm
3.NhàSảnXuất.KếToán.ChiPhí
4.NhàSảnXuất.KếToán.ThuNhập
Như thế ta đã định nghĩa một base namespace tên NhàSảnXuất, với những
namespaces con, cháu bên trong, mỗi namespace có chứa classes, modules, enums, structures và các namespaces khác
Mỗi namespace chứa những phần của code thích hợp cho nó trong program nói chung Trong File Directory, ta có thể có hai files dù mang cùng tên nhưng nằm trong hai folders khác nhau Giống như vậy, trong NET ta có thể có hai classes có cùng một tên nhưng nằm trong hai namespaces khác nhau Đó là vì khi
ta viết tên của một class với cả namespace của nó thì có thể phân biệt với một class khác với cùng tên
• Local và Global Namespaces
Khác với COM components với "namespace" của chúng áp dụng cho khắp cả
computer, namespaces của NET thông thường là Local, chỉ có application program của nó thấy mà thôi .NET cũng hổ trợ Global namespace, nhưng phải
được ký tên (digitally signed) và đăng ký với.NET runtime để chứa nó trong global assembly cache
Công việc làm một namespace Global rắc rối như thế để giảm thiểu trường
hợp ta trở về tình trạng DLL hell trước đây
• Dùng Namespaces
Ta có thể dùng namespaces bằng cách nói thẳng ra (explicitly) với nguyên tên (Direct Addressing) hay hàm ý (implicitly) với Import keyword Nhưng điều tiên quyết là ta phải reference cái assembly chứa namespace mà ta muốn dùng Ta
thực hiện việc ấy với Menu command Project | Add References Khi Add
References dialog hiện ra, chọn Tab NET cho standard NET components hay
Tab Projects cho DLL của một NET project khác , highlight DLL bạn muốn rồi click Select button, đoạn click OK
Trang 24SVTH:Võ Hoàng Anh MSSV:9800503
Chẳng hạn ta muốn read và write từ studio (cái console input/output stream)
Cái namespace ta cần sẽ là System.Console Trong cách Direct Addressing ta
sẽ code như sau để viết hàng chữ "Chào thế giới":
System.Console.WriteLine ("Hello world!")
Nếu ta dùng Import keyword bằng cách nhét vào câu Imports
System.Console ở đầu code module, ta có thể code gọn hơn:
WriteLine ("Hello world!") Dưới đây là một số namespaces thông dụng:
Namespace Chức năng Classes điển hình
System.IO Đọc/Viết files vàcác data streams
Trang 25SVTH:Võ Hoàng Anh MSSV:9800503
System.Data Quản lý data
DataSet, DataTable, DataRow,SQLConnection,
ADOConnection
System.Collection Tạo và quản lý các loại collections ArrayList, BitArray, Queue,Stack, HashTable System.Math Tính toán Sqrt, Cos, Log, Min
System.Diagnostics Debug Debug, Trace
System.XML Làm việc với XML, Document Object
Model
XMLDocument, XMLElement,XMLReader, XMLWriter
System.Security Cho phép kiểm soát an ninh Cryptography, Permission,Policy
• Aliasing Namespaces (dùng bí danh)
Khi hai namespaces trùng tên, ta phải dùng nguyên tên (kể cả gốc tích) để phân biệt chúng Điển hình là khi ta dùng những namespaces liên hệ đến VB6
như Microsoft.Visualbasic Thay vì code:
Microsoft.Visualbasic.Left ( InputString,6)
ta tuyên bố:
Imports VB6= Microsoft.Visualbasic Sau đó ta có thể code:
VB6.Left ( InputString,6)
• Dùng Namespaces keyword
Trong thí dụ về program có Root Namespace là NhàSảnXuất như nói trên, nếu ta muốn đặt ra một namespace con là TồnKho, ta phải dùng NameSpace keyword trong code như sau:
' Root Namespace là NhàSảnXuấtNamespace TồnKho
Class PhòngLạnh ' Code cho Phòng Lạnh End Class
End Namespace Bây giờ muốn nói đến class PhòngLạnh bên trong namespace TồnKho ta sẽ code như sau:
NhàSảnXuất.TồnKho.PhòngLạnh
Trang 26SVTH:Võ Hoàng Anh MSSV:9800503
2.3 Kiểu dữ liệu
Một thay đổi lớn cho Data Type của VB.NET, là những variables dùng Data Type địa phương như Integer, Single, Boolean,.v.v đều là những Objects Chúng
đều được derived (xuất phát) từ Class căn bản nhất tên Object trong VB.NET
Nếu bạn thử dùng Intellisense để xem có bao nhiêu Functions/Properties một Object loại Integer có, bạn sẽ thấy như dưới đây:
Danh sách kiểu dữ liệu
Trang 27SVTH:Võ Hoàng Anh MSSV:9800503
String 10 Bytes
User-Defined Tổng kích thước của các thành phần
• Có một vài khác biệt giữa VB và VB.NET
o Trong VB6 ta biết mình sẽ gặp Division by Zero error khi mẫu số bằng
0, nhưng ở đây program sẽ viết trong Output Window chữ Infinity (vô
cực) Tương tự như vậy, nếu ta viết code:
Dim dValueA As Double Dim dValueB As Double dValueA = 0
dValueB = 0 Console.WriteLine(dValueA / dValueB)
Kết quả sẽ là chữ NaN (Not a Number) hiển thị trong Output Window
o VB.NET dùng Decimal data type với 128 bits để thay thế Currency data type trong VB6 Nó có thể biểu diễn một số tới 28 digits nằm bên phải dấu chấm để cho thật chính xác Hể càng nhiều digits nằm bên phải dấu chấm thì tầm trị số của Decimal càng nhỏ hơn
o Kiểu Variant không còn tồn tại trong VB.NET
o Có thể khởi tạo biến khi khai báo
vd : Dim x as Integer = 5 Dim dblValue as Double = 22.5
2.3.1 Hằng (Constants)
Hằng giống với biến nhưng không thể thay đổi giá trị khi đã thay báo.Khi khai báo Constants trong VB.NET ta phải khai rõ Data type của nó là String, Integer, Boolean v.v.:
Vd :
Public constant myConstantString As String = "happy"
Public Const maxStudent As Integer = 30
2.3.2 Các Toán Tử và Phép Toán
Các toán tử trong VB.NET
Phạm Trù toán tử Ký hiệu
Trang 28SVTH:Võ Hoàng Anh MSSV:9800503
Chắp nối &
Quan hệ =, <>, <, >, <=, >=, Like, Is, TypeOf., Is
Phủ định Not
Điều kiện và And, AndAlso
Điều kiện hoặc Or , OrElse
Điểu kiện Xor Xor
VB.NET cho ta thêm cách viết phép toán mới mà C programmers rất thích từ lâu nay
X += 4 tương đương với X = X + 4 Mess &= " text" tương đương với Mess = Mess & " text"
Ghép Strings X = X & "more text" X &= "more text"
Ta vẫn có thể tiếp tục dùng cách viết trong VB6, nhưng bây giờ có thêm một cách viết gọn hơn
Trang 29SVTH:Võ Hoàng Anh MSSV:9800503
2.3.3 Cấu trúc
Cấu trúc cho phép tạo ra những loại dữ liệu theo người dùng
Từ khoá Type trong Visual Basic được thay thế bằng Structure
Các biến khai báo trong cấu trúc phải khai báo với từ khoá Dim
Public Structure UStudent
Public FullName As String Public Age As Integer End Structure
2.3.4 Lệnh rẽ nhánh
2.3.4.1 Lệnh IF…THEN… ELSE
• Các phép toán so sánh : =, <, <=, >, >=, <>,
• Các toán tử điều kiện : And, Or, Not
• Các ký tự đại diện so sánh khi dùng với từ khoá Like
Ký tự Công dụng
? Đại diện cho một ký tự
* Đại diện cho nhiều ký tự
# Đại diện cho ký tự số
[DanhSáchKýTự] Đại diện cho một ký tự nằm trong danh sách
các ký tự [!DanhSáchKýTự] Đại diện cho một ký tự không nằm trong danh
sách các ký tự
Trang 30SVTH:Võ Hoàng Anh MSSV:9800503
“abcdefg” Like “a*a” ‘ biểu thức sai
“abcdefga” Like “a*a” ‘ biểu thức đúng
“abc” Like “a?c” ‘biểu thức đúng
“a1a” Like “a#a” ‘biểu thức đúng
“abcdefga” Like “a[a-z]a ‘biểu thức sai
• Các phép toán logic : And , Or, Xor, Not
Trong VB6, nếu ta viết:
Dim myInt As Integer myInt = 0
If (myInt <> 0) And (17 \ myInt < 5 ) Then
Thì sẽ bị Division by Zero error, vì mặc dầu phần (myInt <>0) là False, nhưng VB6 vẫn tiếp tục tính phần (17 \ myInt < 5 ), và tạo ra error vì 17 chia
cho một số 0
Trong vài ngôn ngữ lập trình khác, khi (myInt <>0) là False thì nó không tính thêm nữa, tức là nó nói rằng khi một phần của AND là False thì nhất định kết quả của Logical Statement trong IF phải là False Đặc tính nầy gọi là Short-
Circuit (đi tắc)
Nếu ta dùng code nói trên trong VB.NET, nó vẫn cho Division by Zero error giống như VB6 Tuy nhiên, nếu ta muốn dùng đặc tính Short-Circuit thì
ta chỉ cần thay thế chữ And bằng AndAlso như sau:
Dim myInt As Integer myInt = 0
If (myInt <> 0) AndAlso (17 \ myInt < 5 ) Then
Short-Circuit cũng áp dụng cho Logical OR khi ta thay thế chữ Or bằng
OrElse để nói rằng khi phần đầu của OR là True thì nhất định kết quả của
Logical Statement trong IF phải là True
2.3.4.2 Lệnh Switch Case
Cú pháp :
Select Casetestexpression
[Case expressionlist-n
[statements-n]]
Trang 31SVTH:Võ Hoàng Anh MSSV:9800503
End Select
Select case strTest
Case “match1”, “match2”
‘do something
Case “match3”
‘do something
case Else ‘ do somethingelse
Loop [{while | Until} condition]
Theo nhiều cách Do/ While và Do/Until được dùng xen kẻ Do/ While sẽ thực hiện dòng lập cho đến khi điều kiện kết thúc là False Mặt khác Do/Until sẽ thưc hiện dòng lệnh kết thúc là True
Vd : Dòng lặp sẽ tăng val đến 100 sẽ dừng
Trang 32SVTH:Võ Hoàng Anh MSSV:9800503
Dim val as Integer = 0 Dim x as Integer = 0
Dòng lặp sẽ ngừng khi val = 100 nhưng nó tăng val trước khi xét điều kiện
Dim val as Integer = 0
Do
val += 1 Loop While val < 100
Dim val as Integer = 0
Do
val += 1 Loop Until val = 100
2.3.5.2 Lệnh For Loops
Lệnh For Loops
Cú pháp :
For counter = start To End [Step step]
[statements]
Trang 33SVTH:Võ Hoàng Anh MSSV:9800503
[Exit For]
[statements]
Next For Each element In Group
‘ Nếu không khai báo Step : mặc định là 1 For I = 1 To 10
val = val + 5 Next
Dim objItem, MyCollection as Object For Each objItem in MyCollection
If objItem Val = 5 Then Exit For
End If Next
2.3.6 Mảng
• Trong VB.NET, Mảng có chỉ số bắt đầu là 0
• Mảng là tập hợp các phần tử có cùng kiểu dữ liệu cơ bản (integer, long, String …) Các phần tử mảng trong VB.NET có thể là các đối tượng, các giao diện, các cấu trúc
• Mảng có thể một hoặc nhiều chiều (tối đa 60 chiều ) Số phần tử trong mảng tối đa 264 – 1
• Có thể khởi gán khi khai báo
• Có thể dùng hàm LBound và UBound để lấy chỉ số đầu và cuối của mảng
• Tự động phát sinh từ System.Array (sự khác biệt rỏ nhất giữa VB va VB.NET)
Các phương thức chọn lọc của System.Array
Trang 34SVTH:Võ Hoàng Anh MSSV:9800503
Phương Thức Ý nghĩa
BinarySearch() Phương thức tĩnh này tìm phần tử trong mảng
Clear () Phương tĩnh này gán các phần tử trong mãng
cùng giá trị (bằng 0 cho mảng giá trị , bằng Null cho mảng tham chiếu đối tượng
CopyTo() Dùng chép các phẩn tử từ mảng nguồn sang
mảng đích Reverse() Phương pháp này đảo ngược các nội dung của
một mảng một chiều Sort() Sắp xếp một mảng một chiều
vd : Mảng một chiều
‘Khai báo mảng có 11 phần tử (0, 1, , 10)
Dim arr(10) as Integer
hoặc
Dim arr() as Integer = New Integer(10){}
‘Khai báo và gán giá trị
Dim arr() as Integer = {0,1,2,3,4}
Dim str() as String = {“aaa”,”bbb”,ccc”, “ddd”}
Trang 35SVTH:Võ Hoàng Anh MSSV:9800503
Dim arr(5,10) as String
Dim arr( , ) as String = {{“11”,”12”,”13”},{”21”,”22”,
For I = LBound (arr,1) To UBound (arr,1)
For J = LBound (arr,2) To UBound (arr,2)
For K = LBound (arr,3) To UBound (arr,3)
Giống như VB, mảng có thể hiệu chỉnh kích thước bằng từ khoá
Redim(huỷ các nội dung hiện hành của mảng) hoặc dùng các từ khoá redim Preserve (bảo toàn các giá trị bên trong mảng hiện hành) Tuy nhiên khác vời VB, bạn không thể thay đổi kiểu cơ sở của một mảng bằng từ khoá As
vd :
Dim arr() as Integer Dim I as Integer Redim arr(I) For I = 0 To 3 arr(I) = 0
• Cú Pháp :
[Public | Private | Friend | Protected] [Static ] Function name
[(arflist)] [As type]
[statements]
Trang 36SVTH:Võ Hoàng Anh MSSV:9800503
o Public : Cho phép mọi lớp có thể truy cập tới
o Private : Chỉ có thể truy cập bởi lớp định nghĩa phương thức
o Friend : Chỉ có thể truy cập công cộng trong phạm vi một project
o Protected : Chỉ có thể dùng bổi lớp định nghĩa cũng như các lớp con
• Dùng từ khoá Optional để khai báo cho những tham số mặc định
Nhưng phải khởi gán giá trị mặc định này
• Dùng từ khoá delegate để gọi con trỏ hàm
Delegate là một cách giúp ta pass một procedure như một parameter
vào trong một method Ý niệm nầy được gọi là Function Pointer hay
Trang 37SVTH:Võ Hoàng Anh MSSV:9800503
Callback Một trường hợp cổ điển ta dùng Delegate là cung cấp một
dataArray để sort với một Function để so sánh mỗi hai items trong array
Trong VB.NET ta dùng AddressOf operator để pass một procedure Ta
declare một Delegate bằng cách nói nó là một procedure dưới dạng nào, có bao nhiêu parameters, mỗi parameter thuộc loại data type nào Thí dụ:
Delegate Function IsGreater (ByVal v1 As Integer, ByVal v2
Dim outer As Integer
Dim inner As Integer
Dim temp As Integer
For outer = 0 To UBound(DataArray)
For inner = outer + 1 To UBound(DataArray)
If GreaterThan.Invoke( DataArray(outer), DataArray(inner)) Then
temp = DataArray(outer) DataArray(outer) = DataArray(inner) DataArray(inner) = temp
End If
Next
Next
End Sub
Để ý cách dùng Method Invoke để gọi một Delegate Bây giờ ta chỉ
cần cung cấp Delegate routine mà ta đã hứa:
Public Function myIsGreater (ByVal v1 As Integer, ByVal
v2 As Integer) as Boolean
Return ( v1 > v2)
End Function
Tiếp theo đây là cách ta dùng Delegate nói trên:
Dim myData() As Integer = { 2, 5, 8, 13, 26}
Trang 38SVTH:Võ Hoàng Anh MSSV:9800503
DoSort (myData, AddressOf myIsGreater)
Khi một Subscriber registers với một Publisher một routine để Handle một loại Event, ta cũng dùng delegate như sau:
AddHandler Button4.Click, AddressOf Button4_Click Khi một Event Click xảy ra ở Button4, system sẽ execute Sub
Button4_Click
Trang 39SVTH:Võ Hoàng Anh MSSV:9800503
Chương 3
HƯỚNG ĐỐI TƯỢNG MỚI TRONG
VB.NET(OOP)
VB.NET khắc phục những giới hạn về Đối Tượng (Object-Oriented)
của VB6 và mang đến cho ta một ngôn ngữ lập trình hoàn toàn Object-Oriented (OO) Gần như mọi thứ trong VB.NET đều liên hệ với Object Để tìm hiểu về hướng đối tượng trong VB.NET chúng ta cần phải nắm lại một số vấn đề sau
3.1 Vấn đề khái quát của hướng đối tượng
3.1.1 Classes và Objects, nguyên tắc Abstraction
Theo phương pháp đối tượng, program (người lập trình) được thiết kế để một phần code đại diện cho một vật tương đương ngoài đời Nó được gọi là
Class
Khi lập trình VB6 ta đã dùng những controls từ Toolbox như Textbox,
Label, Listbox v.v Textbox là Class của các Objects Text1, Text2 Cũng như Label1, Label2 là những Objects tạo ra từ Class Label Ta hay dùng hai từ Class và Object lẫn lộn nhau Điều đó không quan trọng, miễn là ta biết rằng Class là một ý niệm Trừu tượng (Abstraction), còn Object là một vật thực hữu Giống như Class CaSĩ là một ý niệm trừu tượng, còn Object
KhánhHà của Class CaSĩ là một người bằng da, bằng thịt với tiếng hát được
nhiều người ngưỡng mộ
Ta nói Object là một Instance của Class, và ta instantiate Class để có một
Object
Thường thường khi ta phân tích một vấn đề để thiết kế chương trình thì
các Danh từ (Nouns) là những Classes Giả dụ ta phân tích hoạt động của
Trang 40SVTH:Võ Hoàng Anh MSSV:9800503
một Nhà Kho Ta có phòng chứa, ngăn tủ, bãi nhận hàng, xe nâng hàng, nhân viên v.v., mỗi thứ đều có thể là một Object nên ta sẽ thiết kế một Class cho nó
3.2 Fields, Properties, Methods và Events, nguyên tắc Encapsulation
Class CaSĩ diễn tả CaSĩ là người như thế nào Như SốBàiHát là một Public Variable của Class, được gọi là Field có thể được đọc/viết trực tiếp Còn Kiểu tóc (dài, ngắn, màu đen, có sọc nâu ), Giọng hát (cao, trầm, ) là những Properties Chúng cũng giống như Field nhưng được implemented (thi hành) bằng cách dùng procedures Property Get và Property Set
Property Set có thể được coded để kiểm soát nếu "Kiểu tóc" không thích hợp thì sẽ bị loại bỏ Ngược lại, nếu "Kiểu tóc" thích hợp và được áp dụng thì
ta sẽ thấy kết quả ngay là CaSĩ lại đẹp thêm ra Thường thường Fields và
Properties là các Danh từ (Nouns)
Một CaSĩ có khả năng ĐơnCa, KýTênLưuNiệm, TrìnhDiễn Ta gọi đó là những Methods mà ta implemented bằng Subs và Functions (thí dụ như
Function KýTênLưuNiệm sẽ return một chữ ký) Thường thường Methods là
những Động từ (Verbs)
Đối với code bên trong Class thì Property giống như một Method còn đối
với Client (tức là program đang dùng Class) thì Property giống như Field Đôi khi, nếu trình diễn lâu, CaSĩ cần một ly nước CaSĩ sẽ Raise Event
KhátNước để nhân viên trong hậu trường phục vụ
Ta gọi chung Fields, Properties, Methods và Events là những Class
Members (Các Thành viên của Class)
Có một ngoại lệ về sự khác biệt giữ Class và Member, đó là khi ta dùng
các Shared Class Members của một Class thì ta không nhất thiết phải
instantiate một Object Ta có thể dùng thẳng tên của Class như một Object
Cái lợi điểm của Object Oriented Programming là ta có thể gói tất cả
những đặc điểm, khả năng của một Class vào trong một Unit of Code (Đơn vị
mã) tự túc Khi chúng ta lịch sự yêu cầu thì CaSĩ ĐơnCa Ta biết CaSĩ ca thì
thu hút lòng người, nhưng ta không cần biết làm sao CaSĩ đạt đến trình độ như vậy Đó không phải là chuyện để chúng ta quan tâm
Đối với ta Class CaSĩ là một Black Box, ta không biết và không cần biết
chuyện gì xảy ra bên trong Nếu sau nầy CaSĩ thay đổi kỹ thuật đơn ca để hát dễ và hay hơn, điều đó không ảnh hưởng gì đến chúng ta Đặc tính OO ấy gọi
là Encapsulation (Gói kín)