Báo cáo thực tập tốt nghiệp môn kỹ thuật lập trình Visual Basic.Net
Trang 1I Cac kiéu dit Lu va GA GiGM sees eeceeceeseeseseesesseeseesecsecsssessessessesseeseenesneeneeneeees 4
1 Đặc điểm các kiểu đữ liệu trong Net Platform ¿2 2 2 2 £+E+EeEsEsesesed 4 2 Kiểu String c1 S111 TT TT TT TT TT TT HH0 re 4 3 Kiểu DateTiime - c1 31133333333 Tư TT TT T001 e0 6 m.‹®.u.: 7 I Cac kiêu dữ liệu nội tại của VB.NET gỒm: + - + +E+E+E+EzxrErerererees 8 II Biến - T ính chất, Khai báo và khởi tạ -i 5 +eSe 2k +E S3 SE ceEeErEserserecee 9 1¬ ẽẻ 5 9 2 4, ì0o 0084 8: 0 10 3 Mang & SfrUCẦUTG - In KT cọ nh 13 a) MAN 0 .ố 13 b) R01 ằ 14 4 60; 000i — 15
CHUONG II: Cầu trúc câu lệnh - + + + + 2+ E2 E+E+E£EEE+EEEEEEEEEEEEEEEEEEErkrkrkrkreee 17
I CAu Tritc Chon ccccccccscceccesescececsecescsceecaceecaceecarsevaceasacsecacaecaceesareccaceecaceesacens 17 1 in 17 2 hon ® ae 18 IV — Cấu Trúc Lặp + CS EEEE51E1115111E11111 11111111 18 1 2U) 18 2 U05: 0005.1177 .455 19 3 P9116 11a 19 4 IP NEvuvA 2 19 5 Do Unt LOO 11155 20 6 Do Loop Until .ố.ố.ố 20 1 ni g0 (i1 20 CHƯƠNG III Thủ tục và hàm Và Sử lý Lỗi ¿S2 2 23x 2E rx tt rxrrrreeg 20 I I 000 )là 8:0 nnrda 20
Thay đổi trong thủ tục và hảïm - + + + + SE E51E15E5111E111 111111 nhu 20 1 Khai báo Option STICẨ - - - << << << <2 929 111 1111151111 111111 1 11 00 58 81933 21 2 Chudi 06 d6 dai c6 din eceececcscsescsesescsescesecsvevscevevevsvevavavavecsvsvasscaeseeeees 21 3 6Ô) 90)0-) 34-4180 2si(80.(-2 0n 21 4 Imports Không gian tên ( Namespas©) .- - - - - - - - - Ăn ke 22 Vv ST LY LOd ee cecccccecccscescscsceecscssescscsesecssscsucecscsssecscsssscacsesssessesecessesesesseeneeseceness 23 1 8091805700008 23 2 Sử Lý LII 111 113111 511103111 3111 1 H101 HT HT HT TT TT HH TH TH HH 23 PHẦN II: LẬP TRÌNH HƯỚNG ĐƠI TƯỢNG TRONG VB.NET 5 s+szscxcxc: 26 VL Chương 4 :Các tính chất 5-52S5 S6 SsSEvSEEEEEEEEEEEEEEEEEESEEErErrerrrred 26 I I0 0i, 11 26 II Tính Bao Boc cc.ccsssscccccsssseccceessececcesuseeseesuuseceesuueeccesaseaeccssensenecesessugeeeees 27 I0 5 {dŒN.AậAAH 27 TV II ca 28
Trang 2I I 0/008 im .ốố 28
Il — Tạo một lớp kể thừa - + + + + + SE SE EE5E5EE1E15EE1E1 1111113111 29 TH — Khai báo phương thỨC - <0 TH kg 29
I4 ‹ in sào 8 32
VII Chương VI: Sự kiện (EVeTT) Q19 9 1 0 01v nh 35 I Khai báo sự kiỆn - - CC Q01 1111 HH ng ng ren 35
II ii 03ii1i81ïg s0 DU 35
II Kết hợp sự kiện với sử lý - + - + + +E*EESEEEEEEEEEE1E1E1 11113 36 IX — Chương VII Từ khoá Me, MyBase, MyClass -Ă LH, 37
I \ /[SaỎdỎỎỎỔtỂƠ:ỒỒỖỒŨỖ 37
Il MYBaSC cceccccccccccccecceceeseesssssessssssssessesesesceeceeeeececeeceeeeeessceceeseassenseeeeeeeeeneees 38
J8 (¡98 ae a 4 38
CHƯƠNG VIII Các điều khiển hiện thị 5:52 41
I ComBoBox, LIstBox, CheckLIstBox - CS cv xe 41
X 0€, 01 .ố 43
1 Cac thuoc tinh ctia DataGrid - - <5 c2 Ăn nh ng, 43
2 Các Phương thức của DataTrid - - 3 SH ng ve 44
3 Các sự kiện của [Datar1d - - - - + - 5< cE+ SE B3 SE SH nh cv, 45
4 DataGridTableStyle và TableStyÏ€ - - ST 1000001119 S SH 11111111 kg 45 5 DatagridColumStyle và DataGridcolumnStyÌes - se 46
6 Thiết kế DataTTId nh HH he 47
PHAN III TONG QUAN VE 19000500001 50 Chương IX: Đôi điều về ADO.NET - + 2 25226223 2ESEEEEE2EEEEEEEEEEEEEErErrrrrrrrrreee 50 L Tổng Quan — ADO.NE:T - G1113 S3 v11 1211111131111 111111 Eerree 50
bi“ on 51
XII Cac dc diém ctla ADO.NET 0 eeseessesseessesseseseesneesecsneesecsneesecenecusesseeneesneeneees 53
1 Interoperability — Tương tác giữa nhiều hệ thống khác nhau - 53 2 Scalability - H6 tro nhiéu ngwoi dng es eeeeceseseceeesesscesssarsessseeeens 53 3 Productivity - Mở rộng khả năng làm việc với CSDL << <<<s<2 54 4 Performarnce - Hiệu quả cao trong xử lý dữ liệu - -« «<< «<< s2 54 XIII Déi twong Str ly dit LAW ccs ccscscscsescecscssssssesesssesessscsvscscseevenseevenes 55 1 PB 55 2 DataTable An 4 ố.ố.ố 56 3 B11: i0 56 4 Rang DUGC QUaN HE 56 5 Bái 7 57 XIV Đối tượng thao tác dữ liệu - - E33 SE E1 5111115115111 1E xe 57 1 000v 0117 +3 e 57 2 0ì 0 ˆ - ẢẢ.ẢẢ.Ả 58 3 01 .ố.ốốỐồỐ 58
4 ID, 0 0210022000000 044 AAAAAAAAA ANH 58
Chương X: Một số đối tượng cơ bản trong ADO.NETT 5-5 +scx+Ecxcx xxx: 59
I CONNECTION 05 4 59
1 B84 32011 45 60
Trang 34 Các phương thức trên ConnecCf1OTI - - + + + + + + + + + ++++s+vxxveeeeexeerrerrerrers 62
5 Minh hoa tao Comme ction .ccccccecccccsesceceneccceeecsceececseeusececeseeseueeseeenesenenes 62
KV COMMANA nh ae 4 63
1 Tao Command .ccccccceesseeccccccceccseeessceeccsceesesuseseseesseceessceeuseescessesseueaeeseess 63 2 Các thuộc tính của Command - 5555 +21 E2 £xkesssseres 64
3 2i 7 64
4 Các thuộc tính của Pararmeterr - - - - + c=- s1 ss ve, 65 5 Tạo Parameter với CreateParameter của Commmand - - - - - 65
6 Thurc hién Command .cccccccccesseccccnsesseecceseussecceseuesecceceueecccsensanecesensageeeees 66 XVI DataReader HH nọ kh 67 1 Các thuộc tính của Dataleader 55 << S211 1E xa 67 2 Các phương thức của DataReader - - - - - << sgk 67
` 4i 019,7 67
1 IV 87.0: 68
2 Các thuộc tính chính của DataAdapt€T - - - - 5 + S5 Ăn veerrrrrrrrere 69
3 Ê 10010 cài: 5ã0ì 88-77200020 69
4 Tạo bộ lệnh cập nhật cho DataAdapter: - 22222331111 s 71 XVII M6 Hinh xu ly di liệu trên ADO.NETẺ - - G < ch re, 73 1 Đối tượng BindingCOnteX - - - - E33 E E3 5151115 151721 ce 73 2 Đối tượng CurrencyManager - cành 74
Chương XI: Mô hình đa 2 75
I Mô hình đa tầng (N-tier) - - xxx T H111 Exce 75 XIX Xây dựng lớp xử lý lưu trữ - - << G SH HH ve 75 XX Lớp xử lý lưu trữ - Các khai báo - 99 rh 75 XXI Minh hoạ Mô hình đa tầng . - - E23 SE E111 1E rkred 76 PHAN IV: BAO BIEU CRYSTAL REPORT .c.scsssssessessessessessessessecsecsecsecsecsecseeseaseaneaneaes 78
I €/080ï5i00a/318.4 1111 .ẢẢ 78
II Tạo báo DiGU ooo eeeccecccceccececcececcecssceccccscescscsecsceecscsecsececacescacccacsavaceecaceecaceseacers 79
1 Nguồn đữ liệu cho báo biỀU - ¿G55 5 S233 +EvESE2EEEEExvxxrkrkerrrrrrerees 79
2 Sử dụng Crystal Report Viewer đề hiển thị báo biểu - - ©5555 5s+sa S0 3 Nguồn đữ liệu cho báo biểu từ DataSet - + + +5 ccttttererekeeerred 81 4 Lee dit 1i@u 40 DIGU oe eececceesesssessessessessessescsessessecsessessecsecsecaeeneenecneeneeneenee 85
I0 .ủỗẽố¿ n - 86
J5-0)800809:1019)/69:1)170023 88 I 4:009100:7 109) 117 88 Il MƠ HÌNH QUAN HỄ - + SE SE SE EEEEEEEEEEEEEEE11 11111111 ck nh rưu 88
II FORM HIẾN THỊ, 2-5: St 2+ vEEESEvEEEEkeEterrrkrrterrrrrrerrrrke 89
Trang 4PHAN I: CÁC ĐẶC DIEM DU LIEU
CHUONG I: Các kiểu dữ liệu I Các kiêu dữ liệu và đặc điềm
1.Đặc điểm các kiểu dữ liệu trong Net Platform
Các kiêu dữ liệu mặc nhiên phát sinh từ lớp SysTem.Object
Ngoài các phương thức kế thừa từ lớp SysTem.Oject, các biến kiểu dữ liệu còn có các
phương thức và thuộc tính đặc thù
Các phương thức chung kế thừa từ SysTem.Object e Equals: Hỗ trợ việc so sánh giữa hai object
e Finalize: Thực hiện các thao tác xóa bỏ trước khi obJect được tự động xóa bỏ
e GetHashCode: Phát sinh một số tương ứng với giá trị của object e GetType: Trả về kiểu của object
e ToString: Tao ra chuỗi chứa nội dung mô tả một thể hiện của lớp
Dưới đây là các bảng liệt kê những phương thức và thuộc tính đặc thù của các kiểu đữ liệu Do các phương thức có nhiêu cách sử dụng khác nhau, nên trong các phân nói về phương thức chỉ mô tả công dụng Cân tham khảo thêm trong MSDN đê hiệu rõ cách dùng 2.Kiéu String Thuộc tính Mô tả
Chars(1) Trả về ky ty tai vi tri chỉ ra trong biến Thuộc tính có tính chỉ đọc Length Trả về số ký tự trong biến
Phương thức Mô tả
Clone Trả về một tham chiếu của biến
Compare Phương thức so sánh hai tham số kiểu String dua vao thir tu cdc ky tu theo ngôn ngữ qui dinh trong Regional Settings của từng ký tự và trả về:
w-1 khi chuỗi thứ 1 nhỏ hơn chuỗi thứ 2 w0 khi chuôi thứ 1 băng chuôi thứ ] wl] khi chuõi thứ 1 lớn hơn chuỗi thứ 2
Trang 5
Concat Nối các tham số lại với nhau và trả về chuỗi nói
Copy Tạo một thê hiện mới kiểu String co giá trị như tham số chuỗi truyền vào
CopyTo Sao chép một sé ký tự chỉ ra từ một vị trí trên biến vào một vị trí chỉ ra trên
mảng ký tự với sô lượng ký tự truyên vào
EndsWith Trả về True/False cho biết các ký tự cuối của biến có khớp với chuỗi chỉ ra không
Format Thay thế phần biểu thức định dạng trong chuỗi bằng các các giá trị tương ứng đã được định dạng theo biêu thức
IndexOf Trả về vị trí đầu tiên tìm thấy chuỗi hoặc ký tự truyền vào trên biến, ; có thê sử dụng thêm vị trí băt đâu tìm, trả về vị trí lân tìm thây thứ mây
IndexOfAny Trả về vi tri tim thay dau tién trén bién bat ky ky ty nao trong mảng ký tự truyền vào; có thể sử dụng thêm vị trí bắt đầu tim, trả về vị trí lan tim thay thứ mây
Insert Chèn vào một giá trị String truyền vào tại vị trí chỉ định trên biến
Join Nối các phần tử của mảng String truyền vào thành một chuỗi duy nhất với dâu nôi là chuôi dâu ngăn cách chỉ ra (separator)
LastIndexOf Trả về vị trí tìm thấy cuối cùng trên biến, chuỗi hoặc ký tự truyền vào; có thê sử dụng thêm vị trí bắt đầu tìm, trả vê vị trí lân tìm thây thứ mây
LastIndexOfAny | Tra về vị tri tim thay cuối cùng trên biến bất kỳ ký tự nào trong mảng ký tự truyền vào; có thể sử dụng thêm vị trí bắt đầu tìm, trả về vị trí lan tim thay thứ mây
PadLeft Nối thêm bên trái ky tự truyền vào với số lần sao cho độ đài tổng cộng bằng độ dài chỉ ra Nêu độ dài tông cộng chỉ ra nhỏ hơn độ dài của biên, không
ký tự nào được thêm vào
PadRight Nối thêm bên phải ký tự truyền vào với số lần sao cho độ dài tổng cộng băng độ dài chỉ ra Nêu độ dài tông cộng chỉ ra nhỏ hơn độ dài của biên, không ký tự nào được thêm vào
Remove Xóa bỏ một số ký tự chỉ ra khỏi biến từ vị trí truyền vào
Replace Thay thế tất cả ký tự hay chuỗi tìm thấy trên biến bằng ký tự hay chuỗi truyên vào
Split Trả về một mảng String với các phần tử chứa các chuỗi con được ngắt ra từ biến tùy theo ký tự ngăn cách truyền vào
StartsWith Cho biết trị bắt đầu của biến có khớp với chuỗi truyền vào
Substring Trả về một chuỗi con từ biến
ToLower Trả về bản sao của biến với các ký tự in thường ToUpper Trả về bản sao của biến với các ký tự in HOA
Trim Trả về biến đã loại bỏ tất cả các ký tự từ đầu đến cuối của biến khớp với mảng ký tự truyền vào
Trang 6
TrimEnd Tra vé biến đã loại bỏ tất cả các ký tự từ vị trí cuối của biễn khớp với mảng ký tự truyền vào TrimStart Trả về biến đã loại bỏ tất cả các ký tự từ vị trí đầu của biến khớp với mảng ký tự truyền vào 3.Kiéu DateTime Field M6 ta
MaxValue Hién thi gid tri lon nhat cua kiéu DateTime (chi doc) MinValue Hién thi gid tri nhé nhat ctia kiéu DateTime (chi doc)
Thuộc tính Mô tả
Date Trả về giá trị ngày tháng năm của biến Day Trả về giá trị ngày trong tháng của biến
DayOfWeek Trả về giá trị ngày trong tuần của biến, với ngày đầu tiên là Chủ nhật có giá trị là 0
DayOfYear Trả về giá trị ngày trong năm của biến Hour Trả về giá trị giờ của biến
Millisecond Trả về giá trị phần ngàn giây của biến Minute Trả về giá trị phút của biến
Month Tra vé tháng của biến
Now Trả về giá trị ngày giờ hiện hành của hệ thống Second Trả về giá trị giây của biến
TimeOfDay Trả về giá trị giờ phút giây của biến Today Trả về ngày hiện hành
Year Trả về năm của biến
Phương thức Mô tả
AddDays Thêm số ngày truyền vào cho giá trị của biến AddHours Thêm số giờ truyền vào cho giá trị của biến
AddMilliseconds Thêm số phần ngàn giây truyền vào cho giá trị của biến AddMinutes Thêm số phút truyền vào cho giá trị của biến
AddMonths Thêm số tháng truyền vào cho giá trị của biến
KCT - CNPM B K44-CNTT— GTVT 6
Trang 7
AddSeconds Thêm số giây truyền vào cho giá trị của biến AddYears Thêm số năm truyền vào cho giá trị của biến
Compare So sánh hai biến ngày giờ và cho biết biễn nào lớn hơn CompareTo So sánh biến với một tham số Object DaysInMonth Cho biết số ngày trong tháng theo tham số tháng, năm truyền vào IsLeapY ear Cho biết giá trị năm truyền vào (dạng yyyy) có phải là năm nhuận hay không
Subtract Trừ một giá trị thời gian khỏi biến
ToLongDateString | Chuyến giá trị biến ra định dạng Long Date ToLongTimeString | Chuyên giá trị biến ra định dạng Long Time ToShortDateString | Chuyến giá trị biến ra định dang Short Date ToShortTimeString | Chuyến giá trị biến ra định đạng Short Time ToString Trả về chuỗi trị của biến theo định dạng truyền vào 4.Kiéu NumBer Phần này nói chung cho các kiểu số Byte, Short, Integer, Long, Single, Double, Decimal Field Mô tả
MaxValue Hiển thị giá trị lớn nhất của kiểu (chi đọc) MinValue Hiển thị giá trị nhỏ nhất của kiểu (chỉ đọc)
Ngoại trừ kiểu String, các kiêu khác khi muôn chuyên sang kiểu chuỗi đều có thể dùng phương thức ToString (kê thừa từ lớp ObJect) đề chuyên đôi và định dạng cùng lúc
Cú pháp sử dụng: ToString()
ToString(<biéu thirc dinh dang>)
Dưới đây là bảng biểu thức định dạng Biểu thức | Ý nghĩa Ví dụ
c, C Dinh dang tiénté |12345.67 ToString(“C”) hiển thị $ 12,345.67
cE pian dạng sô khoa 15345 67 ToString(“E”) hién thi 1.234567E+0004 f,F Định dạng cố định |12345.67 ToString(“F”) hiển thị 12345.67 (với 2 số lẻ)
g,G Dinh dang tong quat 12345.67 ToString(“G”) hién thi 12345.67 ti theo gia
trị có thê hiện thị dưới dạng E hoặc F
n, N Dinh dang sé 12345.67 ToString(“N”) hién thi 12,345.67
p, P Dinh dang phan tram] 0.45 ToString(“P”) hiển thị 45 %
KCT - CNPM B K44-CNTT— GTVT 7
Trang 8
x, X Định dạng Thập lục | 559 ToString(“X”) hién thi FA phan
Ngoài ra chúng ta cũng có thê sử dụng các ký tự sau đây dé lap biểu thức định dạng
Ký tự Ý nghĩa Kết quả
0 Số không giữ chỗ |123 ToString(“0000”) hiển thị 0123 # Số bất kỳ giữ chỗ =: | 123 ToString(“####”) hién thi 123
Dấu phần lẻ 123 ToString(“4##t.00”) hiển thị 123.00
Dấu chia cụm ba số |12345 ToString(“#,###) hiến thị 12,345
% Dau phan trim 0.45 ToString(“# %”) hién thi 45 %
E+0,B- |Dấu hiển thị số khoa | 12345678 ToString(“#.#######E:+000”) hiển thị
ee hoc 1.2345678E+007
\ Ky ty literal 123456 ToString(“^# #,###”) hién thi # 123,456 ; Ký tự Ký tự ngăn cách Với ToString(“dương #,###;âm #,###; số không”)
ngăn cách |vùng -123456 hiển thị âm 123,456
vung 0 hién thi số không H Các kiểu dữ liệu nội tại của VB.NET gồm:
Kiu KiểuCLR Vùngnhớ Type Miền giá trị
VB.Net System.x (Byte) Code
Boolean | Boolean 2 3 True hoac False
Byte Byte 1 6 0 đến 255 (không dấu)
Char Char 2 4 0 đến 65535 (không dấu)
DateTime | DateTime 8 16 0:00:00 ngay 01 thang Giéng 0001 dén 23:59:59 ngay 31 thang Muoi Hai 9999 Decimal | Decimal 16 15 0 đến +/-79,228,162,5 14,264, 337,593,543,950,335 nêu không có sô lẻ; 0 đên +/-7.9228162514264337 593543950335 với 28 sô lẻ; sô nhỏ nhật khác không là +/- 0.0000000000000000000000000001 (+/- 1E-28)
Double Double 8 14 -1.797693 13486231570E+308 dén -
4.94065645841246544E -324 đôi với sô am; 4.94065645841246544E-324 dén 1.797693 13486231570E +308 với sô
Trang 9
dương Integer Int32 4 9 -2,147,483,648 dén 2,147,483,647 Long Int64 8 11 -9,223,372,036,854,775,808 dén 9,223,372,036,854,775,807
Object Object 4 Bat ky kiểu dữ liệu nào có thê chứa trong
(Class) biên kiêu ObJect
Short Int16 2 7 -32,768 dén 32,767
Single Single 4 13 -3.4028235E+38 đến -1.401298E-45 với
số âm; 1.401298E-45 đến 3.4028235E+38
với sô dương String String 8 0 dén khoang 2 ty ky tu Unicode (Class)
User- (kế thừa từ Mỗi thành phần của Structure có miễn giá Defined ValueT ype) trị theo kiêu dữ liệu của thành phân
Type
Khi khai báo một kiểu đữ liệu cơ bản, không hắn biến sẽ sử đụng vùng nhớ như yêu cầu lưu trữ Ví dụ, mảng cần thêm vùng nhớ cho chính bản thân mảng cũng như cho mỗi chiều (dimension) Mỗi biến Object tham chiếu đến một thành phần hoặc một kiểu hỗn hợp sử dụng 4 byte vùng nhớ ngoài số vùng nhớ cần dùng cho kiểu đữ liệu chứa trong nó
Ill Biến - Tính chất, Khai báo và khởi tạo
1.Tinh Chat
Biến là một thực thể với 6 tính chất sau:
Name: Tên của biến
e Address: Địa chỉ vùng nhớ nơi lưu giữ giá trị của biến Trong chu kỳ trình sống, địa chỉ của biên có thê thay đôi
e Type: Kiếu của biến, còn gọi là kiểu dữ liệu e Value: Giá trị của biến
e Scope: Phạm vi sử dụng của biến
Mỗi biến có một pham vi sử dụng là phạm vị trong chương trình nơi biến được nhìn nhận đối với câu lệnh
‘Pham vi khối lệnh và phạm vi thu tục
Khi biến được khai báo trong một khối lệnh (tập hợp các từ khóa kết thúc bằng End , Loop, Next), biên có phạm vi sử dụng trong khôi lệnh
Vĩ dụ:
Trang 10Ifx <> 0 then Dim a as Integer a=I/x End If MsgBox CStr(a))
Doan lệnh trên sẽ gây lỗi tại dòng MsgBox CStr(a)) vì biến a chỉ có phạm vi sử dụng trong khô! lệnh If End If
Khi biến được khai báo trong một thủ tục nhưng không trong một khối lệnh, biến sẽ có phạm
vi sử dụng trong toàn thủ tục
Biến có phạm vi khối lệnh và phạm vi thủ tục là biến cục bộ ‘Pham vi module va pham vi project
Có những khác biệt trong phạm vị sử dụng đối với các biến khai báo chung trong Module chuẩn (Standard module) và Lớp (Class module) Trước tiên, chúng ta cân lưu ý rằng bản thân Module chuẩn duoc khai bao voi mét trong ba tir khéa sau: Public, Friend va Private (mac dinh)
Tùy theo từ khóa mà phạm vi sử dụng của các thành phần trong module bị giới hạn Ví dụ một biên Public khai bao trong mét module Friend sé c6 pham vi su dung Friend
- Truy xuất Private: nếu biến được khai báo trên phần Declaration của module với từ khóa Private sé chi có pham vi su dung trong module
- Truy xuất Friend: nếu biến được khai báo trên phần Declaration của module với từ khóa Friend sẽ có phạm vi sử dụng trong toàn proJect Các proJect khác không thê sử dụng biên này
- Truy xuất Public: néu bién được khai báo trên phần Declaration của module với từ khóa Public sẽ có phạm vi sử dụng trong toàn project và trong bắt kỳ project nào bên ngoài có một tham chiếu (reference) đến project đó
tLifeTime: thời gian tồn tại của biến Trong khi phạm vi sử dụng của biến xác định nơi
chôn biên được phép sử dụng, thì thời gian tôn tại của biên xác định khi nào biên được sử
dụng
2.Khai báo v à khởi tạo
Lệnh khai báo biến là cú pháp kết hợp tên biến và kiểu dữ liệu Tự thân lệnh này không hàm y tao biến Tuy nhiên, với các biến không phải kiểu đối tượng, lệnh khai báo biến cũng chính là lệnh tạo biến
Dim x as Integer
Đề nhắn mạnh vai trò của hàm tạo (constructor), chúng ta có thê viết:
Dim x as Integer = New Integer()
Khi khai báo nhiêu biên trên cùng dòng và không chỉ ra kiêu của biên, biên sé
Trang 11
lấy kiêu đữ liệu của biến khai báo dữ liệu tường minh tiếp sau đó
Dim x as Integer, a, b, c as Long
Cac bién a, b, c déu cùng có kiểu Long
Có thể khai báo và khởi tạo giá trị cho biến cùng lúc: Dim x as Integer = 100, y as Integer = 200
Trong cách này, phải khai báo tường minh kiểu dữ liệu cho từng biến Với các biến kiểu đối tượng, cách khai báo cũng như thé
Dim objA as MyClass
Lệnh trên chưa tạo ra biến đối tượng và sau dòng lệnh, objA vẫn là Nothing Những cách sau đây sẽ khai báo và tạo biến đối tượng:
Dim objA as New MyClass()
hoac
Dim objA as MyClass = New MyClass()
hoac
Dim objA as MyClass objA = New MyClass() Cac từ khóa đê khai báo biên Từ khóa Mô tả
Public Su dung toan cuc
Private Sử dụng cục bộ trong phạm vi khai bảo như Dim
Friend Sử dụng trong phạm vi của project
Protected Sử dụng trong phạm vi của lớp và các lớp con Protected Friend Sử dụng trong phạm vi của Proctected và Friend
Kiểu trị và tham chiéu (Value Type va Reference Type)
Các kiêu được định nghĩa trong Common Type System thuộc ba loại sau: e Kiéu tri (Value Type)
e Kiéu tham chiéu (Reference Type) e Kiểu con tré (Pointer Type)
VB.Net khéng co kiêu con trỏ nên chúng ta chỉ xem xét kiêu trị và kiêu tham chiêu
Khi một biến kiểu trị được khai báo, một vùng nhớ được dành riêng để chứa giá trị thực của
biên Ngược lại, khi một biên kiêu tham chiêu được khai báo, trình biên dịch sẽ tạo đôi tượng
trên vùng nhớ, nhưng sẽ gán cho biên bôn byte chứa địa chỉ của đôi tượng Tóm lại, biên kiêu trị chứa giá trị của biên còn biên kiêu tham chiêu chỉ đên nơi chứa giá trỊ
KCT - CNPM B K44-CNTT— GTVT
Trang 12Sự khác biệt này dẫn đến nhiều hệ quả mà phép gán là một Để minh họa chúng ta xem Class sau với một thuộc tính:
Vidu:
Public Class Nguoi Public tuoi as Short End Class Và kiểu Structure cũng có một thuộc tính: Structure ConNguoi Public tuoi as Short End Structure
Class 1a kiéu tham chiéu trong khi Structure là kiểu trị Hãy xem xét đoạn lệnh sau: Dim Ngl, Ng2 as Nguoi Dim CNgl, CNg2 as ConNguoi Ngl = New Neguoi() Negl.tuoi = 30 Ng2 = Ngl Ng2.fuoi = 20
Debug WriteLine(Ng1.tuoi) ' xuất ra 20 Debug WriteLine(Ng2.fuoi) ' xuất ra 20
CNg] = New ConNguoiQ CNel.tuoi = 30
CNg2 = CNegl CNg2.fuoi = 20
Debug WriteLine(CNg1.tuoi)' xuất ra 30 Debug WriteLine(CNg2.tuoi)' xuất ra 20
Khi được gán cho nhau, hai biến tham chiếu Ng1, Ng2 cùng chứa địa chỉ trỏ đến một đối tượng Vì vậy thay đối giá trị của thuộc tính tuoi trên biến này, thay đổi cũng phản ánh trên biến kia
Ngược lại, khi được gán cho nhau, biến tham trị sẽ tạo nên một vùng nhớ chứa trị mới, hai
biên trị CNg1, CNg2 cùng chứa trị như nhau nhưng trên hai vùng nhớ khác nhau Do đó, gia tri cua thuộc tính tuoi của hai biên được chứa trên hai vùng nhớ và độc lập nhau
Chú ý: Kiểu String cũng là kiểu tham chiếu nhưng có một số đặc tính của kiểu trị Chúng ta xét đoạn lệnh sau:
Vĩ dụ:
Dim chl, ch2 as String
Trang 13ch2 = chỉ
ch2 = "Chuỗi 2"
MsgBox(chl) ' xuất ra Chuỗi 1
Chúng ta nghĩ rằng chl chứa "Chuỗi 2", nhưng chl lại chứa "Chuỗi 1" Lý do như sau: khi biến kiểu String đã được tạo ra, giá trị của chúng không thê sửa đổi Sửa đổi trị của biến
String là tạo ra một thê hiện mới chứa nội dung sửa đôi Do vậy:
+ Khi gán ch2 = ch1, ch2 trỏ đến cùng một chuỗi như chl
+ Nhưng khi gán ch2 = "Chuỗi 2" do không thé thay d6i giá trị nên ch2 trỏ đến một thể hiện mới khác với ch]
3 Mang & Structure
a) Mang
Máng là tập hợp các biến có cùng kiểu dữ liệu, cùng tên nhưng có chỉ số khác nhau Trong VB.Net, mang có chỉ số bắt đầu là 0 và luôn luôn là mảng động Không như trong VBó, với VB.Net chúng ta không được dùng từ khóa Redim đề khai báo mảng nhưng chỉ được dùng để định lại kích thước mảng Chúng ta có các cách khai báo mảng như sau:
Khai báo không khởi tạo kích thước và giá trị: Dim a() as Integer
hoac
Dim a as Integer()
Khai báo có khởi tạo kích thước nhưng không khởi tạo giá trị ban đầu: Dim a(6) as Integer
Khai báo có khởi tạo kích thước và khởi tạo gia tri ban đầu:
Dim a() as Integer = {1,2,3,4,5,6,7}
hoac
Dim a() as Integer = New Integer(6){1,2,3,4,5,6,7}
hoac
Dim a() as Integer = New Integer(6){}
Chủ ý: Khi dấu ƒ } rông, các phần tử có giá trì khởi tạo là giá trị mặc định của kiểu đữ liệu
Mang có kiêu tham chiêu nên khi gán hai biên mảng cho nhau, biên được gán sẽ là một tham chiêu đên máng bên phải toán tử =, khác với trong VBó, là tạo ra một mảng mới có sô phân tử mang trỊ giông nhau
Trang 14Mang thuộc lớp System Array nên có các thuộc tính và phương thức của lớp này Sau đây là một sô thuộc tính và phương thức đáng chú ý: Thuộc tính | Mô tả Length Số phần tử của mảng Rank Số chiều của mảng Phương thức Mô tả
BinarySearch Tìm kiếm trên mảng một chiều đã được sắp xếp giá trị truyền vào, sử dụng thuật giải tìm kiêm nhị phân
Clear Gán các phần tử trong dãy chỉ ra bằng giá trị mặc định của kiểu dữ liệu các phân tử
Clone Trả về bản sao cạn (shallow copy) của mảng Bản sao này chỉ sao chép kiểu trị và kiểu tham chiếu nhưng không sao chép các đối tượng được tham chiếu đến
Copy Sao chép một phần của mảng vào mảng khác và thực hiện chuyển đôi kiêu nêu cân
CopyTo Sao chép toàn bộ các phần tử của mảng một chiều vào mảng một chiêu được truyên vào bắt đâu từ vị trí chỉ ra
GetLength Trả về số phần tử của một chiều được chỉ ra trên mảng GetLowerBound | Trả về chỉ số nhỏ nhất của một chiều được chỉ ra trên mảng GetUpperBound | Trả về chỉ số lớn nhất của một chiều được chỉ ra trên mảng GetValue Trả về trị của một phần tử chỉ ra trên mảng
IndexOf Trả về chỉ số của phần tử đầu tiên trên máng một chiều (hoặc trên một vùng của mảng) trùng với giá trị truyền vào
LastIndexOf Trả về chỉ số của phần tử cuối cùng trên mảng một chiều (hoặc trên một vùng của mang) trùng với giá trị truyền vào
Reverse Đảo ngược thứ tự các phần tử trên mảng một chiều hoặc trên một phân của mảng
SetValue Gán trị cho một phần tử chỉ ra trên mảng Sort Sắp xếp các phần tử trong mảng một chiều
b) Structure
Trang 15
[Public|Private|Protected] Structure <tén strucure>
{Dim|Public|Private|Friend}<tén thanh phan> As <kiéu dữ liệu>
{Dim|Public|Private|Friend}<tén thanh phan N> As <kiéu dir liéu>
End Structure
Với Structure, chúng ta được phép khai báo các phương thức Sau đây là các đặc điểm của Structure:
-Có các thành phần, kê cả bộ khởi tạo, phương thức, thuộc tính, hằng, sự kiện
-Có thể cài đặt các lớp giao tiếp (Interface)
-Có thể có các bộ khởi tạo chung, có hoặc không có tham SỐ
-Structure là kiểu trị
-Tất cả các thành phan cua Structure mac dinh la Public
- Các thành phần của Structure không được khai báo với từ khóa Protected -Structure không thể kế thừa
Mỗi Structure có một bộ khởi tạo mặc nhiên không tham số ban đầu Bộ khởi tạo này sẽ khởi tạo mọi thành phân đữ liệu của Structure với giá trị mặc định của chúng Chúng ta không thê
định nghĩa lại chức năng nay
Vi Structure là kiêu trị, nên môi biên Structure luôn luôn găn liên với một thê hiện Structure 4 Các Toán Tử e Toán Tử Toán Học Toán tử Mô tả + (cộng) - (trix) * (nhân) / (chia)
\ (chia lẫy phần nguyên)
Mod chia lây phần dư của số nguyên A (lũy thừa)
e Toán Tử Nơi chuỗi
Tốn tử chí dành cho toán hạng kiểu String với hai toán tử là & (ampersand) và + (cộng) Kết quả là một trị String gồm các ký tự của toán hạng thứ nhất tiếp theo sau là các ký tự của toán hạng thứ hai
Trang 16e Toán Tử Gán Toán tử Mơ tả Gán tốn hạng thứ hai cho toán hạng thứ nhất Cộng hoặc nơi chi tốn hạng sau vào toán hạng đâu và gán kêt quả cho toán hạng đâu Trừ toán hạng sau khỏi toán hạng đầu và gán hiệu cho toán hạng đầu Nhân hai toán hạng với nhau và gán tích cho toán hạng đầu Chia toán hạng đầu cho toán hạng sau và gắn thương cho toán hạng đầu Thực hiện phép toán \ giữa toán hạng đầu và toán hạng sau và gán kết quả cho toán hạng đầu Tính lũy thừa toán hạng đầu với số mũ là toán hạng sau và gán kết quả cho toán hạng đầu Nơi chi tốn hạng sau vào toán hạng đâu và gán kêt quả cho toán hạng đầu e Toán Tử So Sánh Tốn tử Mơ tả Bằng Lớn hơn hoặc bằng Nhỏ hơn hoặc bằng Lớn hơn Nhỏ hơn <> Khác
TypeOf Is | So sánh kiểu của biến kiểu tham chiếu thứ nhất có trùng kiểu trên toán hạng thứ hai, nêu trùng trả vê True, ngược lại False
ls Toán tử dành cho toán hạng kiểu tham chiếu, trả về True nếu hai toán hạng cùng tham chiêu đên một đôi tượng, ngược lại là False)
Like Toán tử đành cho toán hạng kiểu String, trả về True nếu toán hạng thứ nhât trùng với mâu (pattern) của toán hạng thứ hai, ngược lại là False
e Toán Tử Lý Luận và Bitwise
Toán tử luận lý trả về giá trị True/False
Tốn tử Mơ tả
Not Trả về giá trị ngược lại của toán hạng
Trang 17
không kiêm tra toán hạng thứ hai và trả về False
Or Trả về False (0) khi và chỉ khi hai toán hạng cùng là False (0)
OrElse Tra về giá trị như Or nhưng khi toán hạng thứ nhất là True (1) sẽ khơng kiêm tra tốn hạng thứ hai và trả vê True
Xor Trả về True (1) khi và chỉ khi có 1 toán hạng là True (1) CHUONG II: Cấu trúc câu lệnh I Câu Trúc Chọn 1 If Then Else Trước tiên, chúng ta làm quen với cấu trúc If Then End If Cú pháp If <diéu kiện> Then ' Các câu lệnh End if
Sử dụng cú pháp này, người lập trình muon khai báo với trình biên dịch rằng các câu lệnh trong vung If End If chi duoc thực hiện nêu như <điêu kiện> là đúng
<điều kiện> có thê là biểu thức trả về giá trị True/False hoặc là một giá trị số Giá trị số <> 0 tương ứng với True, ngược lại là False
Cấu trúc If Then End If còn thiếu sót vì đôi khi chúng ta muốn thực hiện các câu lệnh khác khi điêu kiện không đúng Lúc này, chúng ta sử dụng câu trúc sau:
Cú pháp
If<điều kiện> Then
' Các lệnh sẽ thực hiện nếu điều kiện đúng
End If
IfNot <điều kiện> Then
' Các lệnh sẽ thực hiện nếu điều kiện sai
End If
Đề thay thế cách viết trên, chúng ta có cầu trúc sau:
If<điều kiện> Then
Trang 18If<điều kiện 1> Then Elself <điều kiện 2> Then Elself <điều kiện n> Then Else End If Ghi chú: Các mệnh đề If Then Else có thể lồng nhau 2 Select Case Khi có nhiều trường hợp cần xét, có thể sử dụng cấu trúc chọn Select Case với cú pháp:
Select Case <biéu thtrc>
Case <gia tri 1>
' Các lệnh thực hiện khi <biễu thức> = <giá trị 1> Case <gia trị 2> Cú pháp ' Các lệnh thực hiện khi <biêu thức> = <giá trị 2> Case Else ' Các lệnh thực hiện khi <biễu thức> không bằng giá trị nào ở trên End Select
Khối lệnh Case Else có thê không cân viết Tuy nhiên, người lập trình được khuyến khích dùng khối lệnh này trong cấu trúc để giảm bớt các lỗi logic
Các giá trị dùng để so sánh có thể gồm nhiều giá trị phân biệt bởi dau phay (,) hoặc là một phân của biêu thức so sánh
IV Cau Trúc Lặp
Trang 19Các câu lệnh trong vùng For Next chỉ được thực hiện nêu <biên đêm> có giá trỊ trong đoạn [<giá trị đâu>, <giá trị cuôi>]
Sau mỗi lần thực hiện, <biên đếm> sẽ được tăng thêm <bước> Nếu không chỉ định, <bước>
có gia tri là 1
Nêu <bước> có trị > 0, cau trúc chỉ thực hiện khi <giá trị đầu> <= <giá trị cudi>
Nêu <bước> có trị < 0, câu trúc chỉ thực hiện khi <gia tri dau> >= <gia tri cudi>
2 For Each Next For Each <phan tir> In <tap hop> Cu phap ' Các câu lệnh Next [phần tử]
Với cú pháp này, chương trình sẽ duyệt qua từng phần tử trong tập hợp đang duyệt
Cần khai báo biến <phần tử> là kiểu của phần tử trong tập hợp đang duyệt Chúng ta có thể châm dứt lặp khi đang giữa vòng lặp băng lệnh ExIt For 3 Do While Loop Do While <biễu thức logic> Cú pháp Các câu lệnh Loop
Với cú pháp này, các câu lệnh đặt trong vùng Do While Loop chỉ thực hiện bao lâu <biéu
thirc logic> có gia tri True
Sau mỗi lần thực hiện các câu lệnh trong ving Do While Loop, <biéu thức logic> sẽ được
kiêm tra lại:
oNếu trị True, thực hiện lại vòng lặp
oNếu trị False, cham dứt vòng lặp
Cầu trúc này kiểm tra <biễu thức logic> trước khi thực hiện các lệnh nên sẽ không thực hiện lân nào nêu ngay lân đầu tiên <biêu thức logic> co tri False 4 Do Loop While Do Cú pháp Các câu lệnh Loop While <biễu thức logic>
Tương tự Do While Loop, các câu lệnh chỉ tiếp tục thực hiện khi <biễu thức logic> có giá tri True va sẽ kiêm tra lại <biêu thức logIc> sau môi lân thực hiện
Trang 20Do kiêm tra sau khi thực hiện nên nêu ngay lân đâu <biêu thức logic> có trị False, cac lệnh cũng được thực hiện một lân
Chúng ta có thê chấm dứt giữa chừng vòng lặp với lệnh Exit Do 5 Do Until Loop Do Untile <biéu thitc logic> Cu phap ' Các câu lệnh Loop 6 Do Loop Until Do Cu phap ' Các cầu lệnh Loop Until <biêu thức logic>
Hai cú pháp nầy tương tự hai cú pháp trên (Do While Loop, Do Loop While), với một khác biệt là chỉ thực hiện hoặc tiêp tục thực hiện khi <biểu thức logic> là False
7 While End While
Cú pháp khác so với trong các phiên bản trước (While Wend), cách sử dụng như Do While Loop
CHUONG III Thủ tục và hàm Và Sử lý Lỗi
I Thu Tuc Va ham
Thay đổi trong thủ tục và hàm
Tham số truyền cho hàm hoặc thủ tục mặc định là tham trị ByVal chứ không phải ByRef như trong VB6
Trang 21Function TESTFUNCTION(ByVal a As Short, ByVal c As Short) As Integer
' các lệnh
Return <gid tri tra vé> End Function
Có thê có nhiều hàm và thủ tục trùng tên nhau (Overloaded) miễn là số tham số hoặc kiểu đữ liệu tham sô khác nhau:
Vidu:
Function BinhPhuong(ByVal so As Integer) As Integer Return Convert ToInt32(so’2)
End Function
Function BinhPhuong(ByVal so As Double) As Double Return so’2
End Function
Trong VB6, néu tham sé truyền vào là thuộc tính của một đối tượng cho thủ tục kiểu ByRef,
những thay đôi trên tham sô đó trong thủ tục không phản ánh trên thuộc tính Ngược lại,
trong VB.NET, các thay đôi như vậy đêu thê hiện trên thuộc tính của đôi tượng
1 Khai bao Option Strict
Khai báo Option Stric( On|Off là một lệnh mới không cho phép các chuyên đổi kiểu làm mất dữ liệu Nhưng chúng ta có thê thực hiện các chuyển đổi mở rộng như chuyên biến kiểu Integer sang kiêu Long Khai báo này (khi bật On) sẽ không cho phép tự động chuyên đổi kiêu chuỗi sang kiểu sô hay ngược lại Vi du: Dim x As String, y As Integer 'x= y sẽ gây lỗi cú pháp ' nhưng phải dùng x = CStr(y) ' hoặc x= y.ToStrmg 2 — Chuỗi có độ dài cỗ định
Kiểu chuỗi có độ đài cố định trong VB6 không còn hỗ trợ trong VB.NET
3 Chỉ Thi #Region #End Region
Chi thi #Region #End Region được dùng dé đánh dẫu một khối lệnh có thể thu gon, gian ra trên cửa sô viêt lệnh
Trang 22#Region <chuỗi định danh> ' khối lệnh #End Region <chuỗi định danh>: bắt buộc, có giá trị kiểu String, là tiêu đề của khối lệnh Cú pháp Vidu:
#Region "Cac khai bao"
' Đưa vào các dòng lệnh khai báo #End Region
khi thu lai:
4 Imports Khong gian tén ( Namespase)
Mục đích của lệnh Imports là để đưa không gian tên hoặc Assembly vào trong Module cho việc tạo và sử dụng các lớp trong không gian tên hay Assembly đó ngăn gọn hơn
Imports [<bí danh> = ]<không gian tên> [.<thanh phan>]
<bí danh>: tùy chọn, kiểu String, la tên tắt của <Namespace> được sử
dụng trong tham chiếu trên Module, Class Nếu lệnh Imports không có phần bí danh, các thành phần định nghĩa trong không gian tên có số thê được truy cập mà không cân chỉ rõ Nếu có bí danh, bí danh phải
Cú pháp được sử dụng trong phần truy cập
<không gian tên>: bắt buộc, không gian tên sử dụng trong Module, Class
<thành phẩn>: tùy chọn, tên của một thành phần đã được khai báo trong không gian tên Nó có thê là dinh danh, structure, class
Chú ý
e Mỗi lệnh Imports chỉ được sử dụng với một không gian tên
e Mỗi Module có thể có nhiều dòng Imports
Trang 23End Sub End Class V Sử lý Lỗi
Trong VB.NET, chúng ta có thê gặp các loại lỗi sau: 1 Phân Loại Lỗi
a Lỗi Cú Pháp( Syntax Error) Lỗi cú pháp, còn gọi là lỗi trong lúc thiết kế Những lỗi này dễ chỉnh sửa vì VB.NET sẽ kiểm tra cú pháp khi ta đang nhập từ bàn phím nên sẽ báo lỗi tức thời khi ta gõ sai hoặc dùng một từ không thích hợp
Run-time error
Léi thực thi xảy ra khi chương trình đang thực thi Đây là những lỗi khó xác định hơn lỗi cú pháp Lôi thực thi có thê từ các lý do khác nhau như:
oMửở một tập tin không tồn tại
oTruy xuất một thư mục nhưng không có quyên trên đó oTruy xuất dữ liệu một bảng không tôn tại trong CSDL oChia cho số 0
oNhập chuỗi cho nơi cần nhập số hoặc ngược lại, v.v b Lỗi Logic
Lỗi luận lý cũng xảy ra khi chương trình đang thực thi và được thê hiện dưới những hình thức hay những kết quả không mong đợi Loại lỗi này thường do sai lầm trong thuật giải
2 Sử Lý Lỗi
Một lỗi xảy ra khi chương trình đang chạy gọi là một Exception Trong CLR, Exception là một đối tượng từ lớp System.Exception Chúng ta cần lưu ý một lỗi xảy ra trong lúc thực thi không làm treo chương trình, nhưng nếu không được xử lý sẽ làm treo chương trình CLR chỉ ra tình trạng lỗi qua lệnh Throw Lệnh này sẽ đưa ra một đối tượng kiểu System.Exception chứa thông tin về lỗi đang xảy ra
Trang 24Finally ' các lệnh thực hiện sau cùng End Try
Cau tric này cho phép chúng ta thử (Try) thực hiện một khối lệnh xem có gây lỗi không; nêu
có sé bay va xử lý (Catch) lỗi Cấu trúc này chia làm các khối sau:
O Khối Try: chứa các câu lệnh có khả năng gây lỗi
O Khôi Catch: các dòng lệnh để bẫy và xử lý lỗi phát sinh trên khối Try Khối này gồm một loạt các lệnh bắt đâu với từ khóa Catch, biên kiêu Exception ứng với một kiêu Exception muôn bây và các lệnh xử lý Dĩ nhiên, chúng ta có thê dùng một lệnh Catch cho các System.Exception, nhưng như thế sẽ không cung cấp thông tin đây đủ cho người dùng về lỗi đang xảy ra cũng như hướng dẫn cách xử lý cụ thể cho mỗi tình huống Ngoài những lỗi đã xử lý, có thể xảy ra những lỗi ngoài dự kiến, để xử lý các lỗi này, chúng ta nên đưa thêm một lệnh Catch để bẫy tất cả các trường hợp còn lại và xuất thông tin về lỗi xảy ra
O Khối Finally: là khối tùy chọn, sau khi chạy qua các khối Try và Catch nếu không có chỉ
định nào khác, khôi Finally sẽ được thực hiện bât kê có xảy ra lôi hay không
Cuối cùng, cấu trúc bẫy và xử lý lỗi chấm đứt với từ khóa End Try Cú pháp chung cho một cấu trúc xử lý lỗi như sau:
Try
' khối lệnh có thê gây lỗi
Catch <bién1> As <Kiéu Exception> [When <biéu thirc>] ' khối lệnh bẫy và xử lý lỗi
Trang 25Messagebox.Show( “Xin nhập số nguyên !”) End Try
Câu lệnh Catch có thê có nhiều cách sử dụng:
a.Bẫy Không có điều kiện
Dim d as Double, i as Integer Try ¡ = Clnt(InputBox(“Xin nhập một số nguyên ”)) d=42\i Catch Messagebox.Show(“Khéng thé chia") End Try b Bay voi diéu kién chung Exception Vi du: Dim d As Double, i As Integer Try ¡ = InputBox("Xin nhập một số nguyên ") d=42\i Catch ex As Exception MessageBox.Show("Khong thé chia") End Try
c Bay voi nhiing Exception đặc biệt
Các kiêu Exception đặc biệt thường gặp
Exception Xay ra khi
ArgumentException Tham số truyền không hợp lệ
DivideByZeroException Chương trình thực hiện phép chia một số cho số không OverFlowException Kết qua của một phép toán hoặc của một phép chuyên
đôi kiêu lớn hơn khả năng lưu giữ của biên
Trang 26của lớp NullReferenceException Chương trình đang cô truy xuất một đối tượng không tôn tại TypeUnloadException Chương trình truy xuất một lớp chưa được tải lên vùng nhớ d.Bẫy với điều khiến When Vidu: Dim d As Double, i As Integer Try ¡ = InputBox("Xin nhập một số nguyên ") d=42\i
Catch ex As Exception When i = 0
MessageBox.Show("Khéng thể chia cho số không") End Try
PHAN II: LAP TRINH HUONG DOI TUONG TRONG VB.NET
Trong thé giới thực, đối tượng là thực thể tồn tại như con người, xe, máy tính, v.v [rong
ngôn ngữ lập trình, đôi tượng có thê là màn hình, điêu khiên v.v
Lập trình hướng đối tượng là kiểu lập trình nhằm vào sự tương tác giữa các đối tượng Mỗi đối tượng có những thuộc tính xác định các đặc điểm, những phương thức xác định các chức năng của đối tượng Bên cạnh đó, đối tượng cũng có khả năng phát sinh các sự kiện khi thay đổi thuộc tính, thực hiện một phương thức hay bị đối tượng khác tác động vảo Tất cả những thuộc tính, phương thức và sự kiện tạo nên câu trúc của đối tượng Có bốn ý niệm trong Lập trình hướng đối tượng:
oAbstraction: Tính trừu tượng oEncapsulation: Tinh bao boc oInheritance: Tính kế thừa oPolymorphism: Tính đa hình
Mỗi ý niệm đều có vai trò quan trọng trong lập trình hướng đối tượng
VỊ Chương 4 :Các tính chất I Tinh triru tượng
Chúng ta thường lẫn lộn giữa lớp (Class) và đối tượng (Object) Cần phân biệt lớp là một ý niệm trừu tượng, còn đối tượng là một thể hiện của lớp
Vi du:
Trang 27Từ những đối tượng giống nhau, chúng ta có thể trừu tượng hóa thành một lớp đối tượng Tính trừu tượng cho phép chúng ta loại bỏ tính chất phức tạp của đối tượng bằng cách chỉ đưa ra các thuộc tính và phương thức cân thiệt của đôi tượng trong lập trình
II Tinh Bao Bọc
Tính bảo bọc nói lên khả năng thực hiện nhiệm vụ của đối tượng độc lập với lớp giao tiếp (mterface) của nó Chương trình tương tác với đối tượng thông qua lớp giao tiếp, gồm các thuộc tính và phương thức phô diễn ra bên ngoài Bao lâu lớp giao tiếp của đối tượng không thay đổi thì chương trình vẫn có khả năng tương tác với nó, cho dau cai dat (Implementation)
đã được viết lại hoàn toàn
Tính đóng gói cho phep ta dấu thông tin của đối tượng bằng cách kết hợp thông tin và các phương thức liên quan đến thông tin trong đối tượng
Vĩ dụ:
Xe hơi có các chức năng (phương thức phô diễn bên ngoài) như Ngừng, Chạy tới, Chạy lùi Đây là những gì cần thiết cho Tài xế khi tương tác với Xe hơi Xe hơi có thể có một đối tượng Động cơ nhưng Tài xế không cần phải quan tâm Tất cả những gì cần quan tâm là những chức năng để có thể vận hành xe Do đó, khi thay một Động cơ khác, Tài xế vẫn sử dụng các chức năng cũ để vận hành Xe hơi bao lâu các phương thức phô diễn bên ngồi (Interface) khơng bị thay đồi
II — Tính kế thừa
Tính kế thừa là khả năng cho phép ta xây dựng một lớp mới dựa trên các định nghĩa của một lớp đã có Lớp đã có gọi là lớp Cha, lớp mới phát sinh gọi là lớp Con và đương nhiên kế thừa tất cả các thành phần của lớp Cha, có thể mở rộng công năng các thành phần kế thừa cũng như bổ sung thêm các thành phần mới
Chúng ta phân biệt hai loại quan hệ: Là-một xe
Biểu thị tính kế thừa Trong quan hệ "là-một"”, một | đối
tượng của lớp Con được xem như là một đôi tượng | Xe hư của lớp Cha
Vi dụ: Từ lớp Xe ta tạo nên lớp Xe hơi mở rộng, lớp này mặc nhiên kế thừa tất cả các thành phán của lớp xe Ta có thê nói: một xe hơi là một chiếc xe
Có-một
Quan hệ này mang ý nghĩa gồm có Trong quan hệ "có-một”, một đối tượng có thể có một hoặc nhiều thành phân tham chiếu đến các đối tượng khác
Vị đụ: Khi lập mô hình loại xe hơi, bạn muốn diễn tả ÿ tưởng chiếc xe "có-một" tay Idi
Ching ta khong thé phat sinh lớp Xe hơi từ một Tay lái hay ngược lại (một Xe hơi "là-một" Tay lái lII) Thay vì vậy, chúng ta phải có hai lớp độc lập làm việc với nhau trong đó, lớp phía ngoài (lớp Xe hơi) sẽ tạo và phô diễn công năng của lớp phía trong (lớp Tay lái)
Trang 28IV Tinh da hinh
Tính đa hình là khả năng một ngôn ngữ xử lý các đối tượng hữu quan theo cùng một cách
Tính đa hình thể hiện dưới nhiều hình thức:
Là khả năng cho phép người lập trình gọi trước một phương thức của đối tượng, tuy chưa xác định được đối tượng Đến khi thực hiện, chương trình mới xác định được đối tượng và gọi phương thức tương ứng của đối tượng đó Kết nối trễ giúp chương trình được uyên chuyên chỉ yêu cầu đối tượng cung cấp đúng phương thức cần thiết là đủ
Vị dụ: Chúng ta có lớp Xe với phương thức Chạy và các lớp Xe đạp, Xe hoi, Xe day cing phát sinh từ lớp Xe Chúng ta chưa biết sẽ sử dụng xe gì để di chuyển vì tùy thuộc tình hình CÓ sẵn xe nào nên gọi trudc Phuong thức Chạy Khi chương trình thực thi, tùy theo đối tượng của lớp nào được đưa ra mà phương thức Chạy của đối tượng đó được gọi
V Nạp chồng — Overloading
Đây là khả năng cho phép một lớp có nhiều thuộc tính, phương thức cùng tên nhưng với các tham sô khác nhau về loại cũng như về sô lượng Khi được gọi, dựa vào tham sô truyên vào, thuộc tính hay phương thức tương ứng sẽ được thực hiện
Ghi dé - Overriding
Hình thức này áp dung cho lớp Con đối với lớp Cha Lớp Con được phép có một phương thức cùng tên, cùng số tham số có kiểu đữ liệu như phương thức của lớp Cha hoặc những lớp trước đó nữa (lớp phát sinh ra lớp Cha .) với cài đặt khác đi Lúc thực thi, nếu lớp Con không có phương thức riêng, phương thức của lớp Cha sẽ được gọi, ngược lại nếu có, phương thức của lớp Con được gọi
VII Chương IV : Lớp (Class)
Tạo một Class
Chúng ta tạo một Class mới trong VB.NET bằng cách đùng thực đơn Project | Ađd Class Hộp thoại Add New Item sẽ hiện ra, chọn Class trên khung bên phải
L Tạo Một Namespase
Trong một tập tin như trên có thê chứa nhiều Class khác nhau
Chúng ta có thể tổ chức các Class cùng loại, cùng nhóm vào chung một không gian tên (NameSpace) do chung ta tao ra
Vi du:
Trang 29Public Class An_thit End Class End Namespace Đề tham chiếu đến một Class được khai báo trong Namespace, chúng ta phải thông qua tên Namespace Vidu:
Private conbo as Dongvat.Anco
Một không gian tên có thê xuất hiện trong nhiều tập tin Class khác nhau trong một Project Ví dụ ta có tập tin thứ hai với nội dung:
Vidu:
Namespace Dong vat Public Class An_tap End Class End Namespace H Tạo một lớp kề thừa
Khi tạo một Class kế thừa, chúng ta sẽ có một Class mới kế thừa tất cả các thành phần đã
được khai báo với từ khóa Public, Friend va Protected cia Class duoc ké thira Cu phap tao
Class kê thừa như sau:
Public Class <tên Class con>
Cú pháp Inherits <tên Class cha>
End Class
Lệnh Inherits phải là dòng đầu tiên sau đòng lệnh khai báo Class
Hil Khai báo phương thức
Phương thức là chức năng mà đối tượng có thể thực hiện, nó có thể là một thủ tục (Sub) hoặc
Trang 30
End Sub
[<từ khóa>] Function <tên hàm>([<các tham số>])
Return <gia tri> End Function Từ khóa có thê là một trong các giá trị ở bang sau: Giá trị Mô tả
Public Cho biết phương thức được gọi ở mọi nơi
Protected Cho biết phương thức chỉ được gọi trong phạm vi của Class khai báo và các lớp Con (Subclass)
Friend Cho biết phương thức chỉ được gọi trong phạm vi của Project
Protected Cho biết phương thức chỉ được gọi trong phạm vi Proctected và Friend Friend
Private Cho biết phương thức chỉ được gọi trong phạm vi của Class
Overloads Cho biết phương thức Nạp chồng một hay nhiều phương thức có cùng tên với phương thức trong lớp cơ sở Danh sách tham sô trong phương thức này phải khác với danh sách tham số của mỗi phương thức Nạp chồng khác về số lượng, hoặc về các kiểu đữ liệu hoặc cả hai
Chúng ta không cần phải dùng từ khóa Overloads khi tạo các phương thức Nạp chồng trong một lớp Nhưng nếu đã khai báo cho một thì phải khai báo cho tất cả
Không được phép sử dụng cả hai từ khóa Overloads và Shadows trong cùng một phương thức
Ví dụ chúng ta có các lớp Tĩnh và Toan như sau: Public Class Tinh
Trang 31Inherits Tinh Overloads Function BP(ByVal so As Double) As Double Return so ^ 2 End Function End Class
Cac ham BP trong lớp Tĩnh có thể có hoặc không có từ OverLoads Một thể hiện của lớp Toan có thể sử dụng tất cả các hàm Overloads
Overrides Cho biét phương thức ghi đè một phương thức cùng tên của lớp cơ Sở Số lượng tham số, kiểu đữ liệu của tham số cũng như kiểu giá trị trả về phải khớp với của lớp cơ sở
Overridable Cho biết phương thức này được phép ghi đè bằng một phương thức cùng tên trong lớp Con Phương thức với từ khóa Overrides mặc nhiên là được phép ghi đè
NotOverridable | Cho biết phương thức không được phép ghi đè trong lớp Con
MustOverride | Cho biết phương thức không được cài đặt trong lớp khai báo nhưng trong lớp Con
Shadows Cho biết phương thức che lấp một thành phần có tên tương tự, hoặc
một tập hợp các thành phần Nạp chồng của lớp cơ sở Tham số và giá trị trả về không nhật thiệt phải như trong thành phân bị che Thành phân bị che không còn giá trị trong lớp che nó
Không được phép sử dụng cả hai từ khóa Overloads và Shadows trong cùng một phương thức
Vi du: Chung ta có lớp ClassCha với thuộc tinh Cao:
Public Class ClassCha Private h As Single Property Cao() As Single Get Return h End Get Set(ByVal Value As Single) h = Value End Set End Property End Class
Va lop ClassCon kế thừa từ lớp ClassCha va che mờ thuộc tính Cao
băng thủ tục Cao như sau:
Trang 32
Public Class ClassCon Inherits ClassCha
Public Shadows Sub CaoQ
MessageBox.Show("Téi sé con cao hon nita", "Class Con") End Sub
End Class
Shared Cho biết phương thức được dùng chung - nghĩa là phương thức này không liên kết với một thể hiện nào của lớp Chúng ta có thê gọi phương thức đùng chung thông qua tên của lớp hoặc tên biến của một thể hiện cụ thé Vi dụ chúng ta có lớp TEST với một hàm Shared nhưự sau: Class TEST Shared Function Cong(ByVal a As Integer, ByVal b As Integer) As Integer Returna+ b End Function End Class Khi sử dụng, chúng ta có thé viét: Dim y As TEST Console WriteLine(y.Cong(12, 9)) hoặc: Console WriteLine(TEST.Cong(12, 9))
IV Khai báo thuộc tính
Thuộc tính là thành phần lưu giữ các tính chất, đặc điểm của đối tượng Ứng với mỗi thuộc tính, chúng ta cân khai báo một biên PrIvate tương ứng đê lưu giữ giá trị Trong VB.NET, chúng ta dùng một cú pháp chung cho truy xuât và gán trị của thuộc tính như sau:
' Khai báo biến lưu giữ giá trị của thuộc tính Private mthuoctinh As <Kiêu đữ liệu>
[<Ttr khoa>] Property Thuoc_tinh() As <Kiéu dit ligu>
Cu pha Cop Cake T
pep ' Truy xuât giá trị của thuộc tính tức truy xuât đên giá trị của biên Get
Return mthuoctinh
Trang 33End Get
' Gan tri cho thuộc tinh tức gán trị cho bién
Set (ByVal Value As <Kiéu dtr liéu>) mthuoctinh = Value End Set End Property Chúng ta có thể sử dụng các từ khai báo sau: Default
Khai báo thuộc tính mặc định Các thuộc tính này phải có tham số và có thê gán và truy xuất không cân chỉ ra tên thuộc tính
Một thuộc tính chỉ có thể là thuộc tính mặc định nếu thỏa các điều kiện:
oMỗi Class chỉ được có một thuộc tính mặc định, phải kể đến cả các thuộc tính kế thừa o Thuộc tính mặc định không được là Shared hay Private
oNếu một thuộc tính phi đè (Overloaded) là mặc định thì tất cả các thuộc tính cùng tên cũng phải khai báo mặc định
oThuộc tính mặc định phải có ít nhất một tham số
Private mthuoctinh As <Kiêu đữ liệu>
Default Public Property Thuoc_tinh(Index as Integer) As <Kiéu dit ligu> Get Return mthuoctinh End Get Cu pha , u pnap Set (ByVal Value As <Kiéu di liéu>) mthuoctinh = Value End Set End Property a.Read only Cho biết thuộc tính chỉ được phép đọc không cho phép gắn
Private mthuoctinh As <Kiểu đữ liệu>
Trang 34Return mthuoctinh End Get End Property b Write only Cho biết thuộc tính chỉ được phép gán không cho phép đọc
Private mthuoctinh As <Kiéu dit ligu>
Public WriteOnly Property Thuoctinh() As String Set (ByVal Value As String) mthuoctinh = Value End Set End Property Cu phap c Overloads
Cho biết thuộc tính này nạp chồng một hoặc nhiều thuộc tính có cùng tên được định nghĩa trên lớp cơ sở Danh sách tham sô trong thuộc tính nay phải khác với danh sách tham sô của mỗi thuộc tính nạp chồng khác về số lượng, hoặc về các kiểu đữ liệu hoặc cả hai
Chúng ta không cần phải đùng từ khóa Overloads khi tạo các thuộc tính nạp chồng trong một lớp Nhưng nêu đã khai báo cho một thì phải khai báo cho tât cả
Không được phép sử dụng cả hai từ khóa sau một lượt: Overloads và Shadows trong cùng
một thuộc tính
Overrides
Cho biết thuộc tính ghi đè một thuộc tính cùng tên của lớp cơ sở Số lượng tham số, kiểu dữ liệu của tham sô cũng như kiêu giá trị trả về phải khớp với của lớp cơ sở
Overridable
Cho biết thuộc tính này được phép ghi đè trong lớp Con NotOverridable
Cho biết thuộc tính không được phép ghi đè trong lớp Con Mặc nhiên, các thuộc tính là không được phép ghi đè
MustOverride
Cho biết thuộc tính không được cài đặt trong lớp và phải được cài đặt ở lớp Con Shadows
Trang 35Shared
Cho biết thuộc tính được chia sẻ - nghĩa là thuộc tính không gắn chặt với một thê hiện nào
của lớp nhưng được sử dụng chung giữa các thê hiện của một lớp
VIH Chương VI: Sự kiện (Event) L Khai báo sự kiện
Sự kiện là thông điệp do một đối tượng phát sinh cho biết một hành động đang xảy ra Hành động có thể do sự tương tác của người dùng, do chương trình khác kích hoạt .Đối tượng kích hoạt biến cỗ được gọi là đối tượng gửi biến cố Đối tượng bắt sự kiện và đáp ứng lai gol là đối tượng nhận sự kiện Đối tượng gửi không biết đối tượng nhận sự kiện do nó kích hoạt, nhưng giữa đối tượng gửi và đối tượng nhận có một đối tượng trung gian Trong NET Framework có một kiểu đặc biệt thích hợp cho chức năng của vai trò trung gian này là Delegate (ty quyén)
Chức năng của sự kiện được xác định từ ba yếu tố liên quan: một đối tượng cung cấp đữ liệu
sự kiện (event data), một event delegate và một đôi tượng kích hoạt sự kiện (sender) .NET
Framework có một quI ước vệ việc đặt tên các lớp và các phương thức liên quan đên sự kiện như sau:
IL Phát sinh sự kiện
Để một class phát sinh sự kiện EventName cần có các yếu tô sau:
-Một tham số sự kiện chứa các đữ liệu có tên EventNameEventArgs phát sinh từ lớp
System.EventArgs
-Một thành phần xử lý sự kiện có tên EventNameEventHandler Đây là một thủ tục sẽ được
gọi khi sự kiện xảy ra Chúng ta có thé sử dung bat ky thủ tục hợp lệ nào làm thành phần xử lý sự kiện nhưng không được là một hàm
-Một đối tượng phát sinh sự kiện Đối tượng này phải cung cấp :
wMột khai báo sự kiện
[<Từ khoá>| Event EventName As EventNameEventHandler wMột phương thức tên OnEventName phát sinh sự kiện
Các đối tượng event delegate và đối tượng dữ liệu biến cố có thể phát sinh từ những lớp tương ứng có săn trong NET
Các từ khoá khai báo sự kiện có thê là: Từ khóa Mô tả
Public Sử dụng được ở mọi nơi Sự kiện không có từ khóa mặc nhiên là Public
Private Chỉ truy xuất trong phạm vi khai báo
Protected Chỉ truy xuất trong pham vi Class va SubClass
Trang 36
Friend Chỉ truy xuất trong phạm vi Project
Protected Friend | Chỉ truy xuất trong phạm vi của Protected và Friend
Shadows Cho biết sự kiện che mờ một thành phần có tên tương tự trong lớp cơ sở Chúng ta có thể che mờ một thành phan loại này bằng một thành phần loại khác Thành phần bị che mờ sẽ không còn tác dụng trong lớp kế thừa che mờ nó
Các sự kiện trong VB.NET không hỗ trợ đúng nguyên tắc kế thừa Một sự kiện khai báo
trong Class nào chỉ được phớp gọi phát sinh sự kiện (RaiseEvent) chỉ trong lớp đó mả thôi, không được gọi phát sinh kê cả trong các lớp kê thừa
Cú pháp để gọi phát sinh sự kiện như sau
Cú pháp |RaiseEvent <tén sy kién>()
Ví dụ chúng ta có lớp Con Nguoi và thuộc tính Chieu_ Cao, khi chiều cao thay đổi sẽ phát sinh sự kiện Chieu Cao Thay doi như sau:
Vidu:
Public Class Con Nguoi Private Cao As Single
Public Event Chieu_Cao_Thay_doi() Public Property Chieu_Cao() As Single Get Return Cao End Get Set(ByVal Value As Single) Cao = Value RaiseEvent Chieu Cao Thay doi() End Set End Property End Class
Để sử dụng các sự kiện trên một biến, chúng ta sử dụng cú pháp sau khi khai báo biến: Private WithEvents <tén bién> As <tén Class>
II Kết hợp sự kiện với sử lý
Chúng ta kết hợp sự kiện với xử lý sự kiện bằng các lệnh: Handles hoặc AddHandler
Trang 37Các lệnh AddHandler va RemoveHandler uyén chuyén hơn trong việc kết hợp sự kiện với xử lý sự kiện Chúng cho phép chúng ta linh hoạt kết hợp và ngắt rời các sự kiện với các xử lý sự kiện lúc thực thi và chúng không đòi hỏi chúng ta phải khai báo biên với từ khóa WithEvents
Với các sự kiện kết hợp với các form, control, Visual Basic NET tự động phát sinh một xử lý sự kiện rông và kêt hợp với sự kiện
Ví dụ khi chúng ta nhấp đúp vào một nút lệnh trên màn hình ở chế độ thiết kế, Visual Basic NET tạo một xử lý sự kiện kêt hợp với sự kiện Click của nút lệnh như sau:
Private Sub Buttonl Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
End Sub
Hoặc chúng ta kết hợp các biến cố Click của các nút lệnh Button1, Button2 cho cùng một xử lý sự kiện như sau:
AddHandler Button1.Click, AddressOf Nhannut
AddHandler Button2 Click, AddressOf Nhannut Private Sub Nhannut(ByVal sender As _
System.Object, ByVal e As System.EventArgs)
End Sub
IX Chuong VII Tw khoa Me, MyBase, MyClass I Me
Từ khóa Me được dùng khi chúng ta chỉ rõ muốn dùng các thành phân của chính thể hiện Class noi việt lệnh chứ không phải thành phân nào khác
Vidu:
Public Class Con_nguoi Private ten as String Public Sub Lam_viec()
Dim ten as String
Trang 38II MyBase
Từ khóa Mybase được dùng trong Class kế thừa, khi chúng ta muốn dùng các phương thức của chính Class cơ sở
Ví dụ: Lớp lopCha với thú tục Gioi_ thieu và tạo tiếp Class lopCon kế thừa từ lopCha Public Class lopCha
Public Overridable Sub Gioi_thieu()
MessageBox.Show(“Téi la thé hién ciia lopCha”’) End Sub
End Class
Public Class lopCon Inherits lopCha
Public Overrides Sub Gioi_thieu()
MessageBox.Show("Téi la thé hién cia lopCon") Mybase.Gioi_thieu()
End Sub
End Class
Khi gọi phương thức G1oli thieu của lopCon, chúng ta sẽ có hai thông báo: một của chính lopCon và một của lopCha
Chú ý: Từ khóa Mybase
-Chỉ được dùng để tham chiếu đến Class trung gian và các thành phần được kế thừa của nó -Không phải là một đối tượng, nên thông thể gán trị, dùng làm tham số hoặc dùng trong toán tử Is
‘Khong dugc st dung trong cac Standard Module
Hil MyClass
Tur khoa MyClass cho phép chúng ta gọi các phương thức Overridable của Class, dẫu các Class kê thừa đã có các phương thức Overrides tương Ứng
Ví dụ: Lớp lopCha với thủ tục Gioi_ thieu và tao tiếp Class lopCon kế thừa từ lopCha Public Class lopCha
Public Sub Chao() Gioi_thieu() End Sub
Public Overridable Sub Gioi_thieu()
Trang 39End Class Va mot Class lopCon kế thừa từ lopCha có thủ tục Giorthieu ghi đè, và kế thừa thủ tục Chao của lopCha Public Class lopCon Inherits lopCha
Public Overrides Sub Gioi_thieu()
MessageBox.Show(“Téi la thé hién cia lopCon”’) End Sub
End Class
Với đoạn lệnh sau: Dim a as New lopCon(Q)
a.Chao() ‘ Téi la thể hiện của lopCon Nhưng nếu thủ tục Chao của lopCha như sau: Public Sub Chao()
MyClass Gioi_thieu() End Sub
Thi :
a.Chao() ' Téi là thể hiện của lopCha Khởi tạo thế hiện
Để tạo đối tượng cho một Class, trình biên địch gọi một hàm đặc biệt được gọi là bộ khởi tạo (Constructor) Chúng ta có thể định nghĩa bộ khởi tạo trong Class Nhưng nếu chúng ta không định nghĩa, VB sẽ sử dụng bộ khởi tạo mặc định Đề định nghĩa bộ khởi tạo, chúng ta chỉ cần định nghĩa một thủ tục New bên trong Class Do tính chất nạp chồng (Overloading),
nên Class có thể định nghĩa nhiều bộ khởi tạo Abstract Base Class
Từ khoá MustInherit
Khi chúng ta muốn tạo một lớp chỉ dùng để thừa kế, phải khai báo với từ khóa MustInhcrit Lớp này không cho phép khởi tạo thể hiện, nhưng phải tạo lớp con kế thừa từ lớp này và khởi tạo thê hiện từ lớp kê thừa:
Cú pháp |Public MustInherit Class <tên lớp>
Từ khoá MustOverride
Tương tự với ý niệm MustInherit trong Class, ta cũng có từ khóa MustOverride cho một phương thức Trong lớp cơ sở ta khai báo một phương thức, nhưng yêu câu phải được cài đặt trong lớp kê thừa, ta sẽ khai báo phương thức đó như sau:
Trang 40Cú pháp |MustOverride Sub <tên thủ tục>
Thủ tục này không được có gì khác ngoài dòng khai báo Thủ tục này được gọi là abstract method hay pure virtual function, vi nd chi co phần khai báo không có phần định nghĩa Trong các lớp kế thừa, các thủ tục này buộc phải được ghi đè (Override) để sử dụng
Kết hợp hai ý niệm MustInherit và MustOverride, chúng ta sẽ có Abstract Base Class Day 1a một Class chỉ có khai báo không có phần cài đặt Muốn dùng phải tạo class kế thừa, từ đó mới sử dụng được
Vĩ dụ:
Public MustInherit Class Con_nguoi Public MustOverride Sub Chao() Public MustOverride Sub Hoi_tham() End Class
Lop Abstract Base Class rat thich hop dé chúng ta tạo cái sườn hay bố cục của chương trình trong lúc thiết kê Tât cả những lớp kê thừa lớp Abstract Base Class đêu phải cài đặt các thanh phan da khai bao trong Abstract Base Class: Vidu: Public Class Nguoi_Viet Inherits Con_nguoi Public Override Sub Chao() End Sub Public Override Sub Hoi_tham() End Sub End Class
Lớp giao tiép (Interface)
Tuong ty Abstract Base Class, Interface co thể khai báo tập hợp các thuộc tính, phương thức và sự kiện, nhưng không có phân cài đặt chúng (Implementation) Các lớp hô trợ Interface đêu phải cài cặt các thành phân của Interface như đã khai báo
Chúng ta có cú pháp sau để khai báo Interface:
[<Từ khóa>] Interface <tên gọi>