Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.071 Beiträge
 
Delphi 12 Athens
 
#14

AW: Klonen eines Interfaces

  Alt 22. Dez 2022, 13:27
Vielen Dank für deine zusätzlichen Infos.
Eine Umstellung auf TPersistent wäre in der aktuellen Phase sicher kein Problem. Aber im Moment scheint es mir so, als hätte ich mit meiner Variante den passenden Weg gefunden. Trotzdem werde ich weiterhin ein Auge darauf haben, ob nicht doch noch eine Anpassung notwendig wird.
Darum Assign, aber auch Clone wird da oft als Name genommen. Wobei Assign die Daten in die eigene Instanz übernimmt, AssignTo an die andere Instanz übergibt und Clone erstellt selber die neue Instanz, überträgt die Eigenschaften und gibt es als Result zurück.
Sehr interessant. Mich hatte das heute Morgen selbst gestört und daher heißt die Methode seit ein paar Stunden schon CopyFrom.

Hier mal ein Beispiel, was zeigt, dass Assign/Assign TO nichts automatisch macht, sondern du es machen mußt.
Delphi-Quellcode:
procedure TEditMargins.Assign(Source: TPersistent);
begin
  if Source is TEditMargins then
  begin
    FLeft := TEditMargins(Source).Left;
    FRight := TEditMargins(Source).Right;
    FAuto := TEditMargins(Source).Auto;
  end
  else
    inherited;
end;
Auch wenn das Beispiel nicht Ideal ist, denn das ELSE würde ich weglassen und Interhited immer ausgeführt werden sollte.
Denn jede Klasse kopiert die eigenen Eigenschaften, welche bei sich eingebaut wurden, und die Vorfahren kopieren ihr Zeugs usw.
Wobei ich das Inherited als Erstes aufrühre, also erst das Zeugs der Vorfahren und dann das Eigene, genauso wie man es auch im Create macht. (eigenes Erstellen und Laden zuletzt und beim Entladen und Freigeben zuerst)
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat