![]() |
Klasse kopieren
Hi;
Ich habe folgenden Code:
Delphi-Quellcode:
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?
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; Ich will nicht darauf verweisen, wie ich mit:
Delphi-Quellcode:
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?
Profil_bak := Profil;
Gruß Martin W. :-) |
Re: Klasse kopieren
Jezt die große Frage bevor auch nur die kleinste Antwort sinnvoll wäre: Meinst du wirklich D.Net oder native Delphi?
|
Re: Klasse kopieren
Also die Anwendung ist eine VCL- Formularanwendung / Delphi für .net
... meinst du des`? |
Re: Klasse kopieren
Zitat:
|
Re: Klasse kopieren
Dann mach einfach mal nen Vorschlag trotzdem... nen Anhaltspunkt zum Nachschauen für mich...
Gruß |
Re: Klasse kopieren
Um einen Clone anzufertigen würde ich den Standardweg gehen und IClonable implementieren:
Delphi-Quellcode:
Ich verwende aber einen andere Pascal Dialekt für .Net, sollte aber ähnlich genug sein um das Prinzip zu erkennen.
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; Bei D.Net musst du allerdings noch schauen, wie da ![]() Wichtig ist definitv ![]() 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 |
Re: Klasse kopieren
Jetzt hab ich schon länger rumprobiert, auch mit Assign... aber es will nicht klappen. :( Warum klappt z.B. dieser Code nicht:
Delphi-Quellcode:
Gruß
// 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; Martin W. |
Re: Klasse kopieren
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. |
Re: Klasse kopieren
Zitat:
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 :hi: |
Re: Klasse kopieren
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 !!!
![]() Danke; gruß Martin W. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:22 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