theo hat geschrieben:Warf hat geschrieben:Man braucht nicht mal ne Variable:
Den Gebrauch von "with" sollte man nun wirklich nicht noch fördern...
Naja, kommt drauf an. Wenn man z.B. ein sehr langes prefix hat dann lohnt es sich auf jeden fall:
Code: Alles auswählen
Form2.Image1.Bitmap.Canvas.MoveTo(0,0);
Form2.Image1.Bitmap.Canvas.LineTo(Form2.Image1.Bitmap.Width,Form2.Image1.Bitmap.Height);
// vs
With Form2.Image1.Bitmap do
begin
Canvas.MoveTo(0,0);
Canvas.LineTo(Width, Height);
end;
Ich persönlich verwende es auch immer wenn ich ein Objekt für wenige Operationen brauche, z.B. eine Textdatei in einen stream laden:
Code: Alles auswählen
With TStringList.Create do
try
LoadFromFile(FName);
SaveToStream(Stream);
finally
Free;
end;
Weder LoadFromFile noch SaveToStream sind in irgendeiner form mehrdeutig im Kontext einer Formsklasse, daher spricht absolut nichts dagegen.
Man muss sich nur an ein paar Spielregeln halten:
1. Keine geschachtelten With
2. Auf Methoden und Felder des Objektes innerhalb von with
immer mit Self zugreifen
3. Mehrdeutige bezeichnet mit unitname.Bezeichner aufrufen (z.B. wenn man eine property Pos hat dann würde man System.Pos für die Funktion verwenden).
Und wenn man nicht in einem Objekt ist spricht sogar absolut nichts gegen with.
Wovon ich nichts halte sind größere With blöcke, mehr als 5-10 Zeilen würde ich auch nicht in einen With block hauen