Delphi-PRAXiS

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

MrSpock 2. Jun 2005 09:09


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:
Move(Pointer(Ob1)^, Pointer(Ob2)^, 50);
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?

nailor 2. Jun 2005 09:13

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.

MrSpock 2. Jun 2005 09:52

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: .

barf00s 2. Jun 2005 09:55

Re: Object teilweise kopieren
 
Delphi-Quellcode:
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;
öhm ja

nailor 3. Jun 2005 14:48

Re: Object teilweise kopieren
 
das ist ja das mit der funktion, die die ersten felder übergibt.

dein code erinnert mich irgendwie so an .NET...

barf00s 7. Jun 2005 07:52

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