Der einzige mir gerade in den Sinn kommende Fall, in dem man ein with nicht so einfach ersetzen kann, ist so etwas:
Delphi-Quellcode:
with TMyClass.Create do
begin
try
Property1 := Value1;
Property2 := Value2;
Property3 := Value3;
Method1(Param1, Param2);
finally
Free;
end;
end;
Das mache ich mit IniFiles ganz gerne so. Ansonsten ist with immer ersetzbar, indem man das was zwischen "with" und "do" steht (plus Punkt am Ende) vor alle Member in dem Block setzt. Bei dem obigen bräuchte man eben eine Variable mehr. Kein Beinbruch, aber hier wäre es zumindest nicht mit einfachem Ausschreiben getan. (Gilt für alle Fälle, in denen das with-Teil frische Instanzen oder Records zurückliefert, d.h. keine einfache Variable oder Referenz auf etwas schon bestehendes ist. Factory und so Dinge.)
Wenn man Komponenten im Code erzeugt kann das recht nett sein, ansonsten vermeide ich es aber auch nach Möglichkeit. Die Codevervollständigung befriedigt meinen Hang zur Schreibfaulheit ausreichend, und ich hab's dann lieber ganz ausführlich da stehen. (Ich denk mir meine sprechenden Bezeichner ja nicht aus, um sie nachher wieder durch sowas zu verklausulieren
)
Mehrfach-Withs gehören allerdings wirklich verboten. Die tun in aller Regel einfach nur weh.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)