SLIM писал(а):То есть по сути это только "замедляет" все что можно? Зачем тогда вооще такой способ придумали?
Нет.
Во-первых, проверка осуществляется и при работе с обычными ссылками. Просто с DAN-ссылками в резульатет этой проверки создаётся
новый объект, а обычными ссылками —
ошибка "Object variable or with block variable not set".
Во-вторых, всё чуть хитрее и проверка осуществляется не каждый раз. Есть такое понятие как безопасный контекст. Это область кода, где если ссылка была установлена в начале, то она гарантированно останется установленой на протяжении всего БК.
БК начинается проверкой на Nothing, и заканчивается:
- Непосредственным изменением ссылки
- Вызовом любой процедуры (для глобальных ссылок)
- Вызовом любой процедуры, при условии что ссылка передаётся ByRef (для статических и нестатических локальных ссылок)
Скажем, для кода
- Код: Выделить всё
SomeObj.SomeMethod 1, 2, "asd"
SomeObj.SomeCoolMethod
SomeObj.SaveAllData
SomeObj.ReloadProperties
SomeObj.Serialize
проеверка осуществяется только один раз — перед выполнением первого statement'а. Потому что делать её в остальных случаях бессмысленно — с ссылкой гарантировано ничего не произошло — безопасный контекст не прерывается на протяжении всего этого кода.
SLIM писал(а):в VB усть таки недокументируемые ф-ии, тем немение они использутся. Почему бы и нет
Нет этих функций в языке Visual Basic. Они есть в конкретной реализации компилятора/рантайма для этого языка. Если, например, Sun возьмётся делать свой компилятор для VB, то там этих функций совершенно не обязано быть.