Приведение типов
Мне всегда казалось, что TType(Var) и Var as TType работает одинаково или, в крайнем случае, очень похоже. Так было до не давнего времени.
Вместе со знакомым выясняли одну багу (так и не выяснили причину, кстати):
program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils;type
TA = class
function GetResult: Integer; //virtual;
end;TB = class(TA)
function GetResult: Integer; //override;
end;{ TA }
function TA.GetResult: Integer;
begin
Result := 10;
end;{ TB }
function TB.GetResult: Integer;
begin
Result := 20;
end;var
B: TB;begin
B := TB.Create;
WriteLn(IntToStr(TA(B).GetResult));
WriteLn(IntToStr((B as TA).GetResult));ReadLn;
end.
Как по-вашему, что будет выведено, в результате данного кода? Если вы считаете, что будет выведено два раза '10', то вы не угадали. Будет выведено '10' и '20'.