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 устарел и сейчас практически не используется.