![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
В чем разница...
Дмитрий К.К. © (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;