Declare a static member procedure
Syntax
Description
Static methods do not have an implicit
This instance argument passed to them. This allows them to be used like normal non-member procedures (for example with callback procedure pointers), the only difference being that they are encapsulated in the
typename namespace and have access to
typename's
Private or
Protected members.
Static methods can be called directly anywhere in code, like normal non-member procedures, or on objects of type
typename, similar to non-static methods, however either way there is no implicit or explicit
This (or explicit
Base) access possible from within a static method.
For member procedures with
Static in their declaration,
Static can also be specified on the corresponding procedure bodies, for improved code readability.
Example
'' Example showing how the actual procedure invoked by a member can be set at runtime.
'' using static member procedures.
Type _Object
Enum handlertype
ht_default
ht_A
ht_B
End Enum
Declare Constructor( ByVal ht As handlertype = ht_default)
Declare Sub handler()
Private:
Declare Static Sub handler_default( ByRef obj As _Object )
Declare Static Sub handler_A( ByRef obj As _Object )
Declare Static Sub handler_B( ByRef obj As _Object )
handler_func As Sub( ByRef obj As _Object )
End Type
Constructor _Object( ByVal ht As handlertype )
Select Case ht
Case ht_A
handler_func = @_Object.handler_A
Case ht_B
handler_func = @_Object.handler_B
Case Else
handler_func = @_Object.handler_default
End Select
End Constructor
Sub _Object.handler()
handler_func(This)
End Sub
Sub _Object.handler_default( ByRef obj As _Object )
Print "Handling using default method"
End Sub
Sub _Object.handler_A( ByRef obj As _Object )
Print "Handling using method A"
End Sub
Sub _Object.handler_B( ByRef obj As _Object )
Print "Handling using method B"
End Sub
Dim objects(1 To 4) As _Object => _
{ _
_Object.handlertype.ht_B, _
_Object.handlertype.ht_default, _
_Object.handlertype.ht_A _
}
'' 4th array item will be _Object.handlertype.ht_default
For i As Integer = 1 To 4
Print i,
objects(i).handler()
Next i
Differences from QB
See also