Метод обратного вызова получает ссылки на исходные объекты, а не их копии.
Способ отправки аргументов по умолчанию - по значению. Если аргумент является ссылочным типом (объектом), это означает, что копия ссылки отправляется методу, а не то, что копия объекта создается и отправляется методу. Есть только один объект, но есть две ссылки на него.
Вам нужно отправлять аргумент только по ссылке, если вам нужно изменить переменную, метод все равно может получить доступ к объекту, если вы отправите аргумент по значению.
Пример:
Sub Test(ByVal x As StringBuilder, ByRef y As StringBuilder)
' accessing the objects
x.Append("1")
y.Append("2")
' remove the copy of the reference to x
x = Nothing
' remove the reference to y
y = Nothing
End Sub
Вызов метода:
Dim x As New StringBuilder("a")
Dim y As New StringBuilder("b")
Test(x, y)
Переменная x теперь будет указывать на StringBuilder
объект, содержащий "a1"
.
Переменная y будет Nothing
.
Существует StringBuilder
объект, содержащий "b2"
, на который у вас больше нет ссылки.