copiar objeto

20/07/2006 - 13:53 por Hugo Gsell | Informe spam
Hola... tengo un problema...:

Tengo un objeto A lo cargo con datos en sus propiedades
Tengo un objeto B
Hago B=A
Modifico A.

SE ME MODIFICO B!!!!

necesito que cuando copie b=a. sea independiente...

se entiende.
Desde ya muchas gracias.
Hugo A. Gsell
Sgo del Estero
Argentiana

Preguntas similare

Leer las respuestas

#1 Bingen
20/07/2006 - 14:45 | Informe spam
Podrías hacer un metodo que se llame Clonar

B=A.Clonar. En el metodo crea una nueva instancia copia los valores de A y
devuelvelo, así este queda asignado en B.

Un Saludo
Bingen


"Hugo Gsell" escribió en el mensaje
news:%23aqjUO$
Hola... tengo un problema...:

Tengo un objeto A lo cargo con datos en sus propiedades
Tengo un objeto B
Hago B=A
Modifico A.

SE ME MODIFICO B!!!!

necesito que cuando copie b=a. sea independiente...

se entiende.
Desde ya muchas gracias.
Hugo A. Gsell
Sgo del Estero
Argentiana


Respuesta Responder a este mensaje
#2 Jesús López
20/07/2006 - 14:51 | Informe spam
Hola Hugo,

Para eso la clase a la que pertenece el objeto tiene que tener el método
Clone, el método Copy o implementar el interfaz ICloneable y hacer algo así:

Con Clone:

Dim B As LaClase = A.Clone()

Con ICloneable:

Dim Clonable As ICloneable = DirectCast(A, ICloneable)
Dim B As LaClase = DirectCast( Clonable.Clone(), LaClase)

Con Copy:

Dim B As LaClase = A.Copy()


'Al modificar A ya no se modifica B

Si "LaClase" es una clase que tú mismo has creado puedes modificarla para
que sea ICloneable y tener el método Clone. Por ejemplo:

Public Class MiClase
Implements ICloneable

Private _miPropiedad As Integer
Public Property MiPropiedad() As Integer
Get
Return _miPropiedad
End Get
Set(ByVal value As Integer)
_miPropiedad = value
End Set
End Property

Private Function InternalClone() As Object Implements
System.ICloneable.Clone
Return Me.MemberwiseClone()
End Function

Public Function Clone() As MiClase
Return DirectCast(InternalClone(), MiClase)
End Function
End Class

Si "LaClase" no es una clase que tú hayas creado, entonces evidentemente no
la puedes modificar, pero si como te he dicho tiene el método Clone,
implementa ICloneable o tiene el método Copy, no hay problema. Si no es así,
entonces tendrías que crear un nuevo objeto que fuera idéntico al anterior,
copiándole las propiedades una a una.




Saludos:

Jesús López


"Hugo Gsell" escribió:

Hola... tengo un problema...:

Tengo un objeto A lo cargo con datos en sus propiedades
Tengo un objeto B
Hago B=A
Modifico A.

SE ME MODIFICO B!!!!

necesito que cuando copie b=a. sea independiente...

se entiende.
Desde ya muchas gracias.
Hugo A. Gsell
Sgo del Estero
Argentiana



Respuesta Responder a este mensaje
#3 Hugo Gsell
20/07/2006 - 15:09 | Informe spam
el tema es mas complicado creo yo...
tengo una clase generica de carga de datos... dado un objeto KDATOS que
tiene propiedades (que en realidad son nombres de campos que se asocian con
una estructura de registros en una base de datos...) hay un total de 34
kdatos (distintos aunque las llame igual)
El tema es antes de modificar los datos en las propiedades de kdatos deseo
salvarlos en KDatosAUX.. a fin de que si luego necesito restuararlas haga
kdatos =kdatosaux y ya... se entiende el concepto de lo que quiero?
a kdatosaux la defini como object. y en realidad a priori antes de
"salvar" los datos... no conozco la estructura (propiedades) de kdatos...
Hugo A. Gsell
Sgo del Estero
Argentina


