![]() |
Como puedo asignar una copia de una instancia sin que sea una referencia.
Hola amigos, una vez más requiero de su gran ayuda.
Tengo una clase definida de esta manera: Código:
Individuo=class(TObject) Código:
Var2:=Var1; Mi pregunta es: ¿existe una forma de realizar la asignación de modo que se me guarde una copia y no una referencia al mismo espacio de memoria? Con el fin de modificar luego una de las variables manteniendose la otra intacta. Gracias de antemano por su valiosa ayuda. |
Escribe un procedimiento Assign que asigne todas las propiedades de tu clase.
TPersistent tiene ese método virtual, así que puedes derivar de TPersistenty completar tu Assign con las nuevas propiedades de tu clase. Por supuesto puedes realizar tu método de asignación desde cero. Cuando se realizan asignaciones de este tipo se debe tener cuidado al asignar punteros y en este sentido todos los objetos VCL lo son, así que tendrás que asignar contenidos. Por eso lo mejor es usar el Assign de las clases VCL y completar la asignación de lo propio de nuestra clase. Saludos. |
Muchas gracias. Cambie TObject por TPersistent y coloqué un nuevo procedimiento
Código:
procedure Individuo.Assign(IndiEnviado:Individuo); Gracias por su aporte y su valioso tiempo. |
Hola TecnoBestia.
Me alegra que hayas solucionado el problema, pero creo que el amigo escafandra se refería a algo parecido a esto:
Un saludo. |
Exacto, se trata de sobreescribir el método Assign para añadir en él las asignaciones de las propiedades propias de nuestra nueva clase, tal como muestra ecfisa en su código.
TecnoBestia, se trata de sobrecargar la función virtual para terminar llamando a la heredada, en otro caso te pierdes las propiedades de la clase madre. Saludos. |
¿Y Vale la pena heredar desde TComponent sólo por un método? Antes a cambios en la estructura jerárquicas de nuestras clases es mejor pensarlo dos veces.
¿Te aporta alguna otra ventaja que sea de la clase TComponent? ¿necesitarás hacer streaming para recuperar datos? ¿En que te afecta, o que tan complicado es directamente añadirle un método CopiarA() que haga un trabajo similar? Digo... siendo honestos es lo mismo que harías con el Assing:
Con todo repeto, me parece un desperdicio heredar de TComponent si en verdad la clase no se va a comportar como un componente. Saludos, |
Muy puntual lo dicho por ecfisa y escafandra. :)
Solamente una observación: Cita:
Saludos. Al González. |
Hola...
Delphius, según creo recordar, TComponent desciende de TPersistent y no al revés. A lo que voy es que heredar una clase de TPersistent no hace que esta se comporte como un componente. TPersistent solo define métodos para serializar un objeto. Saludos... |
Más sobre mi problema
Mi clase es muy simple y es para la aplicación de un algoritmo denominado Simulating Annealing para hacer clasificación de datos, mi clase es un Individuo que que contendrá únicamente lo que se muestra en el código siguiente:
Código PHP:
Código PHP:
|
Cita:
// Saludos |
Cita:
Pero como dijo román, el planteo sigue siendo igual de válido. ¿Vale la pena heredar la clase sólo por un método? Yo no creo. Saludos, |
Hola, ¿De quien me recomiendan heredar?
¿Puedo heredar de TOject y crear un procedimiento Copiar? algó así como Código PHP:
Gracias por sus acertadas respuestas :). |
Hola...
Para tu caso en particular, no veo por que no hacerlo así, ya que es una clase simple y no necesitas sobrecargarla con métodos que ni vas a usar. Saludos... |
Gracias, lo haré así.
|
Y volviendo a la idea de Delphius si la clase es tan simple, ¿porqué definirla como derivada de otra? ¿Que se quiere heredar?
Saludos. |
Cita:
Saludos. |
La franja horaria es GMT +2. Ahora son las 12:45:38. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi