![]() |
Re: TObject kopieren und zuweisen
hallo,
was spricht eigentlich gegen:
Delphi-Quellcode:
s := tMember.Create;
s.zahl := 12; p := tMember(s).Create; // nun ist p.zahl=12 ... p.zahl := 12589; gruß rené |
Re: TObject kopieren und zuweisen
Moin!
Zitat:
TMember(s) macht einen direkten TypeCast, der aber unsinnig ist, da s schon von dem Typ TMember ist. Und s.Create ist zwar witzig, aber was sollte das bringen? Eine neue Instanz wird nicht angelegt und die Variablen der Klassen werden auch nicht kopiert... MfG Muetze1 |
Re: TObject kopieren und zuweisen
Zitat:
Zitat:
|
Re: TObject kopieren und zuweisen
Liste der Anhänge anzeigen (Anzahl: 1)
Moin!
Zitat:
Also:
Code:
ruft nochmal direkt den Constructor der Klasse auf - besser: von der Instanz von s. Da s als Instanz schon vorhanden ist, ergo die Klasse schon angelegt ist, gibt der Constructor die Instanzenadresse von s zurück. Mit anderen Worten der obige Konstrukt ist das gleiche wie p := s; - mit anderen Worten s.Free; geht noch aber p.Free; geht in die Hose (ungültige Zeiger Op). Du instanziierst nix, sondern du bekommst die Klasse s zurückgeliefert, ergo keine 2. Instanz und keine Kopie der Klasse...
p := s.Create
Mein TestProgramm ist im Anhang.... MfG Muetze1 |
Re: TObject kopieren und zuweisen
Hallöchen!
Ich habe quasi das selbe problem :o) nur stellt es sich als noch etwas schwieriger hervor wenn man keine property auf die member variable hat sondern nur die member. also anstatt: Zitat:
Delphi-Quellcode:
jemand davon einen lösungsansatz? ich habe mir mal gedanken drüber gemacht.. man könnte z.B. eine memento klasse erstellen, was ich aber für sehr umständlich halte..
type TMember = class(TObject)
private FZahl: Integer; public procedure Assign(o: TMember); // property Zahl: Integer read FZahl write FZahl; end; würde dann so aussehen...
Delphi-Quellcode:
und so sähe dann der aufruf aus:type TMementoMember = class( TObject ) private FZahl : Integer; public property Zahl : integer read FZahl write FZahl; end; //.......... type TMember = class(TObject) private FZahl: Integer; public procedure SaveContent( coMemento : TMementoMember ); procedure RestoreContent( coMemento : TMementoMember ); end; procedure TMember.SaveContent( coMemento : TMementoMember ); begin Zahl := FZahl; end; procedure TMember.RestoreContent( coMemento : TMementoMember ); begin FZahl := Zahl; end;
Delphi-Quellcode:
Gruß
coMemento := TMementoMember.Create;
s := tMember.Create; P := tMember.Create; ... //will aber hier.. ( ok dann mach hier :-) ) s.SaveContent( coMemento ); r.RestoreContent( coMemento ); //durchführen, um die StringDaten von S an p zu übergeben und dann erst ändern ... s.zahl := 12; p.zahl := 12589; s.Free p.Free coMemento.Free; reli |
Re: TObject kopieren und zuweisen
Zitat:
Delphi-Quellcode:
Und was war nun das Problem? Ist doch ganz einfach.
type
TMember = class(TObject) private FZahl: Integer; public procedure Assign(AOriginal: TMember ); end; ... procedure TMember.Assign(AOriginal: TMember ); begin FZahl := AOriginal.FZahl; end; Hintergrund: Alle Klassen in einer Unit sind sich selber friend-Klassen und können daher auf deren (auch versteckten) Elemente und Methoden zurück greifen. Die Klasse TMember ist somit friend von sich selber und kann dies auch. Sieht vllt. komisch aus, ist aber so. Probier es aus... |
Re: TObject kopieren und zuweisen
jau hm stimmt friend klasse habsch ned bedacht...
die sache ist die: gibts evtl ne möglichkeit direkt eine kopie des speichers zu erstellen und an eine neue speicheradresse zu kopieren um dann den pointer des speicherorts an das neue objekt zu geben? ich bin halt eher auf der suche nach was verallgemeinenderen... dieses member variablen übergeben ist mir bissl zu aufwändig. soll auch eher eine frameworkklasse werden. ich meine auch noch was im hinterkopf zu haben dass ein TObject sich in einen Stream schreiben kann und man den stream dann in ein anderes objekt übernehmen kann.. also nicht nur den zeiger sondern halt den inhalt über den stream verschieben kann. gruß reli |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:57 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