Ключевое слово с - это хорошая возможность сделать ваш код более читабельным, но есть некоторые подводные камни.
Debugging:
При использовании такого кода:
with TMyClass.Create do
try
Add('foo');
finally
Free;
end;
Нет способа проверить свойства этого класса, поэтому всегда объявляйте переменную и используйте для этого ключевое слово с .
Интерфейсы:
При создании интерфейса в с предложением он действует до конца вашего метода:
procedure MemoryHog;
begin
with GetInterfaceThatTakes50MBOfMemory do
Whatever;
ShowMessage('I''m still using 50MB of memory!');
end;
Ясность
При использовании класса в предложении с , у которого уже есть свойства или имена методов, которые уже существуют в области действия, это может вас легко обмануть.
with TMyForm.Create do
Width := Width + 2; //which width in this with is width?
Конечно, при наличии повторяющихся имен вы используете свойства и методы класса, объявленного в вашем операторе with (TMyForm).