AGB  ·  Datenschutz  ·  Impressum  







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

Klasse kopieren

Ein Thema von Martin W · begonnen am 16. Apr 2006 · letzter Beitrag vom 17. Apr 2006
Antwort Antwort
Martin W

Registriert seit: 29. Mai 2004
Ort: Augsburg
220 Beiträge
 
Delphi XE3 Enterprise
 
#1

Klasse kopieren

  Alt 16. Apr 2006, 18:40
Hi;

Ich habe folgenden Code:

Delphi-Quellcode:
type TProfilDetails = class
  public
    Name: String;
  end;

type TProfil = class
  public
    File_version: integer;
    Profile: array of TProfilDetails;
  end;

// TCP Servereinstellungen
type TTcpServerPreferencesBindings = class
  public
    IP: String;
    Port: integer;
  end;

type TTcpServerPreferences = class
  public
    File_version: integer;
    Bindings: array of TTcpServerPreferencesBindings;
  end;

var
  Profil: TProfil;
  TcpServerPreferences: TTcpServerPreferences;
  Profil_bak: TProfil;
  TcpServerPreferences_bak: TTcpServerPreferences;
Mit der Klasse "Profil" und "TcpServerPreferences" arbeite ich ständig. Diese Daten verändern sich häufig in kurzen Zeitabständen. Wie kann ich die Werte von "Profil" nach "Profil_bak" am leichtesten kopieren?

Ich will nicht darauf verweisen, wie ich mit:

Profil_bak := Profil; tun würde. Ich will in beiden Klassen unabhängig voneinander Werte ändern können. Nur muss die Klasse Anfangs erst alle Werte der anderen Klasse kopiert bekommen... wie geht das am leichtesten?

Gruß
Martin W.
  Mit Zitat antworten Zitat
Elvis

Registriert seit: 25. Nov 2005
Ort: München
1.909 Beiträge
 
Delphi 2010 Professional
 
#2

Re: Klasse kopieren

  Alt 16. Apr 2006, 18:44
Jezt die große Frage bevor auch nur die kleinste Antwort sinnvoll wäre: Meinst du wirklich D.Net oder native Delphi?
Robert Giesecke
I’m a great believer in “Occam’s Razor,” the principle which says:
“If you say something complicated, I’ll slit your throat.”
  Mit Zitat antworten Zitat
Martin W

Registriert seit: 29. Mai 2004
Ort: Augsburg
220 Beiträge
 
Delphi XE3 Enterprise
 
#3

Re: Klasse kopieren

  Alt 16. Apr 2006, 18:46
Also die Anwendung ist eine VCL- Formularanwendung / Delphi für .net

... meinst du des`?
  Mit Zitat antworten Zitat
Elvis

Registriert seit: 25. Nov 2005
Ort: München
1.909 Beiträge
 
Delphi 2010 Professional
 
#4

Re: Klasse kopieren

  Alt 16. Apr 2006, 18:48
Zitat von Martin W:
Also die Anwendung ist eine VCL- Formularanwendung / Delphi für .net
... meinst du des`?
Ja meinte ich. Ich hätte dir bei D32 oder bei reinem .Net helfen können. Bei VCL.Net steige ich hier lieber aus, bevor ich irgendwelchen BS verzapfe...
Robert Giesecke
I’m a great believer in “Occam’s Razor,” the principle which says:
“If you say something complicated, I’ll slit your throat.”
  Mit Zitat antworten Zitat
Martin W

Registriert seit: 29. Mai 2004
Ort: Augsburg
220 Beiträge
 
Delphi XE3 Enterprise
 
#5

Re: Klasse kopieren

  Alt 16. Apr 2006, 18:50
Dann mach einfach mal nen Vorschlag trotzdem... nen Anhaltspunkt zum Nachschauen für mich...

Gruß
  Mit Zitat antworten Zitat
Elvis

Registriert seit: 25. Nov 2005
Ort: München
1.909 Beiträge
 
Delphi 2010 Professional
 
#6

Re: Klasse kopieren

  Alt 16. Apr 2006, 19:13
Um einen Clone anzufertigen würde ich den Standardweg gehen und IClonable implementieren:
Delphi-Quellcode:
type
   SomeClass = class(ICloneable)
   protected
      function UntypedClone : Object; implements ICloneable.Clone;
   public
      property SomeValue : String
         read fSomeValue write fSomeValue ;
      function Clone : SomeClass; virtual;
   private
      fSomeValue: String;
   end;

implementation

function SomeClass.UntypedClone : Object;
begin
   result := Clone();
end;

function SomeClass.Clone : SomeClass;
begin
   result := MemberwiseClone() as SomeClass;
