Ver Mensaje Individual
  #4  
Antiguo 12-08-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.141
Reputación: 36
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Bueno. Ahora creo haberte entendido. Me parece que el concepto sería "clonar" un objeto. Al menos así lo entiendo yo desde que conozco (a medias) la interface "ICloneable" disponible en la clase "System" de la plataforma .NET. En esta página (Delphi Basics) se trata sobre dicha interfaz, y, creo que la misma consigue está ahí para echar una mano a lo que te propones.

Empero,... la verdad es que yo me pierdo un poco hablando de estos temas. A mí se me ocurre que si el objeto que quieres "clonar" no es muy "complejo", el mismo podría contar con un método (especificado o no por alguna interfaz al uso, que no sé si existe en Delphi, o si merecería la pena, si se ganaría algo), que el objeto contara con un método, digo, que fuera el encargado de la tarea que nos ocupa.

Yo imagino algo así, pero, intuyo que podría mejorarse mucho, que me meto en temas que no comprendo bien. Parece ser que en esto de clonar objetos puede tirarse por dos caminos:

Cita:
A shallow copy of a collection copies only the elements of the collection, whether they are reference types or value types, but it does not copy the objects that the references refer to. The references in the new collection point to the same objects that the references in the original collection point to.


In contrast, a deep copy of a collection copies the elements and everything directly or indirectly referenced by the elements.
Y dependerá, como digo, de la "complejidad" del objeto que quieras clonar. A mí, con un objeto creado para la ocasión y muy sencillo, me sale algo así:

Código Delphi [-]
interfaz

type
  TObjeto = class
  private
    FVariable: string;
  public
    function Clonar(var destino: TObjeto) : boolean;
  public
    property Propiedad: string read FVariable write FVariable;
  end;

implementation

{ TObjeto }

function TObjeto.Clonar(var destino: TObjeto): boolean;
begin
  destino.Propiedad := Self.FVariable;
  Result := true;
end;

Una prueba podría resultar más o menos esto:

Código Delphi [-]
var
  objeto, objeto2: TObjeto;
begin
  objeto := TObjeto.Create;
  objeto.Propiedad := 'Una cadena';

  objeto2 := TObjeto.Create;
  objeto.Clonar(objeto2);

  objeto.Free; // Liberamos

  // Pero objeto2 hace las veces de objeto
  ShowMessage(objeto2.Propiedad);

  objeto2.Free;
end;
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita