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
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;
ShowMessage(objeto2.Propiedad);
objeto2.Free;
end;