Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

В чем разница...


Дмитрий К.К. ©   (2002-10-26 14:48:00) 

... между строчкой
with TreeView.Items do

и строчкой
with TreeView, Items do

?


AngeL B.   (2002-10-26 22:59:00) [1]


> 2 Юрий Зотов


После прочтения Object Pascal Reference вынужден признать вашу правоту. :) Они действительно вкладываются друг в друга.


Юрий Зотов   (2002-10-26 20:49:00) [2]

> причем на одном уровне видимости

Нет. Не на одном, а начиная с последнего. Сначала - Items, потом - TreeView. Это значит, что если у них есть одноименное свойство или метод, то будет подразумеваться Items, а не TreeView.


> Во втором случае Itemsне внутри TreeView, а отдельная переменная.

Нет. Будет подразумеваться именно тот Items, который TreeView.Items. Поскольку перед Itemsуже было with TreeView.


Набережных С.   (2002-10-26 17:44:00) [3]

В первом варианте в блоке with можно оперировать членами TreeView.Items, во втором - и TreeView, и TreeView.Items. При этом, если имеется некая внешняя переменная Items, то внутри блока with она будет недоступна.


AngeL B.   (2002-10-26 17:19:00) [4]

В первом случае ты оказызываешься внутри объекта TreeView.Items и компилятор неявно пытается подставить этот объект перед всеми идентификаторами внутри блока. То есть код оказывается в пространстве имен одного объекта.

Во втором - ты указываешь что ты одновременнохочешь расширить пространство имен на дваобъекта (можно больше).
При этом подразумевается существование как переменной TreeView, так и переменной Items, причем на одном уровне видимости. Во втором случае Items не внутри TreeView, а отдельная переменная.

Пример для большей ясности.


type
TA = record
_A, _B: Integer;
end;

TB = record
_C, _D: Integer;
end;

...

with A, B do _A := _D;


Наверх

Титульная страница Поиск, карта сайта Написать письмо