Bài 5
Nhng chc năng Đối Tượng mi ca VB.NET (phn
II)
Dùng OO trong VB.NET
To mt Class mi
Class Keyword
Trong mt .vb file ta có th viết nhiu Classes, code ca mi Class nm trong mt
Class ... End Class block. Thí d:
Public Class TheClass
Public Sub Greeting()
MessageBox.Show("Hello world", MsgBoxStyle.Information, "TheClass")
End Sub
End Class
MessageBox.Show và MsgBoxStyle.Information trong VB.NET thay thế MsgBox và
vbInformation trong VB6.
Classes và Namespaces
Nhc li là .NET dùng Namespace đ sp đt các Classes cho th t theo nhóm,
loi. Namespaces đưc declared vi mt Block Structure ging như sau:
Namespace Vovisoft
Public Class TheClass
Public Sub Greeting()
MessageBox.Show("Hello world", MsgBoxStyle.Information,
"TheClass")
End Sub
End Class
End Namespace
Mun nói đến bt c Class, Structure, hay th gì được declared bên trong mt
Namespace...End Namespace block ta phi dùng tên Namespace trước. Thí d:
Private myObject As Vovisoft.TheClass
Mt source file có th cha nhiu Namespaces, và bên trong mi Namespace li có
th có nhiu Classes.
Ngoài ra, Classes thuc v cùng mt Namespace có th nm trong nhiu files khác
nhau trong mt VB.NET project.
Thí d ta có mt source file vi code như sau:
Namespace Vovisoft
Public Class TheClass
' Code
End Class
End Namespace
Và mt source file khác trong cùng project vi code:
Namespace Vovisoft
Public Class TheOtherClass
' Code
End Class
End Namespace
Vy thì trong Namespace Vovisoft ta có hai Classes TheClass và TheOtherClass.
Nh là, by default, Root Namespace ca mt VB.NET project là tên ca project y.
Khi ta dùng Namespace block structure là chúng ta đang thêm mt tng tên vào Root
Namespace. Do đó, trong thí d trên nếu tên project là MyProject thì, t bên ngoài
project y, ta có th declare mt variable như sau:
Private myObject As MyProject.Vovisoft.TheClass
To ra Methods
Methods trong VB.NET có hai th: Sub và Function. Function thì phi return mt
kết qu. By default, parameters ca Method là ByVal ch không phi ByRef. Tc là
nếu mun parameter nào ByRef thì phi nh khai ra rõ ràng.
Nhc li là khi mt variable được passed vào trong mt method bng ByVal thì
system cho method đó mt copy (bn sao) ca variable, do đó, tr s ca variable
không b thay đổi bi công tác ca method. Ngược li, nếu mt variable được passed
vào trong mt method bng ByRef thì method dùng chính variable đó, do đó, tr s
ca variable có th b thay đổi bi công tác ca method.
Ta có th gii hn vic s dng mt method bng cách áp đặt mt Access Modifier
(sa đổi quyn truy nhp) hay còn gi là Scoping keyword (phm vi hot động):
Private - ch cho phép code trong cùng Class được gi.
Friend - ch cho phép code trong cùng project/component được
gi.
Public - cho phép ai gi cũng được.
Protected - cho phép code trong subclasses (classes con, cháu)
được gi.
Protected Friend - cho phép code trong cùng project/component
hay code trong subclasses được gi.
To ra Properties
Trong VB.NET ta ch dùng mt routine duy nht cho mi Property, vi hai ch Get và
Set như sau (không còn dùng ch Let ca VB6 na):
Private mdescription As String
Public Property Description() As String
Set (ByVal Value As String)
mdescription = Value
End Set
Get
Description = mdescription
End Get
End Property
ReadOnly và WriteOnly property
Bây gi nếu Property là ReadOnly ta s ly phn Set ra và viết:
Public ReadOnly Property Age() As Integer
Get
Age = 3
End Get
End Property
hay WriteOnly ta s y phn Get ra và viết:
Private _data As Integer
Public WriteOnly Property Data() As Integer
Set (ByVal Value As Integer)
_data = Value
End Set
End Property
Default Properties
Default Property là property ca Object mà program dùng khi ta ch cho tên ca
Object và không nói rõ property nào. Thí d trong VB6 khi ta code:
TextBox1 = "The house of rising sun"
VB6 hiu rng ta mun dùng Default Property text ca Textbox1 nên code y tương
đương vi:
TextBox1.text = "The house of rising sun"
Trong VB6 khi ta dùng keyword Set vi tên ca Object, thí d như:
Dim myTextBox As Textbox
Set myTextBox = TextBox1
program s hiu là ta mun nói đến chính Object myTextBox . Nếu không thì nó biết
ta mun nói đến Object Default Property mà làm biếng code cho rõ ra.
Trong VB.NET Default Property phi là mt Property array. Mt Property array là mt
property được Indexed (nói đến tng Item bng con s Index) ging như mt array. Lý
do chính ca s bt buc ny là để khi ln ln gia hai trường hp ta nói đến
Default property ca mt Object hay chính Object y, vì trong VB.NET ta không
còn dùng Set keyword cho Object assignment na (ta ch còn dùng keyword Set trong
Property mà thôi).
Bây gi h mun nói đến Default Property ca Object thì phi dùng Index. Thí d để
nói đến chính Object, ta code:
myValue = myObject
để nói đến Default Property Item 3 ca Object, ta code:
myValue = myObject(3)
S thay đổi t VB6 ny có nghĩa là mt property array procedure phi nhn mt
parameter. Thí d:
Private theData(100) As String
Default Public Property Data(ByVal Index As Integer) As String
Get
Data = theData(Index)
End Get
Set(ByVal Value As String)
theData(Index) = Value
End Set
End Property
T nay ta không th code:
TextBox1 = "Good morning!"
như trong VB6 được na, mà phi code:
TextBox1.text = "Good morning!"
Vì Property Text không còn là Default Property ca TextBox.
Overloading methods
Mt trong nhng chc năng đa din (Polymorphism) hùng mnh nht ca VB.NET là
overload (quá ti, có ri mà còn cho thêm) mt method. Overloading có nghĩa là ta có
th dùng cùng mt tên cho nhiu methods - min là chúng có danh sách các
parameters khác nhau, hoc là parameter dùng data type khác nhau (td: method ny
dùng Integer, method kia dùng String), hoc là s parameters khác nhau (td: method
ny có 2 parameters, method kia có 3 parameters).
Overloading không th được thc hin ch bng cách thay đổi data type ca Return
value ca Function. Phi có parameter list khác nhau mi được.
Dưới đây là thí d ta dùng Overloading để code hai Functions tìm data, mt cái cho
String, mt cái cho Integer:
Public Function FindData(ByVal Name As String) As ArrayList
' find data and return result
End Function
Friend Function FindData(ByVal Age As Integer) As ArrayList
' find data and return result
End Function
Để ý là ta có th cho mi overloading Function mt phm vi hot động (Scope on
implementation) khác nhau. Trong thí d trên ta dùng Access Modifier Public cho
Function đầu và Friend cho Function sau.
Object Lifecycle
Object Lifecycle (cuc đời ca Object) được dùng đ nói đến khi nào Object bt đầu
hin hu và khi nào nó không còn na. S dĩ ta cn biết rõ cuc đi ca mt Object
bt đu và chm dt lúc nào là đ tránh dùng nó khi nó không hin hu, tc là chưa ra
đời hay đã khut bóng ri.
New method
Trong VB6, khi mt Object thành hình thì Sub Class_Initialize được executed. Tương
đương như vy, trong VB.NET ta có Sub New(), gi là Constructor. VB.NET bo
đảm Sub New() s được CLR gi khi Object được instantiated và nó chy trước bt c
code nào trong Object.
Nếu Sub Class_Initialize ca mt Class Object trong VB6 không nhn parameter thì
Sub New() trong VB.NET chng nhng có nhn parameters mà còn cho phép ta nhiu
cách để gi nó. S khác bit trong Constructors ca VB6 và VB.NET rt quan trng.
Tưởng tượng ta có mt Khuôn làm bánh bông lan; khuôn là Class còn nhng bánh
làm ra t khuôn s là các Objects bánh bông lan. Nếu ta mun làm mt cái bánh bông
lan vi mt lp sô-cô-la trên mt thì công tác s gm có hai bước: