AClone() mit Membervar Array

Klassen, Objekte, Methoden, Instanzen

Moderator: Moderatoren

Antworten
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

AClone() mit Membervar Array

Beitrag von Manfred »

ich bin jetzt ein wenig verwirrt.
ich habe 2 Membervars. Eins davon ist ein Array, in das ich DataObject einbette. dann wird das Array geclont. Jetzt darf ich doch davon aussgehen, das der Inhalt des geclonten Arrays sich nicht verändert, wenn ich den Inhalt des Ursprungsarrays ändere!?
Tja, irgendwas läuft da wohl schief.

Code: Alles auswählen

DO WHILE ! (::oUnterricht:nArea)->(Eof())
             ::doBrowseUnterricht:datum      := (::oUnterricht:nArea)->datum
             AAdd(::aBrowseUnterricht, ::doBrowseUnterricht:copy())
             (::oUnterricht:nArea)->(DbSkip())
          ENDDO
          ::aBrowseUnterrichtClone := AClone(::aBrowseUnterricht)
          
wenn ich mir ::aBrowseUnterricht[1]:datum anzeigen lasse, dann erscheint 08.02.2020 das gleiche steht auch im geclonten Array drin.
jetzt schreibe ich
::aBrowseUnterricht[1]:datum := CToD("09.02.2020")
und es steht dann auch im geclonten Array so drin.
Ist das so korrekt?
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2823
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: AClone() mit Membervar Array

Beitrag von georg »

Hallo, Manfred -


wir reden von einfachen und komplexen Datentypen.

Einfache Datentypen lassen sich mittels AClone() so kopieren, dass sie unabhängigen Dateneinheiten darstellen (String, Integer, etc.).

Wenn Du jedoch ein Objekt in einem Array-Element hast, dann wird Du auch in dem geclonten Array auf das gleiche/identische Objekt verwiesen. Änderungen an dem Objekt spiegeln sich dann in beiden Arrays wieder, da auf das gleiche Objekt verwiesen wird.

In diesem speziellen Fall müsstest Du nach dem AClone() das Array durchlaufen und alle vorgefundenen Objekte ebenfalls clonen, dann würde das funktionieren.
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: AClone() mit Membervar Array

Beitrag von Manfred »

das ist Mist. Ich mache das Aclone nur um später die beiden Arrays auf Differenzen zu untersuchen. Eins davon ist in einem browser und dort kann es geändert werden. Ich muß aber wissen ob was geändert wurde, damit ich auf Speichern hinweisen kann, wenn es so weit ist.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16501
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: AClone() mit Membervar Array

Beitrag von Martin Altmann »

Warum so kompliziert?
Wenn das Zellelement zur Bearbeitung aktiviert wird, merkst Du Dir den Inhalt. Wenn das Editieren der Zelle beendet wird (sie also den Fokus verliert), vergleichst Du den gemerkten mit dem aktuellen Inhalt. Ist das unterschiedlich, inkrementierst Du den Zähler mit den Änderungen.
Das gibt jedoch einen Fehlalarm, wenn der Wert in was anderes geändert und dann erneut in das ursprüngliche geändert wird. Wenn Du diesen Fehlalarm verhindern willst, musst Du Dir in dem ursprünglichen Array nur die Inhalte (!) der Zellen merken!

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: AClone() mit Membervar Array

Beitrag von Manfred »

klappt nicht. Muß ich mal prüfen, warum getfocus und lostfocus nicht richtig greifen.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Antworten