naar aanleiding hiervan:
[topic=307018/1/25]
Wat ik wil, is een exacte copy van een willekeurig object, inclusief alle 'onderliggende' objecten waarvan het object de eigenaar is. Onderstaande code is voorbeeldje wat niet gaat werken.
Volgens mij is het op te lossen door bij TRootObject een functie te maken die er voor zorgt dat er een exacte copie van zichzelf gemaakt kan worden.
bijvoorbeeld:
Iemand enig idee of dit gaat lukken.
[topic=307018/1/25]
Wat ik wil, is een exacte copy van een willekeurig object, inclusief alle 'onderliggende' objecten waarvan het object de eigenaar is. Onderstaande code is voorbeeldje wat niet gaat werken.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
| type
TRootObject = class(TObject)
private
FName: String;
procedure SetName(const Value: String);
public
property Name : String read FName write SetName;
constructor Create; Overload;
constructor Create(aName : String); Reintroduce; Overload;
destructor Destroy; Override;
end;
TForm1 = class(TForm)
Button1: TButton;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
Object1 : TRootObject;
end;
.........
procedure TForm1.FormCreate(Sender: TObject);
begin
Object1 := TRootObject.Create('Object1');
end;
procedure TForm1.Button1Click(Sender: TObject);
var
Object2 : TRootObject;
begin
Object2 := TRootObject.Create('Object2');
// eigenlijk wil ik een exacte copy maken van Object1.
Object2 := Object1;
// bovenstaande slaat dus nergens op maar geeft het idee aan
// dit levert dus twee keer dezelfde Name op.
Memo1.Lines.Add(Object1.Name);
Memo1.Lines.Add(Object2.Name);
// en dit gaat natuurlijk mis omdat Object2 = Object1
// en die wordt al in de formdestroy weggeflikkerd.
Object2.Destroy;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
Object1.Destroy; // gaat op deze manier fout...
end; |
Volgens mij is het op te lossen door bij TRootObject een functie te maken die er voor zorgt dat er een exacte copie van zichzelf gemaakt kan worden.
bijvoorbeeld:
code:
1
2
3
4
5
| function Copy: TRootObject; begin Result:= TRootObject.Create(Object1.Name); // en hieronder de rest van de atrributen die gecopieerd moeten worden end; |
Iemand enig idee of dit gaat lukken.
edit:
taalfout
taalfout
"Quidquid latine dictum sit, altum videtur" (Whatever is said in Latin sounds profound)