[fpc-pascal] Clone a instance of object
Mattias Gaertner
nc-gaertnma at netcologne.de
Mon Sep 23 11:57:53 CEST 2013
On Mon, 23 Sep 2013 11:46:54 +0200 (CEST)
Michael Van Canneyt <michael at freepascal.org> wrote:
>
>
> On Mon, 23 Sep 2013, Zaher Dirkey wrote:
>
> >
> > On Mon, Sep 23, 2013 at 10:02 AM, Michael Van Canneyt <michael at freepascal.org> wrote:
> > Var
> > C : TBaseObjectClass;
> > begin
> > C:=TBaseObjectClass(ClassType);
> > Result:=C.Create;
> > end;
> >
> >
> > Yes, that help me, thanks.
> >
> > Now about assigning I must repeat it (assign) for every child class copy its field members, is there any trick to copy the values like assigning record var to another record
> > var?
> > I know it is kind of strange way :P
>
> There is no such safe mechanism.
Well, actually there is a safe mechanism. You use a record to store the
class variables. But it looks clumsily:
type
TMyClass = class(TPersistent)
private
type
TMyClassVars = record
a,b,c: string;
end;
private
F: TMyClassVars;
public
procedure Assign(Source: TPersistent);
property a: string read F.a write F.a;
end;
procedure TMyClass.Assign(Source: TPersistent);
begin
F:=TMyClass(Source).F;
inherited;
end;
> The best you can do is make the properties published, and write an RTTI lookup routine that copies all Published values.
> I've done this several times, it works well for most situations.
Mattias
More information about the fpc-pascal
mailing list