1. Trang chủ
  2. » Luận Văn - Báo Cáo

Báo cáo thực tập môn VB.Net

91 751 0
Tài liệu được quét OCR, nội dung có thể không chính xác

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 91
Dung lượng 26,07 MB

Nội dung

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 1

I 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 2

I 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 3

4 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 4

PHAN 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 10

Ifx <> 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 12

Sự 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 13

ch2 = 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 14

Mang 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 16

e 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 18

If<đ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 19

Cá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 20

Do 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 21

Function 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 23

End 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 24

Finally ' 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 25

Messagebox.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 26

củ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 27

Từ 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 28

IV 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 29

Public 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 31

Inherits 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 33

End 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 34

Return 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 35

Shared

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 37

Cá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 38

II 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 39

End 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 40

Cú 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>

Ngày đăng: 08/05/2014, 15:16

TỪ KHÓA LIÊN QUAN

w