【问题标题】:ReDim an Array Pointer VB6ReDim 数组指针 VB6
【发布时间】:2010-10-31 07:53:23
【问题描述】:

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

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 很陌生

戴夫

【问题讨论】:

    标签: arrays vb6


    【解决方案1】:

    Redim 不会复制数组。

    我认为 4eturning array from a property get 更有可能创建一个副本。文档不是很清楚。 http://msdn.microsoft.com/en-us/library/aa261343(VS.60).aspx

    使用公共成员变量会更简单。为什么不使用集合而不是数组呢?

    【讨论】:

    • 是的,返回的是“副本”(值),而不是对原始文件的引用。
    • 感谢 MarkJ 和 Regex 的帮助。从现代语言回到 VB 6 非常有趣。
    【解决方案2】:

    我从未研究过 VB6,但如果我猜测一下,我认为当您使用 ReDim 时,它会创建现有 Array 的副本并将 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 程序员,所以我可能会对此有所保留。

    【讨论】:

    • 啊有趣。这是我的代码不起作用的一个合理原因。任何人都可以确认 ReDim 的行为吗?或者可能有任何其他优雅的方法来处理我的案件?
    • 我已经决定添加一个 Let 属性并在我重新调整数组后立即调用 let。但是谢谢,您在 ReDim 上的信息有助于理解它的工作原理。
    • @MarkJ,好电话...我想我的答案可能已经离题了。正如我所说:我不是 100% 使用 VB6,但我希望我至少可以为 Dave 指明正确的方向。现在我会支持你的答案,但我希望 Dave 会回来并将你标记为答案,以便你获得荣誉。
    【解决方案3】:

    您可能还想考虑 Dictionary 对象。

    【讨论】:

      猜你喜欢
      • 2017-10-12
      • 1970-01-01
      • 2016-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多