miércoles, 26 de enero de 2011

Clonar un Objeto

Cuando se crea clase simple y se desea hacer una copia de un objeto a otro del mismo tipo, esto no se realiza ya que se copia la referencia del objeto.
Public Class clsObjeto
Public codigo As String = ""
Public valor As String = ""
End Class
Es decir, si se hace una asignación de un objeto a otro este guardara la referencia del objeto que fue asignado y no serán objetos separadas.
Dim obj01 as New clsObjeto
obj01 .codigo = "01"
obj01 .valor = "Valor 01"

Dim obj02 as clsObjeto= obj01
Esto significa que si modifico el objeto obj02 este cambio se reflejara también en el objeto obj01 ya que se referencia y no se copio.

Para poder hacer una CLONACION de objetos se debe implementar en la clase el metodo Clone.
Public Class clsObjeto
Implements ICloneable

Public codigo As String = ""
Public valor As String = ""

Public Function Clone() As Object Implements System.ICloneable.Clone
Return MyBase.MemberwiseClone()
End Function
End Class
Con esto, se puede hacer una copia exacta de un objeto a otro sin que se mantenga la referencia y no refleje la modificación de un objeto en otro.
Dim obj01 as New clsObjeto
obj01 .codigo = "01"
obj01 .valor = "Valor 01"

Dim obj02 as clsObjeto= obj01..Clone
Como se vera ahora el objeto obj02 tiene los mismos datos que el objeto 0bj01 pero con la diferencia de que si se modifica alguno este cambio no afectara al otro.