Cita:
Empezado por roman
tal como hace ecfisa, supongo que también se copiarán los campos privados y, en general, el estado del objeto desde el cual se leen las propiedades.
|
La verdad, sigo en la duda si con
Move se copia la la totalidad, por lo que hice una pequeña prueba:
Código Delphi
[-]
...
type
TCadenaChange = procedure of object;
TMiClase = class
private
F_PI : Double;
FCadena : string;
FCadenaChange : TCadenaChange;
function GetCadena: string;
procedure SetCadena(Cadena: string);
procedure AvisoCambioCadena;
public
constructor Create;
property Cadena: string read GetCadena write SetCadena;
property CadenaOnChange: TCadenaChange read FCadenaChange
write FCadenaChange;
function Clone: TMiClase;
...
end;
constructor TMiClase.Create;
begin
F_PI := 3.141592654;
FCadenaChange:= AvisoCambioCadena;
end;
procedure TMiClase.AvisoCambioCadena;
begin
ShowMessage(Format('Cambio Cadena: %s %0.9f',[Cadena, F_PI]) );
end;
function TMiClase.GetCadena: string;
begin
Result := FCadena;
end;
procedure TMiClase.SetCadena(Cadena: string);
begin
if Cadena <> FCadena then
begin
FCadena:= Cadena;
if Assigned(FCadenaChange) then
FCadenaChange;
end;
end;
function TMiClase.Clone: TMiClase;
begin
Result:= TMiClase.Create;
Move(Self,Result,SizeOf(Self));
end;
procedure TForm1.Button1Click(Sender: TObject);
var
c1,c2: TMiClase;
begin
c1 := TMiClase.Create;
c1.Cadena:= 'XXXX';
c2 := c1.Clone;
ShowMessage(c2.Cadena); c2.Cadena := 'YYYY'; ...
end;
...
Y en ella pareciera que campos, propiedades y eventos son conservados mediante la llamada a Clone. Sin embargo no sé por qué, pienso que se me está escapando algo...
Saludos.