[fpc-pascal] Clone a instance of object

Frederic Da Vitoria davitofrg at gmail.com
Mon Sep 23 12:10:41 CEST 2013


2013/9/23 Mattias Gaertner <nc-gaertnma at netcologne.de>

> 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;
>

This wouldn't clone included objects. I mean: if the object to be cloned
contains objects, those included objects should probably be cloned too, but
putting them into a record wouldn't achieve that.

-- 
Frederic Da Vitoria
(davitof)

Membre de l'April - « promouvoir et défendre le logiciel libre » -
http://www.april.org
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freepascal.org/pipermail/fpc-pascal/attachments/20130923/142d18f1/attachment.html>


More information about the fpc-pascal mailing list