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