- Về thái độ:
c. Ứng dụng phương thức thiết lập
3.4 Thuộc tính Property
Câu lệnh Property được sử dụng để dùng để gán giá trị cho một thuộc tính, một biến thành phần hoặc lấy giá trị của một thuộc tính, một biến thành phần đã được khai báo trong Module, Class hoặc Structure.
Cú pháp khai báo thuộc tính:
' Khai báo biến lưu giữ giá trị của thuộc tính Private mthuoctinh As <Kiểu dữ liệu>
[<Từ khoá>] Property Thuoc_tinh() As <Kiểu dữ liệu> ' Truy xuất giá trị của thuộc tính
Get
Return mthuoctinh End Get
61 ' Gán trị cho thuộc tính
Set (ByVal Value As <Kiểu dữ liệu>) mthuoctinh = Value
End Set End Property
- Một thuộc tính có thể có thủ tục Get (đọc), thủ tục Set (ghi), hoặc cả hai - Nếu không có các từ khóa chỉ phạm vi Public, Protected, Private, Friend thì thuộc tính (Property) của thủ tục Get và thủ tục Set sẽ mặc định là Public.
- Các từ khóa khai báo trong cú pháp trên bao gồm
* Default:
Khai báo thuộc tính mặc định. Các thuộc tính này phải có tham số và có thể gán và truy xuất không cần chỉ ra tên thuộc tính.
Một thuộc tính chỉ có thể là thuộc tính mặc định nếu thỏa các điều kiện:
Mỗi Class chỉ được có một thuộc tính mặc định, phải kể đến cả các thuộc tính kế thừa.
Thuộc tính mặc định không được là Shared hay Private
Nếu một thuộc tính nạp chồng (Overloaded) là mặc định thì tất cả các thuộc tính cùng tên cũng phải khai báo mặc định.
Thuộc tính mặc định phải có ít nhất một tham số
Cú pháp:
Private mthuoctinh As <Kiểu_DL>
Default Public Property Thuoc_tinh(Index as Integer) As <Kiểu_DL> Get
Return mthuoctinh End Get
Set (ByVal Value As <Kiểu dữ liệu>) …
mthuoctinh = Value End Set
End Property
* ReadOnly
Cho biết thuộc tính chỉ được phép đọc không cho phép gán. Cú pháp:
62 Private mthuoctinh As <Kiểu dữ liệu>
Public ReadOnly Property Thuoc_tinh() As <Kiểu dữ liệu> Get
Return mthuoctinh End Get
End Property
* WriteOnly
Cho biết thuộc tính chỉ được phép gán không cho phép đọc. Cú pháp:
Private mthuoctinh As <Kiểu dữ liệu>
Public WriteOnly Property Thuoctinh() As String Set (ByVal Value As String)
mthuoctinh = Value End Set
End Property
* Overloads
Cho biết thuộc tính này nạp chồng một hoặc nhiều thuộc tính có cùng tên được định nghĩa trên lớp cơ sở. Danh sách tham số trong thuộc tính này phải khác với danh sách tham số của mỗi thuộc tính nạp chồng khác về số lượng, hoặc về các kiểu dữ liệu hoặc cả hai.
Chúng ta không cần phải dùng từ khóa Overloads khi tạo các thuộc tính nạp chồng trong một lớp. Nhưng nếu đã khai báo cho một thì phải khai báo cho tất cả.
Không được phép sử dụng cả hai từ khóa sau một lượt: Overloads và Shadows trong cùng một thuộc tính.
* Overrides
Cho biết thuộc tính ghi chồng một thuộc tính cùng tên của lớp cơ sở. Số lượng tham số, kiểu dữ liệu của tham số cũng như kiểu giá trị trả về phải khớp với của lớp cơ sở.
* Overridable
Cho biết thuộc tính này được phép ghi chồng trong lớp Con.
* NotOverridable
Cho biết thuộc tính không được phép ghi chồng trong lớp Con. Mặc nhiên, các thuộc tính là không được phép ghi chồng.
63
* MustOverride
Cho biết thuộc tính không được cài đặt trong lớp và phải được cài đặt ở lớp Con.
* Shadows
Cho biết thuộc tính che lấp một thuộc tính có tên tương tự, hoặc một tập hợp các thuộc tính nạp chồng của lớp cơ sở. Tham số và giá trị trả về không nhất thiết phải như trong thuộc tính bị che. Thuộc tính bị che không còn giá trị trong lớp che nó.
* Shared
Cho biết thuộc tính được chia sẻ - nghĩa là thuộc tính không gắn chặt với một thể hiện nào của lớp nhưng được sử dụng chung giữa các thể hiện của một lớp.
Ví dụ: Sử dụng câu lệnh Property dùng để gán giá trị và lấy giá trị đối với thuộc tính intMaSo trong class CHocSinh.
Khai báo định nghĩa phương thức. Public Class CHocSinh
Private intMaSo As Integer Private strHoTen As String Private dblToan As Double Private dblVan As Double
Private dblTrungBinh As Double Private intMaKhoi As Integer Property _MaSo() As Integer Get
Return intMaSo End Get
Set(ByVal value As Integer) intMaSo = value End Set End Property End Class Hướng dẫn sử dụng Module Module1 Sub Main()
Dim hs As New ChocSinh hs._MaSo = 5
Dim a As Integer = hs._MaSo ...
64 End Sub
End Module