Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Array Property Frage (https://www.delphipraxis.net/173636-array-property-frage.html)

wurzelzwerg 7. Mär 2013 19:12

Delphi-Version: 5

Array Property Frage
 
Hallo,
ich hab eine Klasse mit einer array property. Das array enthält records.
Hier mal das ganze vereinfacht.
Wieso kann ich den record-Werten nichts zuweisen?


Delphi-Quellcode:
type
  TRecA = record
    number1, number2: integer;
  end;

  TTest = class
  private
    FArray1: array [0 .. 10] of TRecA;
    function Get(index: integer): TRecA;
    procedure Put(index: integer; const value: TRecA);
  public
    property Array1[index: integer]: TRecA read Get write Put; default;
  end;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private

  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  test: TTest;

implementation

{$R *.dfm}

function TTest.Get(index: integer): TRecA;
begin
  Result:= FArray1[index];
end;

procedure TTest.Put(index: integer; const value: TRecA);
begin
  FArray1[index]:= value;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  if test = nil then test:= TTest.Create;
  test.Array1[0].number1:= 10; // kann nicht zugewiesen werden
end;

Medium 7. Mär 2013 19:36

AW: Array Property Frage
 
Das Problem ist der Record, nicht das Array. Von der Property bekommst du eine Kopie des Records zurück, keine Referenz auf den im Array tatsächlich bestehenden. Du musst also entweder dem Array-Element einen ganzen neuen Record am Stück zuweisen, oder auf eine Klasse umsteigen. (Bei einer Klasse würde eine Referenz von der Property geliefert, und es ginge so wie du es hier vor hast.)

wurzelzwerg 7. Mär 2013 21:14

AW: Array Property Frage
 
Danke, alles klar.


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:45 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz