Удалить указатель массива VB6 - PullRequest
1 голос
/ 02 октября 2010

Я пытаюсь переопределить массив объектов-членов из другого класса. Например:

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, похоже, не перезаписывает член mStuffArray в Class1. Есть идеи, что я делаю не так? Простите, если мой VB6 выглядит странно или соглашения об именах не являются стандартными, мне пришлось погрузиться в какой-то старый устаревший код и я новичок в VB6

Dave

Ответы [ 3 ]

3 голосов
/ 02 октября 2010

Redim не делает копию массива.

Я думаю, что более вероятно, что 4 при извлечении массива из свойства get создает копию.Документы не очень понятны.http://msdn.microsoft.com/en-us/library/aa261343(VS.60).aspx

Было бы проще использовать переменную-член Public.И почему бы не использовать коллекцию, а не массив?

1 голос
/ 02 октября 2010

Я никогда не заглядывал в VB6, но если бы я предположил, я думаю, что когда вы используете ReDim, он создает копию существующего массива и изменяет tStuffArray, чтобы он указывал на новую копию.Однако pClass1.mStuffArray по-прежнему ссылается на старый массив.

Документация для ReDim гласит, что " ReDim создает новый массив, копируя все элементы из существующего массива"

Я бы порекомендовал добавить в Class1 метод, который выполняет ReDim для закрытой переменной mStuffArray.

Dim mStuffArray() As New clsStuff

Property Get StuffArray() As clsStuff()
    StuffArray = mStuffArray
End Property

Sub Foo()
     ReDim mStuffArray(1 To 2)
End Sub

Надеюсь, это работает.Как я уже сказал, я не программист VB6, так что я могу отключиться.

0 голосов
/ 31 октября 2010

Возможно, вы захотите рассмотреть объект Dictionary.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...