重新编码阵列指针VB6

时间:2010-10-01 20:35:35

标签: arrays vb6

我正在尝试从不同的类重新调用成员对象数组。例如:

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的新手

戴夫

3 个答案:

答案 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对象。