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
CHUONG II: Cầu trúc câu lệnh - + + + + 2+ E2 E+E+E£EEE+EEEEEEEEEEEEEEEEEEErkrkrkrkreee 17
I CAu Tritc Chon ccccccccscceccesescececsecescsceecaceecaceecarsevaceasacsecacaecaceesareccaceecaceesacens 17
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
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
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 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
Il MYBaSC cceccccccccccccecceceeseesssssessssssssessesesesceeceeeeececeeceeeeeessceceeseassenseeeeeeeeeneees 38
CHƯƠNG VIII Các điều khiển hiện thị 5:52 41
I ComBoBox, LIstBox, CheckLIstBox - CS cv xe 41
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
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
Chương X: Một số đối tượng cơ bản trong ADO.NETT 5-5 +scx+Ecxcx xxx: 59
2 COMME CtiONSHriNg .ccccescsssccccccccccceeceessessseesesensnsesaeseeeeseeeceeeeeseseeeeeeseeeeuaeaas 60
3 Các thuộc tính khác của Connecfion - -‹- << <2 ‡ 2< sexes 62
Trang 34 Các phương thức trên ConnecCf1OTI - - + + + + + + + + + ++++s+vxxveeeeexeerrerrerrers 62
5 Minh hoa tao Comme ction .ccccccecccccsesceceneccceeecsceececseeusececeseeseueeseeenesenenes 62
1 Tao Command .ccccccceesseeccccccceccseeessceeccsceesesuseseseesseceessceeuseescessesseueaeeseess 63
2 Các thuộc tính của Command - 5555 +21 E2 £xkesssseres 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
1 Đối tượng BindingCOnteX - - - - E33 E E3 5151115 151721 ce 73
2 Đối tượng CurrencyManager - cành 74
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
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
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
KCT - CNPM B K44-CNTT— GTVT 3
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
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 wNgoài ra có thê có tham sô qui định có phân biệt chữ Hoa chữ thường, V.V
CompareOrdinal | So sánh hai tham số kiểu String dựa theo bảng mã các ký tự của các tham
SỐ
Hàm trả về hiệu của mã tham số thứ nhất và mã tham số thứ hai
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
KCT - CNPM B K44-CNTT— GTVT 5
Trang 6
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
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
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)
ToString(<biéu thirc dinh dang>)
Dưới đây là bảng biểu thức định dạng
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
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ị
\ 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
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ị
Byte Byte 1 6 0 đến 255 (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
4.94065645841246544E -324 đôi với sô am; 4.94065645841246544E-324 dén 1.797693 13486231570E +308 với sô
Trang 9
Object Object 4 Bat ky kiểu dữ liệu nào có thê chứa trong
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
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ụ:
KCT - CNPM B K44-CNTT— GTVT 9
Trang 10Biế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()
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
Class 1a kiéu tham chiéu trong khi Structure là kiểu trị
Hãy xem xét đoạn lệnh sau:
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
chl = "Chudi 1"
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
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
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ú ý:
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
Khác với mảng, Structure, kiểu đo người dùng định nghĩa (UDT: User Defñned Type), là một cầu trúc gồm một hoặc nhiều thành phần có kiểu dữ liệu khác nhau Tuy chúng ta có thể truy xuất riêng lẻ các thành phần nhưng Structure được xem như là một thực thể duy nhất Trong phiên bản trước, UDT được khai báo với từ khóa Type End Type Trong VB.NET, cú pháp khai báo Structure như sau:
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>
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
\ (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
Toá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
KCT - CNPM B K44-CNTT— GTVT 15
Trang 16TypeOf 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
Toán tử Mô tả
Not Trả về giá trị ngược lại của toán hạng
And Trả về True (1) khi và chỉ khi hai toán hạng cùng là True (1)
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 toá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)
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 ' Các câu lệnh khi điều kiện đúng
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
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>
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
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
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
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
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
Trong VB6, tham số ParamArray vốn được truyền theo kiểu tham chiếu ByRef va khong thé thay đôi thành ByVal nhưng trong VB.NET là tham trị ByVal và không thê thay đôi thành ByRef
Tham số tủy chọn Optional phải khai báo giá trị mặc nhiên, khi không truyền tham số:
Trang 21Function TESTFUNCTION(ByVal a As Short, ByVal c As Short) As Integer
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
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
KCT - CNPM B K44-CNTT— GTVT 21
Trang 22#Region <chuỗi định danh>
#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
e Các lệnh Imports phải được đặt trước tất cả các khai báo, kê cả lệnh khai báo Module hoặc
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
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
Trước đây, chúng ta thường sử dụng cú pháp On Error Goto <nhãn lỗi> đề xử lý lỗi Đây là một loại xử lý không cấu trúc vì kê từ dòng lệnh On Error Goto <nhãn lỗi> đến cuối thủ tục hay hàm, nếu dòng lệnh nào gây lỗi chương trình đều nhường quyền xử lý cho đoạn lệnh của
<nhãn lỗi> Với VB.NET, chúng ta phát hiện và xử lý lỗi một cách chặt chẽ với cú pháp:
Try ' các lệnh có khả năng gây lỗi
Catch
' các lệnh xử lý khi lỗi xảy ra
Cú pháp
KCT - CNPM B K44-CNTT— GTVT 23
Trang 24Cau 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:
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
c Bay voi nhiing Exception đặc biệt
Các kiêu Exception đặc biệt thường gặp
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 FieldAccessException Chương trình truy xuất một field Private hoặc Protected
của lớp InvalidCastException Chương trình đang có thực hiện một chuyên đôi không
Trang 26tại TypeUnloadException Chương trình truy xuất một lớp chưa được tải lên vùng
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:
Class ConNgười là một ý niệm trừu tượng, nhưng NguyễnVănA là một đối tượng cụ thé
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 ngoà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ệ:
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)
KCT - CNPM B K44-CNTT— GTVT 27
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:
Namespace Dong vat
Public Class An co
End Class
Trang 29Public Class An_thit
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
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>
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
một hàm (Function) Với hàm, phải có giá trỊ trả vê
Cú pháp tạo các phương thức:
Cú pháp |Í<từ khóa>] Sub <tên thủ tục>([<các tham số>])
KCT - CNPM B K44-CNTT— GTVT 29
Trang 30
End Sub
[<từ khóa>] Function <tên hàm>([<các tham số>])
Return <gia tri>
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 Function BP(ByVal so As Short) As Integer Return so ^ 2
End Function Function BP(ByVal so As Integer) As Long Return so ^ 2
End Function End Class Public Class Toan
KCT - CNPM B K44-CNTT— GTVT 30
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
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
KCT - CNPM B K44-CNTT— GTVT 31
Trang 32Public 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>
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
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
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>
Cú pháp |Public ReadOnly Property Thuoc_tínhQ As <Kiêu đữ liệu>
Trang 34Return mthuoctinh End Get
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
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
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à:
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
KCT - CNPM B K44-CNTT— GTVT 35
Trang 36Friend 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
Public Class Con Nguoi
Private Cao As Single
Public Event Chieu_Cao_Thay_doi()
Public Property Chieu_Cao() As Single
Để 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
Tu khoa WithEvents va Handles cung cap cach khai báo các xử lý sự kiện Các sự kiện do một đôi tượng phát sinh với từ khóa WithEvents có thê được xử lý băng bât kỳ thủ tục nào được chỉ ra trong mệnh đê Handles của sự kiện Tuy mệnh đê Handles là cách thức chuân đê kêt hợp một sự kiện với một xử lý sự kiện, nhưng lại giới hạn sô các biên cô kêt hợp với cùng xử lý sự kiện khi biên dịch
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)
Public Class Con_nguoi
Private ten as String
Public Sub Lam_viec()
Dim ten as String
' biễn cục bộ của Sub được sử dung
Trang 38Public 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")
Public Overridable Sub Gioi_thieu()
MessageBox.Show("Téi la thé hiện của lopCha")
End Sub
Trang 39Public 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:
KCT - CNPM B K44-CNTT— GTVT 39
Trang 40Cú pháp |MustOverride Sub <tên thủ tục>
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:
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>
[ Inherits <tén interface1>|,<ten interface2>| |