2013/9/23 Michael Van Canneyt <mich...@freepascal.org> > > On Mon, 23 Sep 2013, Mattias Gaertner wrote: > > On Mon, 23 Sep 2013 11:46:54 +0200 (CEST) >> Michael Van Canneyt <mich...@freepascal.org> wrote: >> >> On Mon, 23 Sep 2013, Zaher Dirkey wrote: >>> >>> On Mon, Sep 23, 2013 at 10:02 AM, Michael Van Canneyt < >>>> mich...@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; >> > > Yes. But that works only for 'simple' types and still requires you to > write code. > > For the more general case where you can have arrays, classes, interfaces > and whatnot as fields of your object, there is simply no correct way. >
Isn't there? Maybe it wouldn't be easy, but IIRC Delphi offers something related to this with TComponents and Streams. This Delphi mechanism I knew worked only for properties, but I found references that there existed a wider mechanism in D2010. -- Frederic Da Vitoria (davitof) Membre de l'April - « promouvoir et défendre le logiciel libre » - http://www.april.org
_______________________________________________ fpc-pascal maillist - fpc-pascal@lists.freepascal.org http://lists.freepascal.org/mailman/listinfo/fpc-pascal