Auf jeden Fall ist (lComponent as TLabel) langsamer als TLabel(lComponent).
TLabel(lComponent) aber vorher in eine Variable vom Typen TLabel zu schreiben scheint keinen Unterschied zu geben.
Hier einmal ein Beispiel.
Wieso das so ist kann ich aber auch nicht genau sagen, würde mich aber auch interessieren.
Delphi-Quellcode:
type
TTest = class
Int: Integer;
end;
procedure TForm105.Button1Click(Sender: TObject);
var
lObject: TObject;
i : Integer;
lStopwatch: TStopwatch;
lTest: TTest;
begin
lObject := TTest.Create;
try
lTest := TTest( lObject);
lStopwatch := TStopwatch.StartNew;
for I := 0 to MaxInt do
begin
// (lObject as TTest).Int := i; // 8,7 Sekunden
// TTest( lObject).Int := i; // 2,5 Sekunden
// lTest.Int := i; // 2,5 Sekunden
end;
lStopwatch.Stop;
ShowMessage( lStopwatch.Elapsed.Duration.ToString);
finally
lObject.Free;
end;
end;
Da kann man sich ja mal ansehen, was der Compiler draus macht (siehe Anlage).
Bei "as" erfolgt noch ein Sprung woanders hin (in die system.pas, und dort werden eine Reihe von Befehlen abgearbeitet), das kostet zeit..