AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Objekt in Array kopieren und anschließend freigeben
Thema durchsuchen
Ansicht
Themen-Optionen

Objekt in Array kopieren und anschließend freigeben

Ein Thema von blackdrake · begonnen am 30. Aug 2008 · letzter Beitrag vom 1. Sep 2008
 
blackdrake

Registriert seit: 21. Aug 2003
Ort: Bammental
618 Beiträge
 
Delphi 10.3 Rio
 
#23

Re: Objekt in Array kopieren und anschließend freigeben

  Alt 1. Sep 2008, 17:09
Hallo.

Bei meinem verwendeten Code geht die Liste mit allen Submissions in 2 Filterfunktionen, die wiederum 2 Listen erstellen. Die Originalliste wird auch noch verwendet, nachdem sie in 2 Unterlisten aufgeteilt wurde.

Aber mal zu einem anderen Problem - Bei meiner Arbeit mit den TPersistent-Nachkommen und dem Assign()-Befehl habe ich wieder einen Nachteil entdeckt, der mir etwas zu wider ist:

Ich bin ja von den records+arrays weggegangen, da man einen record nicht ableiten kann. Es sei jetzt eine neue Klasse von TSubmission abgeleitet:

Delphi-Quellcode:
type
  TExtendedSubmission = class(TSubmission)
  public
    Extension: string;
    DateTime: string;
    Author: string;
    procedure Assign(Source: TPersistent); override;
  end;
Dann werden alle Elemente von TSubmission mitgenommen. Das ist sehr gut. Aber bei der TExtendedSubmission.Assign() Methode geht das ganze ja wieder zu bruch.

Delphi-Quellcode:
{ TExtendedSubmission }

procedure TExtendedSubmission.Assign(Source: TPersistent);
begin
  if Source is TExtendedSubmission then
  begin
    { Hartcoding von TSubmission }
    // TSubmission würde durch diesen Code zur Unveränderlichkeit gezwungen werden,
    // da bei einer Veränderung alle Nachkommen ungültig werden würden
    Tags := TExtendedSubmission(Source).Tags;
    Rating := TExtendedSubmission(Source).Rating;
    Score := TExtendedSubmission(Source).Score;
    PictureNumber := TExtendedSubmission(Source).PictureNumber;
    MD5 := TExtendedSubmission(Source).MD5;

    { Nun die neuen Methoden der eigenen Klasse }
    Extension := TExtendedSubmission(Source).Extension;
    DateTime := TExtendedSubmission(Source).DateTime;
    Author := TExtendedSubmission(Source).Author;
  end
  else
    inherited;
end;
In dieser Assign()-Methode MUSS ich alle Elemente der TSubmission (Tags, Rating, Score, PictureNumber und MD5) explizit in den Code mit einbinden. Und ich sehe keine Lösung dafür.

Nehmen wir mal an, ich würde TSubmission verändern/erweitern. TExtendedSubmission würde sich automatisch mit erweitern. Das ist der große Vorteil gegenüber den records, die ja leichter zu handhaben sind. Aber die Methode TExtendedSubmission.Assign() bleibt weiterhin unaktuell. Sie muss explizit angepasst werden, wenn ich TSubmission verändere. Allgemein müsste ich also ALLE Nachkommen in der Assign()-Methode separat umschreiben, wenn ich etwas am Grundtyp TSubmission ändere - sollte die OOP das nicht irgendwie verhindern?

// Ich habe bezüglich der Problematik das Thema nochmal als offene Frage gesetzt.

Gruß
blackdrake
Daniel Marschall
  Mit Zitat antworten Zitat
 


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 20:32 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