Tài liệu Những chức năng Đối Tượng mới của VB.NET (phần III) - Pdf 85


Bài 6
Những chức năng Đối Tượng mới của VB.NET
(phần III)
Dùng OO trong VB.NET
Ngăn cản Thừa kế
Bình thường (By default) class nào cũng có thể được dùng làm base class để từ
đó ta thừa kế. Nhưng đôi khi ta không muốn cho ai thừa kế từ một Class nào đó,
để làm việc ấy ta dùng keyword NotInheritable khi declare class:
Public NotInheritable Class KhôngCon

End Class
Khi ta đã dùng keyword NotInheritable rồi thì không class nào có thể dùng
keyword Inherits để tạo một subclass từ class ấy.
Thừa kế và Phạm vi hoạt động
Khi ta dùng đặc tính thừa kế để tạo một SubClass thì class mới nầy có đủ mọi
methods, propertỉes và variables với Access Modifier Public hay Friend của
SuperClass. Bất cứ thứ gì declared là Private trong SuperClass thì SubClass
không thấy hay dùng được.
Có một ngoại lệ là New method. Các Constructor methods cần phải được
implemented (định nghĩa)
lại trong mỗi SubClass. Một chốc nữa ta sẽ bàn vào chi tiết về điểm nầy.Để làm sáng tỏ vấn đề SubClass có thể dùng Class Members nào của SuperClass,
ta thử code lại Function Amount trong LineItem class bằng cách khiến nó gọi
một Private Function tên CalculateAmount để tính ra Amount thay vì để nó
tính trực tiếp như trước đây:
Public Function Amount() As Single
Return CalculateAmount
End Function


Điểm nầy nhắc tôi nhớ lại khi còn bé, có lần bà con trong vườn đem ra chợ cho
ba má tôi cả thúng xoài thơm rất ngon. Bạn tôi ở lối xóm thấy vậy biểu tôi lén
lấy hai trái xoài để ăn vụn. Vì không phải là người nhà nên bạn tôi không thể lấy
đuợc xoài, bởi Access Modifier của thún xoài là Private trong nhà tôi. Nhưng vì
tôi là Public, nên bạn tôi có thể nhờ tôi lấy dùm.
Protected Methods
Đôi khi Public hay Private thôi chưa đủ. Nếu ta declare thứ gì Private thì nó
hoàn toàn giới hạn trong class, ngược lại nếu ta declare nó Public (hay Friend)
thì nó có thể được dùng trong subclasses hay client code.

Tuy nhiên, có lúc ta muốn một class member chỉ có thể được dùng trong
subclasses thôi, chớ không cho client code dùng. Trong trường hợp ấy ta dùng
keyword Protected. Thí dụ:
Public Class FatherClass
Protected DiSản As Single
End Class

Public Class SonClass
Inherits FatherClass
Public Function ChiaCủa() As Single
Return Disản
End Function
End Class
Ở đây ta có BaseClass FatherClass với Protected Field Disản. Không có client
code nào có thể thấy Field DiSản được. Thế nhưng bất cứ SubClass nào của
FatherClass cũng đều thừa kế và dùng được DiSản.

Trong thí dụ trên, một lần nữa SubClass có một Public method (ChiaCủa) có thể
return một protected value - nhưng chính value ấy, DiSản, không trực tiếp cho

obj.ChàoHỏi()
End Sub
Khi ta click button BtnSubClassObject program sẽ hiển thị message dialog dưới
đây:

Virtual Methods
Tuy nhiên, hãy xem trường hợp ta code như sau:
Private Sub BtnParentClassObject_Click(ByVal sender As System.Object,
_
ByVal e As System.EventArgs) Handles
BtnParentClassObject.Click
Dim obj As ClassCha
obj = New ClassCon()
obj.ChàoHỏi()
End Sub
Trước hết, ở đây có vẻ kỳ kỳ, tại sao declare một variable loại ClassCha mà lại
instantiate một object ClassCon. Chuyện đó hoàn toàn bình thường, vì ClassCon
là một ClassCha. Tức là một variable loại ClassCha hay ClassCon đều có thể
chứa, thật ra là hold references to (point to, chỉ tới), một instance của
ClassCon.

Điểm nầy áp dụng tổng quát khi ta dùng Inheritance. Một variable loại
SuperClass có thể hold reference to bất cứ SubClass Object nào thừa kế từ
SuperClass ấy. Đó là một cách để ta implement tính đa dạng (polymorphism).

Đều có thể làm ta ngạc nhiên là khi ta click button BtnParentClassObject ta cũng
thấy hiển thị message " Thưa các Bác".

Sao lạ vậy? Variable obj được declared là ClassCha tại sao message không phải
là "Chào các cháu"? Lý do là Sub ChàoHỏi của ClassCon được gọi thay vì


Nhờ tải bản gốc

Tài liệu, ebook tham khảo khác

Music ♫

Copyright: Tài liệu đại học © DMCA.com Protection Status