Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Objekt in Liste mit anderer Instanz ersetzen ohne Referenz zu verlieren (https://www.delphipraxis.net/212414-objekt-liste-mit-anderer-instanz-ersetzen-ohne-referenz-zu-verlieren.html)

norwegen60 7. Feb 2023 12:09

AW: Objekt in Liste mit anderer Instanz ersetzen ohne Referenz zu verlieren
 
Danke für eure Tips. Ich habe bestätigt bekommen, was ich so zu wissen geglaubt habe, aber trotzdem nochmal absichern wollte.

Bei vielen Properties wird leider aus dem "nur nur für die "..neuen" Eigenschaften..." etwas mehr und es geht eher um die laufenden Pflege. Dass jeder auch daran denkt dass da noch ein Assign gepflegt werden muss.

Ein klein bisschen hatte ich die Hoffung, dass es irgendwo noch eine Möglichkeit gibt, den Zeiger auf Instanz1.1 so zu ändern, dass er auf Instanz1.2 weiter leitet.

himitsu 7. Feb 2023 12:13

AW: Objekt in Liste mit anderer Instanz ersetzen ohne Referenz zu verlieren
 
Delphi-Quellcode:
TAbg = class(TBasis)
  procedure Assign(Source: TPersistent); {virtual;} overload;
:angle:


Zitat:

Zitat von norwegen60 (Beitrag 1518398)
Ein klein bisschen hatte ich die Hoffung, dass es irgendwo noch eine Möglichkeit gibt, den Zeiger auf Instanz1.1 so zu ändern, dass er auf Instanz1.2 weiter leitet.

Naja, PObject sowie PPointer
aber nja.

oder ein Objekt im Object, wo sich das innere Objekt tauschen lässt.

norwegen60 7. Feb 2023 12:42

AW: Objekt in Liste mit anderer Instanz ersetzen ohne Referenz zu verlieren
 
Zitat:

Zitat von himitsu (Beitrag 1518399)
Delphi-Quellcode:
TAbg = class(TBasis)
  procedure Assign(Source: TPersistent); {virtual;} overload;

Ich habe meine Assign aktuell nicht mit Virtual und Overload versehen, konnte aber nicht feststellen, dass etwas nicht geht und Compilerwarnung gabs auch keine.
Nur unsauber oder falsch?

Uwe Raabe 7. Feb 2023 13:02

AW: Objekt in Liste mit anderer Instanz ersetzen ohne Referenz zu verlieren
 
Das Delphi-eigene Assign ist in TPersistent deklariert und bildet somit schon mal ein Grundgerüst. Dort sind Assign und AssignTo virtual deklariert und können dann in abgeleiteten Klassen überschrieben und mit Leben gefüllt werden. Da deine Klassen nicht von TPersistent abgeleitet sind, hast du da natürlich freie Wahl.

himitsu 7. Feb 2023 13:19

AW: Objekt in Liste mit anderer Instanz ersetzen ohne Referenz zu verlieren
 
Dort war nur "falsch", dass es in TBasis virtual war und im Nachfahren nochmal virtual,
also verdeckt, anstatt überschrieben.

norwegen60 7. Feb 2023 13:30

AW: Objekt in Liste mit anderer Instanz ersetzen ohne Referenz zu verlieren
 
Das zweimalige Virtual hatte ich nach deinem Hinweis gesehen. Nur bei der generelle Verwendung war ich mir unsicher.

joachimd 7. Feb 2023 14:06

AW: Objekt in Liste mit anderer Instanz ersetzen ohne Referenz zu verlieren
 
ich habe mir jetzt nicht alle Vorschläge durchgelesen...aber wären Interfaces nicht dafür geeignet? Das Objekt wird erstellt, einer Interface-Variablen zugeordnet, in der anderen Liste einer anderen Interface-Variablen zugeordnet usw...bei Änderung des Objekts ist es dann in allen Instanzen sichtbar.

stahli 7. Feb 2023 14:18

AW: Objekt in Liste mit anderer Instanz ersetzen ohne Referenz zu verlieren
 
Ich habe (wenn ich das Problem richtig verstehe) in einem ähnlichen Fall einen Pool eingerichtet, der meine Objektinstanzen verwaltet - jede Instanz einmalig.
In buisinessbezogenen Listen werden dann nur Referenzen auf diese Objekte verwaltet (statt TObjectList dann entsprechend TList verwenden).

Drei Zugriffsmöglichkeiten sehe ich:
- direkter Zugriff auf Objktinstanzen
- Zugriff über Interfaces
- Zugriff über Guids (der Pool muss dann eine binäre Suche unterstützen)

norwegen60 7. Feb 2023 14:26

AW: Objekt in Liste mit anderer Instanz ersetzen ohne Referenz zu verlieren
 
Hallo zusammen,

für mich ist der Thread gelöst.
Umstellung auf Instanzen oder Pooling sind aktuell keine Lösung. Die Anwendung ist zu umfangreich und damit der Eingriff zu groß.

Mein Problem wäre schon damit gelöst, wenn der Teil, der die Änderung vornimmt, auch auf die Liste zugreifen würde. Dann hätte ich gar keine zwei Instanzen. Aber auch das bedeutet Zeit die ich momentan nicht habe.

Da war die Synchronisation der notwendigen Felder per Assign schneller implementiert

Danke an alle
Gerd


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:24 Uhr.
Seite 2 von 2     12   

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