end;
Ich verwende aber einen andere Pascal Dialekt für .Net, sollte aber ähnlich genug sein um das Prinzip zu erkennen.

Bei D.Net musst du allerdings noch schauen, wie da Delphi-Referenz durchsuchenInteface resolution clauses benutzt werden. Implements gibt es ja nicht mehr bzw. gab es in der Form auch nicht in Delphi32...

Wichtig ist definitv MSDN-Library durchsuchenMemberwiseClone, egal ob du nun das Interface imlementierst oder nicht.

Hier noch ein Test:
Delphi-Quellcode:
var instance1 := new SomeClass(SomeValue := 'Hallo');
var instance2 := instance1.Clone();

instance1.SomeValue := 'Abc';

Console.WriteLine(instance1.SomeValue);
Console.WriteLine(instance2.SomeValue);
Output
Abc
Hallo
Robert Giesecke
I’m a great believer in “Occam’s Razor,” the principle which says:
“If you say something complicated, I’ll slit your throat.”
  Mit Zitat antworten Zitat
Martin W

Registriert seit: 29. Mai 2004
Ort: Augsburg
220 Beiträge
 
Delphi XE3 Enterprise
 
#7

Re: Klasse kopieren

  Alt 17. Apr 2006, 09:48
Jetzt hab ich schon länger rumprobiert, auch mit Assign... aber es will nicht klappen. Warum klappt z.B. dieser Code nicht:

Delphi-Quellcode:
// Profile
type TProfilDetails = class
  public
    Name: String;
  end;

type TProfil = class (TPersistent)
  public
    File_version: integer;
    Profile: array of TProfilDetails;
  end;

// TCP Servereinstellungen
type TTcpServerPreferencesBindings = class
  public
    IP: String;
    Port: integer;
  end;

type TTcpServerPreferences = class (TPersistent)
  public
    File_version: integer;
    Bindings: array of TTcpServerPreferencesBindings;
  end;

var
  server_mainform_form: Tserver_mainform_form;
  Profil: TProfil;
  TcpServerPreferences: TTcpServerPreferences;
  Profil_bak: TProfil;
  TcpServerPreferences_bak: TTcpServerPreferences;


function xxx: boolean,
begin
  TcpServerPreferences_bak.Assign(TcpServerPreferences);
end;
Gruß
Martin W.
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

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

Re: Klasse kopieren

  Alt 17. Apr 2006, 10:03
Du darfst Elvis ruhig glauben, ICloneable is the way to go.
Wenn du schon unter .Net programmierst, würde ich das ganze VCL/RTL-Zeug schnell vergessen und zusammen mit dem T-Präfix und globalen Variablen wegsperren.
Ich glaube zwar nicht, dass du mir ein einziges Argument für TPersistent unter .Net liefern kannst, aber: Du solltest Assign(To) auch überschreiben.
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Elvis

Registriert seit: 25. Nov 2005
Ort: München
1.909 Beiträge
 
Delphi 2010 Professional
 
#9

Re: Klasse kopieren

  Alt 17. Apr 2006, 10:11
Zitat von Martin W:
Warum klappt z.B. dieser Code nicht
Du hast da soviele globale Funktionen, Variablen, initialization und Konsorten drin, dass der Code mit keiner "richtigen" .Net-Sprache kompilierbar wäre.
Bist du dir gaaanz sicher, dass du nicht lieber in der Win32-Welt bleiben willst?

Da du anscheinend deine "Klassen" sogar wie Records benutzt muss ich mich doch fragen wie "länger rumprobiert" aussah.
Schaue mal auf Luckies Homepage, da findest du ein kleines Tutorial zu objektorientierter Programmierung.
Bis dahin sehe ich eigentlich keinen Sinn hier zu antworten...

letzter Tip: Assign muss überschreiben werden, da TPersistent keine Ahnung von deinen Feldern hat...

Adios
Robert Giesecke
I’m a great believer in “Occam’s Razor,” the principle which says:
“If you say something complicated, I’ll slit your throat.”
  Mit Zitat antworten Zitat
Martin W

Registriert seit: 29. Mai 2004
Ort: Augsburg
220 Beiträge
 
Delphi XE3 Enterprise
 
#10

Re: Klasse kopieren

  Alt 17. Apr 2006, 10:46
Da wir ja jetzt ehr darüber reden ob ich dies oder jenes kann, und es nicht mehr nur um mein "Problem" geht habe ich zu dem ganzen mal ein neuen Thread aufgemacht... bitte gebt mir nen bissel konstuktive Kritik und Hilfe.. denn ohne wird man nicht besser !!!

Link zum anderen Posting

Danke;

gruß
Martin W.
  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 18:50 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