Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Objekte kopieren (https://www.delphipraxis.net/94173-objekte-kopieren.html)

Dawn87 17. Jun 2007 17:05


Objekte kopieren
 
Hallo,

folgendes:
Delphi-Quellcode:
// "Pseudo"-Delphi

var Topics: array of Topic;

Topics[n] := Topic; // Topic = Prozedurparameter

Topic.Free;

ShowMessage(Topics[n].Caption); // <-- schutzverletzung
Bei diesem Code wird anscheinend im Array Topics nur eine Referenzierung auf das Objekt Topic gespeichert. Wie kann ich eine "richtige" Kopie darin ablegen, auf die auch noch nach Topic.Free zugreifen kann?

Grüße
Stefan

CCRDude 17. Jun 2007 17:43

Re: Objekte kopieren
 
Erstmal: Klassennamen sollten das auch ausdrücken; TTopic wäre da sicherlich angebrachter.
Aber zur Frage: nur Du weißt, was in einem "Topic" drin ist, daher kannst eigentlich auch nur Du wissen, was genau kopiert werden soll. Prinzipiell:

Delphi-Quellcode:
NewTopic := TTopic.Create;
NewTopic.Assign(Topics[n]);
Assign musst Du dabei selber implementieren, schau mal in die Hilfe oder irgendeine RTL/VCL-Klasse dazu (unter Assign und TPersistent)...

Dawn87 17. Jun 2007 22:13

Re: Objekte kopieren
 
Hallo,

danke für Deine Antwort. Ich habe mir mal was zurecht gebastelt, leider bekomme ich eine Schutzverletzung:

Delphi-Quellcode:
procedure TTopic.Assign(Source: TPersistent);
begin
  if Source is TTopic then
  begin
    Caption := TTopic(Source).Caption;
    ID := TTopic(Source).ID;
  end;

  //inherited;
end;
Erkennst Du einen Fheler im Code?

mkinzler 17. Jun 2007 22:18

Re: Objekte kopieren
 
Ist TTopic auch ein Nachfahre von TPersistent

Dawn87 17. Jun 2007 22:55

Re: Objekte kopieren
 
Ja, ist er!

Grüße
Stefan

Muetze1 17. Jun 2007 23:01

Re: Objekte kopieren
 
Dann zeig mal ein wenig Code um den Assign() Aufruf drumherum, so wie du es jetzt gerade verwendest.


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:10 Uhr.

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