VBScript Class Закрытый массив классов постоянно Пустой после присваивания

У меня возникла проблема, когда у меня есть класс со свойством, которое является массивом. Метод Load изменяет размер массива до количества записей в файле, создает новый класс Entry для этой записи файла и назначает его новому элементу в массиве свойств. Однако, когда я пытаюсь использовать этот массив вне моего метода Load, массив сохраняет правильный размер, но все элементы "Пустые". Ниже в основном то, что я пытаюсь сделать. Я предполагаю, что это проблема с назначением нового класса Entry, но я не уверен, как исправить это, будучи новым для VBScript. Ниже приведен небольшой код, который поможет вам понять, что я пытаюсь сделать.

Class Entry
    Public Name
End Class

Class Config
    Private theArray()

    Public Sub Load()
        ...
        Do While Not configFile.AtEndOfStream

        if(UBound(theArray) < theCount) Then
            ReDim Preserve theArray(theCount)
        End If

        Set theArray(theCount) = new Entry

        theArray(theCount).Name = "Bobby Joe Sue"
        Wscript.Echo theArray(theCount).Name & " is working"
    End Sub

    Public Function GetList()
        GetList = theArray
    End Function
End Class

Теперь, если я создаю экземпляр класса Config, вызываю метод load, присваиваю переменную результату GetList, я могу перебрать массив, и он будет иметь правильный размер. ОДНАКО, каждая запись в массиве пуста вместо экземпляра класса Entry, где я могу получить доступ к Entry.Name. Кто-нибудь есть какие-либо советы о том, что делать, чтобы это исправить?

2 ответа

Решение

Инициализация вашего массива не работает. Измени свой Class Config как это:

Class Config
  Private theArray

  Private Sub class_initialize()
    theArray = Array()
  End Sub

  '...
End Class

Может быть, вы что-то упускаете.

Set oConfig = New Config
oConfig.Load
aList = oConfig.List
Wscript.Echo "Type: " & TypeName(aList(0))
Wscript.Echo "Name: " & aList(0).Name

'> Bobby Joe Sue is working
'> Type: Entry
'> Name: Bobby Joe Sue

Class Entry
    Public Name
End Class

Class Config
    Private theArray()
    Private theCount

    Public Property Get List()
        List = theArray
    End Property

    Public Sub Load()
        theCount = theCount + 1
        ReDim Preserve theArray(theCount)
        Set theArray(theCount) = new Entry
        theArray(theCount).Name = "Bobby Joe Sue"
        Wscript.Echo theArray(theCount).Name & " is working"
    End Sub

    Private Sub Class_Initialize
        theCount = -1
    End Sub
End Class
Другие вопросы по тегам