Оператор with
Операторwith
позволяет сократить обращение
к полям записи, а также к полям, методам и свойствам объекта. Он имеет вид:
with
имя записи или объекта
do
оператор
или
with
список имен
do
оператор
Всюду внутри оператора можно опускать имя записи при обращении к полю указанной записи или имя объекта при обращении к полю, методу или свойству указанного объекта. Например, пусть описана переменная
var DateOfBirthday = record
Day: Integer;
Month: Integer;
Year: Integer;
end;
Тогда присваивание значений ее полям без использования
оператора with
имеет вид:
DateOfBirthday.Day := 23;
DateOfBirthday.Month := 2;
DateOfBirthday.Year := 1965;
Использование оператора with
позволяет сократить
предыдущую запись:
with DateOfBirthday do
begin
Day := 23;
Month := 2;
Year := 1965;
end;
Если внешняя переменная имеет то же имя, что и поле (метод, свойство), то
предпочтение отдается полю (методу, свойству). При наличии вложенных операторов
with
вначале предпринимается попытка рассматривать переменную как поле записи
или объекта самого внутреннего оператора with
, затем непосредственно объемлющего
его оператора with
и т.д. Если оператор
with
содержит список объектов,
то они рассматривается справа налево. Например, если имеются описания
var
x,y,z: integer;
a: record
x,y: integer;
end;
b: record
x: integer;
end;
то фрагмент программы
with a,b do
begin
x := 1;
y := 2;
z := 3;
end;
эквивалентен фрагменту
with a do
with b do
begin
x := 1;
y := 2;
z := 3;
end;
а также фрагменту
b.x:=1;
a.y:=2;
z:=3;
Оператор with устарел и сейчас практически не используется.