Es gehört zwar nicht mehr zum Thema, aber mal ein ganz simples Beispiel:
Delphi-Quellcode:
type
TUsedClass = class
strict private
FProp1: integer;
public
property Prop1: integer read FProp1 write FProp1;
end;
TUserClass = class
strict private
FProp2: integer;
public
procedure DoSomeWork;
property Prop2: integer read FProp2 write FProp2;
end;
{ TUserClass }
procedure TUserClass.DoSomeWork;
var
UsedClass: TUsedClass;
begin
UsedClass := TUsedClass.Create;
try
UsedClass.Prop1 := 42;
with UsedClass do
Prop2 := Prop1;
ShowMessage(IntToStr(Prop2));
finally
UsedClass.Free;
end;
end;
Delphi-Quellcode:
procedure TFormTest.btnTestClick(Sender: TObject);
begin
with TUserClass.Create do
try
DoSomeWork;
finally
Free;
end;
end;
Ausgabe: 42, also wie erwartet. Nun stellen wir uns vor, die TUsedClass ist eine gekaufte Klasse/Komponente, und wir spielen uns ein Update ein:
Delphi-Quellcode:
type
TUsedClass = class
strict private
FProp1: integer;
FProp2: integer;
public
property Prop1: integer read FProp1 write FProp1;
property Prop2: integer read FProp2 write FProp2;
end;
Was wir denn jetzt ausgegeben, wenn wir den Button anklicken? Gut, man könnte überall, wo die eigene Instanz gemeint ist, vorsichtshalber ein "self." davorschreiben, aber dann ist der Hauptgrund für das with (weniger Tipparbeit) ja auch irgendwie wieder hinfällig.