SỐ 143
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

[Đầu trang]
Trang chủ
Nội lực "Peter Pan"
Cầu nối Intel Việt Nam
Chuyện trong tuần
Cõi người ta
Bình luận thị trường
Cõi Mô-bai
Chuyên đề
Bổ ngửa
Túi càn khôn IT
Hồ lô biến
Cảm về Game
Nhật ký e-CHÍP
Bản quyền Công ty Phần mềm & Truyền thông VASC
 99 Triệu Việt Vương HN; Tel: (04) 9782235 • email: echip@vasc.com.vn
Mọi chi tiết về kinh doanh và quảng cáo xin liên hệ Phòng Quảng cáo. Tel: (04) 9782077 kd@vasc.com.vn