"Hugo Gsell" escribió en el mensaje
news:%23aqjUO$
Hola... tengo un problema...:

Tengo un objeto A lo cargo con datos en sus propiedades
Tengo un objeto B
Hago B=A
Modifico A.

SE ME MODIFICO B!!!!

necesito que cuando copie b=a. sea independiente...

se entiende.
Desde ya muchas gracias.
Hugo A. Gsell
Sgo del Estero
Argentiana

Respuesta Responder a este mensaje
#4 Alberto Poblacion
20/07/2006 - 16:52 | Informe spam
"Hugo Gsell" wrote in message
news:OMRD24$
el tema es mas complicado creo yo...
tengo una clase generica de carga de datos... dado un objeto KDATOS
que tiene propiedades (que en realidad son nombres de campos que se
asocian con una estructura de registros en una base de datos...) hay un
total de 34 kdatos (distintos aunque las llame igual)
El tema es antes de modificar los datos en las propiedades de kdatos deseo
salvarlos en KDatosAUX.. a fin de que si luego necesito restuararlas haga
kdatos =kdatosaux y ya... se entiende el concepto de lo que quiero?
a kdatosaux la defini como object. y en realidad a priori antes de
"salvar" los datos... no conozco la estructura (propiedades) de kdatos...



Una "chapucilla" que se puede hacer si no quieres modificar cada una de
las 34 clases para que soporten Clone(), consiste en marcar los objetos como
serializables y serializarlos, y a continuación deserializarlos, con lo que
se crea una copia de todo el contenido. Puedes hacer una función genérica
parecida a la siguiente (escrita de memoria, no la he probado):

Public Function Copiar(Objeto as Object) as Object
Dim bf as New BinaryFormatter()
Dim ms as New MemoryStream()
bf.Serialize(ms, Objeto)
Return bf.Deserialize(ms)
End Function

Solo funcionará si los objetos que le pasas son de alguna clase que hayas
marcado con el atributo <Serializable>.
Respuesta Responder a este mensaje
#5 Jesús López
20/07/2006 - 17:32 | Informe spam
¿Estás diciendo que tienes 34 clases diferentes ? ¿y esas clases son
simples, en el sentido de que sólo tienen unas cuantas propiedades que son
de tipos básicos?

Si las 34 clases haces que hereden de una clase base común que implementa
IClonable de la forma que te he puesto anteriormente (usando
MemberwiseClone) asunto solucionado, todas las clases derivadas
implementarán IClonable de forma correcta.

Si no. ¿qué es un KDATOS y en qué se diferencia uno de otro? Un poco de
código de ejemplo definiendo los KDATOS sería clarificador.

Saludos

Jesús López



"Hugo Gsell" escribió en el mensaje
news:OMRD24$
el tema es mas complicado creo yo...
tengo una clase generica de carga de datos... dado un objeto KDATOS
que tiene propiedades (que en realidad son nombres de campos que se
asocian con una estructura de registros en una base de datos...) hay un
total de 34 kdatos (distintos aunque las llame igual)
El tema es antes de modificar los datos en las propiedades de kdatos deseo
salvarlos en KDatosAUX.. a fin de que si luego necesito restuararlas haga
kdatos =kdatosaux y ya... se entiende el concepto de lo que quiero?
a kdatosaux la defini como object. y en realidad a priori antes de
"salvar" los datos... no conozco la estructura (propiedades) de kdatos...
Hugo A. Gsell
Sgo del Estero
Argentina


"Hugo Gsell" escribió en el mensaje
news:%23aqjUO$
Hola... tengo un problema...:

Tengo un objeto A lo cargo con datos en sus propiedades
Tengo un objeto B
Hago B=A
Modifico A.

SE ME MODIFICO B!!!!

necesito que cuando copie b=a. sea independiente...

se entiende.
Desde ya muchas gracias.
Hugo A. Gsell
Sgo del Estero
Argentiana





email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida