| only for RuBoard |
3.2 Properties
In traditional OOP languages like C++, it is considered good practice to provide accessor methods to manipulate an object's state. For instance, if an object has a member variable named weight , a programmer often writes two functions. One function is used to get the value of weight , and another to set the valuesomething akin to get_Weight and set_Weight . To provide read-only access, the programmer would forego the get_ method .
Properties in VB.NET are merely a language construct used to provide this frequently used functionality and enforce good programming practice through the language.
|
Properties can be ReadOnly , WriteOnly , or both. Read-only properties contain a Get block that allows retrieval of a value, but prevents it from being changed:
Public ReadOnly Property Age( ) As Double
Get
Return Me.age
End Get
End Property Write-only properties use a Set block, which allows values to be initialized but not retrieved:
Public WriteOnly Property Age( ) As Double
Set
'age is a Private member variable
Me.age = value
End Set
End Property Properties that provide both read and write access must specify only an access modifier:
Public Property Age( ) As Double
Get
Return Me.age
End Get
Set (ByVal value As Double) Me.age = value
End Set
End Property In the Set block, you can specify the name and type of the incoming value. If you choose not to, the compiler uses "value" as the placeholder for the property value.
3.2.1 Read-only fields
The ReadOnly keyword can also be applied to member data. These fields can be initialized during object construction, but not after. Usually, member data, like the private member age from Example 3-2, is accessed through a property. But access to it can be tedious when you just want to provide access to a read-only value that does not need processing before you return it to the caller.
Public Class World
Public ReadOnly age As Double
End Class 3.2.1.1 Default properties
Default properties allow array-like access to a class. These properties are also known as indexers and are very useful for implementing collections. In Example 3-3, a collection of Planet objects is created and then iterated. You do not need to refer to the default property ( Item ) by name. The collection class can be used like an array. You can see its use in the For...Next loop at the bottom of Example 3-3.
Example 3-3. Default properties
Imports System
Imports System.Collections
Public Class Planet
Public ReadOnly Name As String
Public Sub New(ByVal name As String)
Me.Name = name
End Sub
End Class
Public Class Planets
Private myPlanets As New ArrayList( )
Default Public ReadOnly Property Item(ByVal idx As Integer) As Planet
Get
'Convert object in array list to Car and return
Return CType(myPlanets.Item(idx), Planet)
End Get
End Property
Public ReadOnly Property Count( ) As Integer
Get
Return myPlanets.Count
End Get
End Property
Public Sub Add(ByVal value As Planet)
myPlanets.Add(value)
End Sub
End Class
Public Class App
Public Shared Sub Main( )
Dim i As Integer
Dim myPlanets As New Planets( )
Dim p1 As New Planet("Neptune")
Dim p2 As New Planet("Venus")
Dim p3 As New Planet("Pluto")
'Add 3 planets to collection
myPlanets.Add(p1)
myPlanets.Add(p2)
myPlanets.Add(p3)
For i = 0 To myPlanets.Count - 1 Console.WriteLine(myPlanets(i).Name) Next i
End Sub
End Class | only for RuBoard |





