我在循环中创建了一个新对象,并将该对象添加到集合中; 但是当我读回之后,它总是被我添加的最后一个对象填满.我想出了两种解决方法,但我根本不明白为什么我的初始实现是错误的.
原版的:
Dim oItem As Variant
Dim sOutput As String
Dim i As Integer
Dim oCollection As New Collection
For i = 0 To 10
Dim oMatch As New clsMatch
oMatch.setLineNumber i
oCollection.Add oMatch
Next
For Each oItem In oCollection
sOutput = sOutput & "[" & oItem.lineNumber & "]"
Next
MsgBox sOutput
Run Code Online (Sandbox Code Playgroud)
这导致每行数为10; 我显然没有创建新对象,而是每次通过循环使用相同的对象,尽管声明在循环内部.
所以,我在行Set oMatch = Nothing之前立即添加Next,这解决了问题,它现在是0到10.所以如果旧对象被明确销毁,那么它是否愿意创建一个新对象?我原以为通过循环的下一次迭代会导致循环中声明的任何东西因范围而被破坏?
好奇,我尝试了另一种声明新对象的方法:Dim oMatch As clsMatch: Set oMatch = New clsMatch.这也导致0到10.
任何人都可以向我解释为什么第一次实施是错误的?