AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Tutorials Delphi Tutorial zur DP-Collection
Tutorial durchsuchen
Ansicht
Themen-Optionen

Tutorial zur DP-Collection

Ein Tutorial von alcaeus · begonnen am 23. Aug 2005 · letzter Beitrag vom 14. Sep 2007
Antwort Antwort
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#1

Re: Tutorial zur DP-Collection

  Alt 1. Sep 2005, 14:12
Zitat von alcaeus:
Zitat von Khabarakh:
Hat nichts mit der DP-Collection zu tun, aber sollte man nicht besser AssignTo statt Assign überschreiben? Ist mit Free/Destroy vergleichbar, Assign/Free prüft den Pointer auf nil, dann wird das vom Programmierer überschriebene AssignTo/Destroy aufgerufen.
Koenntest du mir das evtl. nochmal genauer erklaeren? Auch in den Vorstellungsthreads der DP-Collection wird Assign ueberschrieben, ich wusste bis jetzt ja nichtmal dass es AssignTo gibt
Als ich mich zu Beginn der Ferien mit Komponentenentwicklung auseinandergesetzt habe, hab ich diese Zeile in den Delphi-Sourcen gesehen:
Delphi-Quellcode:
procedure TPersistent.Assign(Source: TPersistent);
begin
  if Source <> nil then Source.AssignTo(Self) else AssignError(nil);
end;
Ich bin davon ausgegangen, dass das Ganze wie mit Free/Destroy funktioniert: Assign wird vom Programmierer nicht überschrieben, sondern bleibt immer gleich. Es testet den Pointer auf nil und ruft dann AssignTo auf, das vom Programmierer überschrieben und mit Anweisungen zum Kopieren der neuen Felder ergänzt wurde.

Gerade habe ich es mir noch einmal genauer angesehen und festgestellt, dass es etwas komplizierter ist .
Angenommen, wir wollen eine neue Klasse schreiben, diese Klasse soll die Daten einer anderen vorhandenen Klasse kopieren können und umgekehrt, obwohl beide Klassen als nächste gemeinsame Basisklasse erst TPersistent gemein haben. Für den einen Weg reicht es, Assign der neuen Klasse zu überschreiben und die Daten zu kopieren. Der andere Weg wird komplizierter, schließlich müssten wir Assign der vorhandenen Klasse überschreiben, diese wollen wir jedoch nicht ändern. Hier nimmt uns aber Delphi die Arbeit ab. Eine Instanz unserer neuen Klasse werde also der anderen als Parameter von Assign übergeben. Nun werden alle Assigns der ganzen Hierarchie bis zu TPersistent aufgerufen, da nirgendwo das Verhalten für das Kopieren unserer Klasse definiert ist. Logisch, wir haben die Klasse ja gerade erst geschrieben. Da die alte Klasse die neue Klasse nicht kopieren kann, ruft TPersistent.Assign nun AssignTo der neuen Klasse auf, damit diese sich in die alte Klasse kopiert. IMO einfach genial !
Aber solange man nur gleiche Klassentypen kopieren will, ist es wohl ziemlich egal, welche Methode man überschreibt . bei AssignTo kann man sich aber sicher sein, dass der Parameter ungleich nil ist.
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:26 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 by Thomas Breitkreuz