only for RuBoard |
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.
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
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.
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 |