Записи с тегами ‘type’

Jun11

Приведение типов

Мне всегда казалось, что 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'.

Читать далее »