![]() |
Object teilweise kopieren
Hallo,
ich habe zwei Objekte Ob1 und Ob2 derselben Klasse und möchte z.B. die ersten 50 Byte des ersten Objects in das zweite kopieren. Das kunktioniert zwar mit:
Delphi-Quellcode:
Ist aber so äußerst unschön. Muss ich dazu eine Methode für die Klasse schreiben, die dann die ersten Eigenschaften Feld für Feld über eine Zuweisung kopieren oder gibt es da eine elegantere Möglichkeit?
Move(Pointer(Ob1)^, Pointer(Ob2)^, 50);
|
Re: Object teilweise kopieren
Wenn du mir erklärst, wie du auf die Forderung _50 Bytes_ zu kopieren kommst, kann ich auch verstehen, warum dass unschön sein soll. Wenn du schon so ne komische Anforderung hast, ist dein Ansatz schon irgendwie logisch. Wenn einfach die ersten Felder kopiert werden sollten, würde ich das wie schon vorgeschlagen über eine Funktion machen, die Feld für Feld übernimmt.
|
Re: Object teilweise kopieren
Hallo nailor,
ja, es ging tatsächlich darum die ersten Felder zu kopieren. Ich habe es jetzt mit einer Methode gemacht, da ich es nicht über's Herz gebracht habe, den anderen Code hinzuschlonzen :stupid: . |
Re: Object teilweise kopieren
Delphi-Quellcode:
öhm ja
type
ICloneable = interface function Clone: TObject; end; type TDeineKlasse = class(TInterfacedObject, ICloneable) private FInteger: integer; FString: string; FDouble: double; public function Clone: TObject; property AsInteger: integer read FInteger write FInteger; property AsString: string read FString write FString; property AsDouble: double read FDouble write FDouble; end; function TDeineKlasse.Clone: TObject; begin Result := TDeineKlasse.Create; with TDeineKlasse(Result) do begin AsInteger := Self.AsInteger; // oder Self.FInteger; AsString := Self.AsString; AsDouble := Self.AsDouble; end; end; ... so würd ichs machen var xClone: TDeineKlasse; begin xClone := TDeineKlasse(deineOriginalKlasse.Clone); end; |
Re: Object teilweise kopieren
das ist ja das mit der funktion, die die ersten felder übergibt.
dein code erinnert mich irgendwie so an .NET... |
Re: Object teilweise kopieren
in .NET wirds ja auch üblicherweise so gemacht -
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:20 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