Please have a look at the following code, which I have run in VB6 and .NET:
Private Sub Form_Load()
Dim TestArray3() As String
TestArray3 = TestArrayFunction
End Sub
Private Function TestArrayFunction() As String()
Dim TestArray1(0 To 1) As String
Dim TestArray2() As String
TestArray1(0) = "Monday"
TestArray1(1) = "Tuesday"
TestArray2 = TestArray1
TestArray1(0) = "Wednesday"
End Function
When the program gets to the end of TestArrayFunction in VB6, the value of TestArray2(0) is “Monday”, however when run in .NET, it is “Wednesday”. I understand in .NET that an Array is an object and has two references pointing to it in TestArrayFunction. Why is this not the case in VB6?
I am struggling with this nearly daily. While it is perfectly possible to pass an array ByRef to a Function call, the ‘=’ sign will make a shallow copy.
But there is more strange behaviour of arrays in VB6, Suppose you have the following DateTimeClass classmodule in VB6:
You would expect to be able to write code like:
Or:
But you can’t. You have to do it like this:
What the reasons of the VB6 team were at the time to implement it thus? I don’t know…
I have abandoned the VB6 arrays and use Collections and Dictionaries nearly exclusively.