我正在尝试从不同的类重新调用成员对象数组。例如:
Class1.cls
Dim mStuffArray() As New clsStuff
Property Get StuffArray() As clsStuff()
StuffArray = mStuffArray
End Property
Class2.cls
Private Sub Foo(ByRef pClass1 As Class1)
Dim tStuffArray() As clsStuff
tStuffArray = pClass1.StuffArray
ReDim tStuffArray(1 To 2)
End Private
这里的问题是,Foo似乎不是在Class1中重新调用成员mStuffArray。知道我做错了什么吗?请原谅我,如果我的VB6看起来很奇怪或命名约定不标准,我不得不深入研究一些旧的遗留代码并且是VB6的新手
戴夫
答案 0 :(得分:3)
Redim不会复制数组。
我认为从属性get中获取数组更有可能创建一个副本。文档不是很清楚。 http://msdn.microsoft.com/en-us/library/aa261343(VS.60).aspx
使用Public成员变量会更简单。为什么不使用Collection而不是数组?
答案 1 :(得分:1)
我从未研究过VB6,但如果我猜测,我认为当你使用ReDim时,它会创建现有数组的副本并更改tStuffArray以指向新副本。但是,pClass1.mStuffArray仍引用旧数组。
documentation for ReDim表示“ ReDim 会创建一个新数组,复制现有数组中的所有元素”
我建议在Class1上添加一个方法,在私有mStuffArray变量上执行ReDim。
Dim mStuffArray() As New clsStuff
Property Get StuffArray() As clsStuff()
StuffArray = mStuffArray
End Property
Sub Foo()
ReDim mStuffArray(1 To 2)
End Sub
希望这有效。正如我所说,我不是VB6程序员,所以我可能会对此不感兴趣。
答案 2 :(得分:0)
您可能还想考虑Dictionary对象。