[fpc-pascal] Clone a instance of object

Frederic Da Vitoria davitofrg at gmail.com
Mon Sep 23 14:35:32 CEST 2013


2013/9/23 Michael Van Canneyt <michael at freepascal.org>

>
> On Mon, 23 Sep 2013, Mattias Gaertner wrote:
>
>  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;
>>
>
> 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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freepascal.org/pipermail/fpc-pascal/attachments/20130923/ec28e3a4/attachment.html>


More information about the fpc-pascal mailing list