Các bài tập Microsoft .NET 95
Bài 7
Những chức năng Đối Tượng mới của VB.NET
(phần IV)
Dùng OO trong VB.NET
Shared class members ( Các thành viên để dùng chung của class)
Mặc dù Object rất hiệu năng và hữu ích, có khi ta chỉ muốn truy cập các
variables hay methods của một class để làm việc mà không cần phải
instantiate một Object nào cả. Tức là y như trong quá khứ, khi viết VB6,
ta dùng các variables hay methods của một BAS Module. Đại khái giống
như thay vì ký giao kèo với một thầu (Object) để thực hiện một công
trình, ta chỉ muốn mướn thợ hay chuyên viên làm việc gia công ( gọi các
methods) thôi.
Shared Methods
Trong VB.NET chẳng những một Class có các methods và properties
thông thường như ta đã thấy - tức là những methods và properties của
một Object ta có thể dùng ngay sau khi Object ấy thành hình qua quá
trình instantiation - mà còn có các methods và properties ta có thể dùng
mà không cần phải tạo ra một instance nào từ Class. Chúng được gọi là
shared methods. ( Trong các ngôn ngữ lập trình khác các methods này
còn được gọi là static methods hay class methods).
Ta không thể truy cập một shared method qua một Object như method
bình thường, nhưng phải dùng trực tiếp tên của class. Thí dụ sau đây sẽ
minh họa điều này:
Public Class Math
Shared Function Add( ByVal x As Single, ByVal y As Single) As Single
Return x + y
End Function
End Class
Sau khi định nghĩa Class Math, ta có thể dùng Shared Function Add
mà không cần instantiate một Object thuộc class Math như sau:
Các bài tập Microsoft .NET 97
Ta có thể cho shared variable một scope Public hay Private tùy ý, nhưng
By Default, scope của shared variables là Private, khác với shared
methods thì By Default là Public.
Điểm quan trọng của shared variables là chúng được dùng chung giữa
mọi instances (objects) của cùng một class. Dưới đây là một thí dụ trong
đó ta giữ cái counter có trị số tăng thêm 1 mỗi lần có một instance mới
của class MyCounter. Bất cứ lúc nào ta cũng có thể biết có bao nhiêu
objects đã được tạo ra bằng cách đọc property Count:
Public Class MyCounter
Private Shared mintCount As Integer
Public Sub New()
mintCount += 1
End Sub
Public ReadOnly Property Count() As Integer
Get
Return mintCount
End Get
End Property
End Class
Như thế, nếu ta chạy client code dưới đây nó sẽ hiển thị kết quả là 3:
Protected Sub Button1_Click( ByVal sender As Object, ByVal e As System.EventArgs) Handles
Button1.Click
Dim obj As MyCounter
obj = New MyCounter()
obj = New MyCounter()
obj = New MyCounter()
MsgBox(obj.Count, MsgBoxStyle.Information, "Counter")
Các bài tập Microsoft .NET 98
End Sub
RaiseEvent TheEvent()
End Sub
End Class
Kế đó bạn dùng Menu command File | Add Project | New Project để
thêm một project mới với tên EventClass. Để có thể dùng Class1, bạn
cần phải reference nó với Menu command Project | Add Reference...,
chọn Tab Projects và click Browse để chọn ClassLibrary1.DLL từ
subfolder ClassLibrary1\bin của solution như trong hình dưới đây:
Một khi đã referenced ClassLibrary1 với Class1 trong ấy, bây giờ bạn có
thể doubleclick lên Form1 để code như sau:
Private WithEvents obj As ClassLibrary1.Class1
Private Sub Form1_Load( ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
obj = New ClassLibrary1.Class1()
End Sub
Các bài tập Microsoft .NET 100
Nhớ là ta phải declare variable obj thuộc loại ClassLibrary1.Class1 với
WithEvents. Đặt một Button tên BtnLàmViệc và doubleclick lên nó để
code như sau:
Private Sub BtnLàmViệc_Click( ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles BtnLàmViệc.Click
obj.LàmViệc()
End Sub
Để xử lý Event của obj bạn chọn tên từ combobox phía trên bên trái, rồi
chọn TheEvent từ combobox bên phải như trong hình dưới đây:
Ở đây ta handle Event bằng cách hiển thị một message đơn giản: Đang
xử lý một Event từ Class1. Bây giờ bạn có thể chạy program. Khi bạn
click Button BtnLàmViệc program sẽ hiển thị message để chứng minh
rằng từ một Application ta có thể handle event trong Class của một
Project khác.