есть ли способ заставить класс работать аналогично массивам? Допустим, у меня есть класс (например, Workers), где основным свойством является массив Workers, и ничего больше. Затем я заполняю класс следующим образом
Dim wks as new Workers
wks.add("Worker1")
wks.add("Worker2")
wks.add("Worker3")
Затем в модуле Workers Class:
Private Workers as Variant
Public Function add(ByVal val As Variant) As Long
ReDim Preserve Workers(LBound(Workers) To UBound(Workers) + 1)
Workers(UBound(Workers)) = val
add = UBound(Workers) - LBound(Workers) +1
End Function
Workers representation -> {"Worker1", "Worker2", "Worker3"}
Затем я хочу получить доступ к Worker по его индексу. Я знаю, как получить к нему доступ, например, wks.getWorker (1) , но я хочу получить к нему прямой доступ с помощью wks (1) , который должен вернуть «Рабочий 1» . В приведенном выше примере показано, что можно использовать обычный массив или коллекцию, но у меня есть много внутренних методов, но мне не хватает только доступа к свойству Workers для чтения / записи напрямую по его индексу.
возможно?
Редактировать После передачи в Коллекции класс выглядит следующим образом:
Option Explicit
Private Workers As Collection
Private Sub Class_Initialize()
Set Workers = New Collection
End Sub
Public Function add(ByVal val As Variant) As Long
Workers.add val
End Function
Public Property Get Item(Index As Integer) As Variant
Item = Workers(Index)
End Property
Public Property Set Item(Index As Integer, Value As Variant)
Workers.Remove Index
Workers.add Value, Before:=Index
End Property
со скрытыми атрибутами Атрибут Item.VB_UserMemId = 0 в Getterи Setter.
Начало работы отлично:
Dim wks As New Workers
wks.add "Worker1"
wks.add "Worker2"
wks.add "Worker3"
Debug.Print wks(2) ' <-- OK here
'wks(2) = "Second Worker" ' <-- By debugging this go to Getter not Setter and after Getter is done, it allerts with Runtime error '424': Object required
Set wks(2) = "Second Worker" ' <-- This alert immediately Compile error: Object required on "Second Worker" string
Debug.Print wks(2)
Печатает "Worker2" в консоли, спасибо за это, но все же я не могу установить новое значение для требуемого индексаРабочая коллекция.