Декларирует статическую процедуру-элемент
Синтаксис
Описание
Static методы не имеют неявный экземпляр аргумента
This
, передаваемый ей. Это позволяет их использовать как обычные процедуры, не
являющихся элементами (например с указателями на процедуру обратного
вызова), с той разницей, что они заключены в пространство
typename
и имеют доступ к элементам
typename Private
или
Protected.
Static методы могут быть вызваны непосредственно в любом месте
кода, как обычные процедуры, не являющиеся элементами типа
typename,
похожи на не-
Static методы, однако в любом случае
нет явного или неявного
This (или
явного
Base) .
Для процедур-элементов с
Static в своей декларации,
Static
также может быть указан на соответствующие определения процедур, для
улучшения читабельности кода.
Пример
'' Пример, показывающий, как фактическая процедура
ссылается на элемент и может быть установлена во время выполнения.
'' Использование статических процедур-элементов.
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 _
}
'' 4-й пункт массива будет _Object.handlertype.ht_default
For i As Integer = 1 To 4
Print i,
objects(i).handler()
Next i
Отличия от QB
См. также