Thema: Delphi Frage zu "absolute"

Einzelnen Beitrag anzeigen

DevilsCamp
(Gast)

n/a Beiträge
 
#9

Re: Frage zu "absolute"

  Alt 17. Mär 2009, 13:01
Habe folgendes getestet (mit Freepascal, Delphi steht mir im Moment nicht zur Verfügung):
Delphi-Quellcode:
program hilfe;

{$mode objfpc}{$H+}

uses SysUtils, Classes;

type
  TKla1 = class
  public
    Feins: Longint;
  end;
  
  TKla2 = class(TKla1)
  public
    Fzwei: Longint;
  end;
  
  TKlasse1 = class
  public
    Ftest: TKla1;

    constructor Create;
    destructor Destroy; override;
  end;
  
  TKlasse2 = class(TKlasse1)
  public
    function GetTest: Longint;
  end;

constructor TKlasse1.Create;
begin
  Ftest := TKla1.Create;
  Ftest.Feins := 10;
end;

destructor TKlasse1.Destroy;
begin
  Ftest.Free;
  
  inherited Destroy;
end;

function TKlasse2.GetTest: Longint;
var
  ei: TKla2; // absolute Ftest;
begin
  ei := TKla2(Ftest);
  Ftest.Feins := 20;
  Result := ei.Feins;
end;
  
var
  bla: TKlasse2;
begin
  bla := TKlasse2.Create;
  WriteLn(Format('Test = %d', [bla.Ftest.Feins]));
  WriteLn(Format('Test = %d', [bla.GetTest]));
  WriteLn(Format('Test = %d', [bla.Ftest.Feins]));
  bla.Free;
end.
Als Ergebnis bekomme ich:
Code:
Test = 10
Test = 20
Test = 20
Ersetze ich die Methode TKlasse2.GetTest durch:
Delphi-Quellcode:
function TKlasse2.GetTest: Longint;
var
  ei: TKla2; // absolute Ftest;
begin
  ei := TKla2(Ftest);
  ei.Feins := 20;
  Result := FTest.Feins;
end;
dann erhalte ich ebenfalls
Code:
Test = 10
Test = 20
Test = 20
Das Typecasting verhält sich (zumindest bei diesem Test) genauso wie es sich mit absolute verhalten sollte.
Allerdings habe ich jetzt nicht getestet, wie es mit Typen aussieht, die keine Objekte sind (z.B. Double <-> Int64).
  Mit Zitat antworten Zitat