 |
|
KINH NGHIỆM LẬP
TRÌNH |
|
Ai VB.NET hông?
Chia sẻ dữ liệu và các bộ phận bên trong lớp
CHƯƠNG CAN CHÍP |
|
Với lớp NhanVien trong bài trước (Cách tạo
lớp trong VB.NET), lần này bà con thử tưởng
tượng xem: ta cần gán các mã số liên tiếp cho các
nhân viên và tính thuế thu nhập của nhân viên khi
cần. Với VB6, ta thường dùng một biến công cộng
(public) vào việc đánh mã số và kiểm soát sự thay
đổi của nó. Tuy nhiên, một biến như vậy dễ bị...
“cha chung chẳng ma nào khóc”. |
|
VB.NET mang đến một ý tưởng mới: dữ liệu bên trong
lớp có thể được truy xuất từ những thể hiện
(instance) khác nhau của lớp đó. Cụ thể, ta sẽ tạo
cho lớp thuộc tính MaNhanVien để chứa mã nhân
viên. Mã số này chỉ thay đổi mỗi khi tạo một nhân
viên mới (thủ tục New). Việc tính thuế
thu nhập được đảm nhận bởi hành vi ThueThuNhap
được triệu gọi từ một thể hiện (ví dụ,
ChuongCanChip.ThueThuNhap) hoặc từ tên lớp
chung chung (ví dụ, NhanVien.ThueThuNhap). |
|
Để thử nghiệm, bà con vui lòng mở VB.NET để mần ứng
dụng thuộc kiểu Windows Application. Ta sẽ
không xài Form1 mà chỉ cần một đơn thể mã
lệnh (code module). Sau khi VB.NET dọn sẵn Form1,
bà con “bộp” vào mục Add New Item... trên
trình đơn Project. Sau đó, trên hộp thoại
Add New Item, “bộp” vào biểu tượng Module bên ô
Templates rồi “bộp” vào nút Open. Ngay
bên dưới dòng Module Module1, bà con hãy gõ
đoạn mã 1 và chú ý việc dùng từ chốt Shared. |
|
Đoạn mã 1
Public Const GIOIHAN_TINH_THUETN As Integer =
5000000
Public Const THUE_SUAT As Decimal = 0.1D ‘Thuế suất
10%
Sub Main()
Console.WriteLine("Thue thu nhap toi thieu la: " _
& NhanVien.ThueThuNhap(GIOIHAN_TINH_THUETN))
Console.ReadLine()
Dim ChuongCanChip As _
New NhanVien("Chuong can chip", 6000000)
Console.WriteLine(ChuongCanChip.TenNhanVien _
& ". Co ma so: " & ChuongCanChip.MaNhanVien)
Console.WriteLine("Co luong la: " _
& ChuongCanChip.Luong _
& ". Va thue thu nhap la: " _
& ChuongCanChip.ThueThuNhap(ChuongCanChip.Luong))
Console.ReadLine()
Dim LeHoan As _
New NhanVien("Le Hoan", 5000000)
Console.WriteLine(LeHoan.TenNhanVien _
& ". Co ma so: " & LeHoan.MaNhanVien)
Console.ReadLine()
End Sub
Public Class NhanVien
Private m_Ten As String
Private m_Luong As Decimal
‘ Chia sẻ dữ liệu
Private Shared m_MaNhanVien As Integer = 0
Public Sub New(ByVal sTen As String, _
ByVal curLuong As Decimal)
m_Ten = sTen
m_Luong = curLuong
‘ Mã nhân viên đầu tiên có trị là 1
m_MaNhanVien = m_MaNhanVien + 1
End Sub
ReadOnly Property MaNhanVien() As Integer
Get
MaNhanVien = m_MaNhanVien
End Get
End Property
ReadOnly Property TenNhanVien() As String
Get
TenNhanVien = m_Ten
End Get
End Property
ReadOnly Property Luong() As Decimal
Get
Luong = m_Luong
End Get
End Property
‘ Chia sẻ hành vi
Public Shared Function ThueThuNhap( _
ByVal nLuong As Decimal) As Decimal
If nLuong >= GIOIHAN_TINH_THUETN Then
Return nLuong * THUE_SUAT
Else
Return 0
End If
End Function
End Class |
|
Trong cửa sổ Solution Explorer, “bộp” chuột
phải vào tên dự án hiện hành (ngay bên dưới mục
Solution) rồi “bộp” vào Properties. Trên
hộp thoại Property Pages, “bộp” vào Sub
Main trong danh sách Startup object. Xong
xuôi, “bộp” vào OK. Chuỗi các “bộp” vừa rồi
là để báo cho VB.NET biết ta sẽ khởi động dự án này
bằng thủ tục Sub Main. Cho chạy thử, bà con
nhận được kết quả như hình 1. |
|

Hình 1: Kết quả minh họa |
|
|
|
 |
|
 |