VBA и ссылки на объекты - PullRequest
       14

VBA и ссылки на объекты

1 голос
/ 16 апреля 2020

Я не понимаю, как оператор Set работает в VBA.

Ниже тестового метода, где b задается как ссылка на объект. Тогда объект устанавливается в ничто. Это также должно влиять на объект b, поскольку он также ссылается на тот же объект. Но, тем не менее, объект b все еще не поврежден и может отображать коллекцию. Как это возможно?

Private Sub Test()

    Dim a As Collection
    Dim b As Collection

    Set a = New Collection

    a.Add "High", "one"
    a.Add "Five", "two"
    a.Add "!", "three"

    Set b = a

    Debug.Print a.Item("one") & " " & a.Item("two") & a.Item("three")

    Set a = Nothing

    Debug.Print b.Item("one") & " " & b.Item("two") & b.Item("three")

    Set b = Nothing

End Sub

1 Ответ

1 голос
/ 16 апреля 2020

Я думаю, что ваше замешательство больше связано с тем, что делает Set a = Nothing.

Из Nothing документов:

Ничего ключевое слово используется для отсоединения объектной переменной от фактического объекта.

...

Несколько переменных объекта могут ссылаться на один и тот же фактический объект. Когда Nothing назначено переменной объекта, эта переменная больше не относится к реальному объекту.

Когда несколько переменных объекта ссылаются на один и тот же объект, память и системные ресурсы, связанные с объектом которые ссылаются на переменные, освобождаются только после того, как для всех них установлено Ничего , либо явно с помощью Установить , либо неявно после того, как последняя переменная объекта, ссылающаяся на фактический объект, выходит из области видимости.

a и b оба ссылаются на одну и ту же коллекцию. После Set a = Nothing, b все еще ссылается на неизмененную коллекцию.

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