Ver Mensaje Individual
  #12  
Antiguo 31-10-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Reputación: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por roman Ver Mensaje
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'; // dispara evento (lógicamente)

  c2 := c1.Clone;
  ShowMessage(c2.Cadena); // XXXX
  c2.Cadena := 'YYYY';   // también dispara evento
  ...
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.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita