Property
Declares or defines a property in a type or class
{ Type | Class } typename
Property typename.fieldname () As datatype [ Export ]
Property typename.fieldname ( [ ByRef | ByVal ] new_value As datatype ) [ Export ]
Property typename.fieldname ( [ ByRef | ByVal ] index As datatype ) As datatype [ Export ]
Property typename.fieldname ( [ ByRef | ByVal ] index As datatype, [ ByRef | ByVal ] new_value As datatype ) [ Export ]
typename
fieldname
Property fields are used to get and set values of a Type or Class in the same way as other data fields except instead of a simple assignment to a field or a value retrieved from field, a procedure is executed.
typename is the name of the type for which the Property method is declared and defined. Name resolution for typename follows the same rules as procedures when used in a Namespace.
A Property may optionally have one index parameter. When indexed, properties are accessed as fieldname(Index) = Value.
A hidden This parameter having the same type as typename is passed to the property procedure. This is used to access the fields of the Type or Class.
Note: A standard Property (get & set) does not work with combination operators (as "+="). But a result byref get-Property (as more generally any result byref function) works with combination operators.
Output:
Output:
Syntax
{ Type | Class } typename
Declare Property fieldname () As datatype
Declare Property fieldname ( [ ByRef | ByVal ] new_value As datatype )
Declare Property fieldname ( [ ByRef | ByVal ] index As datatype ) As datatype
Declare Property fieldname ( [ ByRef | ByVal ] index As datatype, [ ByRef | ByVal ] new_value As datatype )
End { Type | Class }Declare Property fieldname ( [ ByRef | ByVal ] new_value As datatype )
Declare Property fieldname ( [ ByRef | ByVal ] index As datatype ) As datatype
Declare Property fieldname ( [ ByRef | ByVal ] index As datatype, [ ByRef | ByVal ] new_value As datatype )
Property typename.fieldname () As datatype [ Export ]
statements
End PropertyProperty typename.fieldname ( [ ByRef | ByVal ] new_value As datatype ) [ Export ]
statements
End PropertyProperty typename.fieldname ( [ ByRef | ByVal ] index As datatype ) As datatype [ Export ]
statements
End PropertyProperty typename.fieldname ( [ ByRef | ByVal ] index As datatype, [ ByRef | ByVal ] new_value As datatype ) [ Export ]
statements
End PropertyParameters
typename
fieldname
name of the property
new_value the value passed to property to be assigned
index the property index value
Description
Property fields are used to get and set values of a Type or Class in the same way as other data fields except instead of a simple assignment to a field or a value retrieved from field, a procedure is executed.
typename is the name of the type for which the Property method is declared and defined. Name resolution for typename follows the same rules as procedures when used in a Namespace.
A Property may optionally have one index parameter. When indexed, properties are accessed as fieldname(Index) = Value.
A hidden This parameter having the same type as typename is passed to the property procedure. This is used to access the fields of the Type or Class.
Note: A standard Property (get & set) does not work with combination operators (as "+="). But a result byref get-Property (as more generally any result byref function) works with combination operators.
Example
Type Vector2D
As Single x, y
Declare Operator Cast() As String
Declare Property Length() As Single
Declare Property Length( ByVal new_length As Single )
End Type
Operator Vector2D.cast () As String
Return "(" + Str(x) + ", " + Str(y) + ")"
End Operator
Property Vector2D.Length() As Single
Length = Sqr( x * x + y * y )
End Property
Property Vector2D.Length( ByVal new_length As Single )
Dim m As Single = Length
If m <> 0 Then
'' new vector = old / length * new_length
x *= new_length / m
y *= new_length / m
End If
End Property
Dim a As Vector2D = ( 3, 4 )
Print "a = "; a
Print "a.length = "; a.length
Print
a.length = 10
Print "a = "; a
Print "a.length = "; a.length
As Single x, y
Declare Operator Cast() As String
Declare Property Length() As Single
Declare Property Length( ByVal new_length As Single )
End Type
Operator Vector2D.cast () As String
Return "(" + Str(x) + ", " + Str(y) + ")"
End Operator
Property Vector2D.Length() As Single
Length = Sqr( x * x + y * y )
End Property
Property Vector2D.Length( ByVal new_length As Single )
Dim m As Single = Length
If m <> 0 Then
'' new vector = old / length * new_length
x *= new_length / m
y *= new_length / m
End If
End Property
Dim a As Vector2D = ( 3, 4 )
Print "a = "; a
Print "a.length = "; a.length
a.length = 10
Print "a = "; a
Print "a.length = "; a.length
Output:
a = (3, 4) a.length = 5 a = (6, 8) a.length = 10Property Indexing:
'' True/False
Namespace BOOL
Const FALSE = 0
Const TRUE = Not FALSE
End Namespace
Type BitNum
Num As UInteger
'' Get/Set Properties each with an Index.
Declare Property NumBit( ByVal Index As Integer ) As Integer
Declare Property NumBit( ByVal Index As Integer, ByVal Value As Byte )
End Type
'' Get a bit by it's index.
Property BitNum.NumBit( ByVal Index As Integer ) As Integer
Return Bit( This.Num, Index )
End Property
'' Set a bit by it's index.
Property BitNum.NumBit( ByVal Index As Integer, ByVal Value As Byte )
'' Make sure index is in Integer range.
If Index >= ( SizeOf(This.Num) * 8 ) Then
Print "Out of uInteger Range!"
Exit Property
Else
If Index < 0 Then Exit Property
End If
If Value = BOOL.FALSE Then
This.Num = BitReset( This.Num, Index )
End If
If Value = BOOL.TRUE Then
This.Num = BitSet( This.Num, Index )
End If
End Property
Dim As BitNum Foo
Print "Testing property indexing with data types:"
Print "FOO Number's Value: " & Foo.Num
'' Set the bit in the number as true.
Foo.NumBit(31) = BOOL.TRUE
Print "Set the 31st bit of FOO"
'' Print to see if our bit has been changed.
Print "FOO Number's Value: " & Foo.Num
Print "FOO 31st Bit Set? " & Foo.NumBit(31)
Sleep
Print ""
Namespace BOOL
Const FALSE = 0
Const TRUE = Not FALSE
End Namespace
Type BitNum
Num As UInteger
'' Get/Set Properties each with an Index.
Declare Property NumBit( ByVal Index As Integer ) As Integer
Declare Property NumBit( ByVal Index As Integer, ByVal Value As Byte )
End Type
'' Get a bit by it's index.
Property BitNum.NumBit( ByVal Index As Integer ) As Integer
Return Bit( This.Num, Index )
End Property
'' Set a bit by it's index.
Property BitNum.NumBit( ByVal Index As Integer, ByVal Value As Byte )
'' Make sure index is in Integer range.
If Index >= ( SizeOf(This.Num) * 8 ) Then
Print "Out of uInteger Range!"
Exit Property
Else
If Index < 0 Then Exit Property
End If
If Value = BOOL.FALSE Then
This.Num = BitReset( This.Num, Index )
End If
If Value = BOOL.TRUE Then
This.Num = BitSet( This.Num, Index )
End If
End Property
Dim As BitNum Foo
Print "Testing property indexing with data types:"
Print "FOO Number's Value: " & Foo.Num
'' Set the bit in the number as true.
Foo.NumBit(31) = BOOL.TRUE
Print "Set the 31st bit of FOO"
'' Print to see if our bit has been changed.
Print "FOO Number's Value: " & Foo.Num
Print "FOO 31st Bit Set? " & Foo.NumBit(31)
Sleep
Print ""
Output:
Testing property indexing with data types: FOO Number's Value: 0 Set the 31st bit of FOO FOO Number's Value: 2147483648 FOO 31st Bit Set? -1
See also