AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Objekt duplizieren?

Ein Thema von PeterPanino · begonnen am 6. Mär 2008 · letzter Beitrag vom 2. Apr 2008
Antwort Antwort
Seite 1 von 2  1 2      
PeterPanino

Registriert seit: 4. Sep 2004
1.451 Beiträge
 
Delphi 10.4 Sydney
 
#1

Objekt duplizieren?

  Alt 6. Mär 2008, 10:21
Gibt es eine Methode, mit der man ein Objekt duplizieren - also eine neue identische Instanz eines existierenden Objektes erzeugen - kann?
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: Objekt duplizieren?

  Alt 6. Mär 2008, 10:24
Jein. Bei Basisklassen ja, bei eigenen mußt du die Assign-Methode überschreiben und selbst die Logik für das Duplizieren implementieren.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
PeterPanino

Registriert seit: 4. Sep 2004
1.451 Beiträge
 
Delphi 10.4 Sydney
 
#3

Re: Objekt duplizieren?

  Alt 6. Mär 2008, 10:26
Schade. Wäre zu bequem gewesen!
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#4

Re: Objekt duplizieren?

  Alt 6. Mär 2008, 10:27
Zitat von PeterPanino:
Schade. Wäre zu bequem gewesen!
Jedoch kann der Compiler nicht wissen wie er jedes Element behandeln muss. Kopie als speicherbereich-Kopie? Ebenfalls Assign Aufrufen. Evtl. irgendwelche Create/...-Aufrufe für Ressourcen?
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: Objekt duplizieren?

  Alt 6. Mär 2008, 10:36
Da ist die Frage, was du mit duplizieren meinst. Also was ist mit weiteren Objekten innerhalb deines Objektes?
Hier ist eine Möglichkeit für eine von TPersistent abgleitete Klasse, alle published Properties zu "kopieren". Aber wie gesagt, beispielsweie bei internen Klassen wird nur der Objektzeiger kopiert.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
PeterPanino

Registriert seit: 4. Sep 2004
1.451 Beiträge
 
Delphi 10.4 Sydney
 
#6

Re: Objekt duplizieren?

  Alt 6. Mär 2008, 10:39
Es ist eine eigene Klasse, von TObject abgeleitet.

Aber nur so aus Interesse: Gibt es eigentlich objektorientierte Hochsprachen, bei denen das Duplizieren eines Objektes einer eigenen Klasse möglich ist? Die Basisklasse TObject müsste dann wohl so aufgebaut sein, dass der Compiler jederzeit die Elemente einer beliebigen Klasse erfahren und somit diese dann der neuen Instanz zuweisen kann.
  Mit Zitat antworten Zitat
Benutzerbild von phXql
phXql

Registriert seit: 11. Mär 2004
Ort: Mühldorf
824 Beiträge
 
#7

Re: Objekt duplizieren?

  Alt 6. Mär 2008, 10:46
C# und Java können sowas. Machen aber nur eine flache Kopie. Denke das geht mithilfe von Reflection.
"Dunkel die andere Seite ist"
"Yoda! Halts Maul und iss deinen Toast!"
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: Objekt duplizieren?

  Alt 6. Mär 2008, 10:58
Du hast so ziemlich den Nagel auf den Kopf getroffen.
Es geht halt nur wenn sogenannte RunTime-Type-Informations vorhanden sind (kurz RTTI). Die sind in Teilen vorhanden, soweit sie halt gebraucht werden. Zum Beispiel muss in einem Record oder in einer Klasse stehen, wo ein String ist, damit er beim Auflösen der Struktur auch gelöscht werden kann. Und das steht immer da. Zusätzlich kann man den Compiler dazu bewegen in Klassen Informationen über alle published-Deklarationen zu hinterlegen (bis hin zu den Parametern von Methoden). Genau das ist auch der einzige Unterschied zwischen TObject und TPersistent. (Wobei man das mit einem Compilerschalter {$M} auch für eine von TObject abgleitete Klasse machen kann) Damit kann man dann eine komplette Kopierroutine schreiben (wie in dem Link).

Ich sehe grade, dass die verlinkte Methode das kopieren von Klassen derzeit komplett verweigert (also nicht diese Methode aber die Funktion aus der unit TypInfo). Ist ja auch klar, denn nach welchem Schema soll die Klasse dann kopiert werden?

Man kann sich unter zu Hilfenahme dieser Informationen eine Basisklasse schreiben, welche den Kopiervorgang implementiert. Und dann kann man alle Klassen, welche von dieser Klasse abgeleitet sind kopieren. Die VCL hat ja im Prinip für sich auch ein paar Routinen dazu. Aber etwas fertiges, allgemeingültiges kann man unter Delphi nicht schreiben.

Zu anderen Sprachen, kannst du mal hier lesen.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#9

Re: Objekt duplizieren?

  Alt 6. Mär 2008, 16:31
Zitat von phXql:
C# und Java können sowas. Machen aber nur eine flache Kopie. Denke das geht mithilfe von Reflection.
Zählt der CopyConstructor von C++ nicht dazu?
  Mit Zitat antworten Zitat
Benutzerbild von phXql
phXql

Registriert seit: 11. Mär 2004
Ort: Mühldorf
824 Beiträge
 
#10

Re: Objekt duplizieren?

  Alt 6. Mär 2008, 16:55
Hm, wenn der CopyCtor in C++ vernünftig mit vererbung umgehen kann, dann zählt er dazu, ja
"Dunkel die andere Seite ist"
"Yoda! Halts Maul und iss deinen Toast!"
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 11:36 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz