0

我在“声明”模块中定义为公共的二维数组的类中使用 Redim。但是,根据 Redim 之后程序流程的位置,可能会丢失尺寸。模式是,当我在该类中实例化另一个对象(类)时,然后在该新对象中运行小进程并返回公共数组的维度较低。因此,如果新对象从未被实例化出去工作,则结果确认不会发生元素丢失。

在我的示例中,Redim 是 A(20,1),但是在使用实例化类完成一项小的外部工作之后(在这个类之外,我们在 --> 使用 Redim),尺寸是 A(19,0)。

Redim 有基于使用位置的规则,所以我的问题是如何保留在声明模块中声明公共数组,然后在实例化对象(类)中的这些数组上使用 Redim 而不会丢失维度?

下面是示例代码,这将导致此问题:

Module mymod()
   Public A(,) As single
End Module

In button 1:
Dim obj as New Test

Class Test
  Sub New
     Call mytest()
  End Sub

  Sub mytest()
    Redim A(20,1)
    'Here is where A will have dimensions (20,1)
     Dim myobj as As New ClassB
    'Here is where A will have dimensions (19,0)
  End Sub
End Class

Class ClassB
  Sub New()
    Msgbox("hello")
  End Sub
End Class
4

1 回答 1

0

您如何确定尺寸发生了变化?

我将代码修改为:

Public Class Form1

    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        Dim obj As New Test
    End Sub

End Class

Module mymod
    Public A(,) As Single
End Module

Class Test

    Sub New()
        Call mytest()
    End Sub

    Sub mytest()
        ReDim A(20, 1)
        'Here is where A will have dimensions (20,1)
        Debug.Print("Before...")
        Debug.Print("Lower = " & A.GetLowerBound(0))
        Debug.Print("Upper = " & A.GetUpperBound(0))
        Dim myobj As New ClassB
        'Here is where A will have dimensions (19,0)
        Debug.Print("After...")
        Debug.Print("Lower = " & A.GetLowerBound(0))
        Debug.Print("Upper = " & A.GetUpperBound(0))
    End Sub

End Class

Class ClassB
    Sub New()
        Msgbox("hello")
    End Sub
End Class

并得到了这个输出:

Before...
Lower = 0
Upper = 20
After...
Lower = 0
Upper = 20
于 2013-06-29T22:55:09.327 回答