jueves, 9 de octubre de 2014

Como clonar objetos .net: implementando Iclonable

Como clonar objetos VB.net: implementando Iclonable

Si asignamos un objeto a otro usando el símbolo = lo que tenemos es dos variables apuntando a la misma instancia si cambiamos uno cambiamos el otro y si destruimos uno destruimos el otro, si lo que queremos es una copia del objeto el símbolo = no nos vale,
Algunos objetos  de .net como la clase  DataSet incorporan el metodo Clone() para hacer copias de objetos
Pero si queremos una funcionalidad similar en nuestros propios objetos tendremos que hacerlo a mano

¿Como? implementando la interfaz IClonable
Aquí un ejemplo en Visual Basic si queremos hacerlo en C# simplemente hay que cambiar Implements por : (dos puntos)


Public Class CEmpleado
  Implements ICloneable

 'Declaramos las variables publicas en vez de usar propiedades por simplicidad
  Public M_nombre
 Public M_apellido
  
 'Las funciones no necesitan clonarse
Public Function QuienSoy() As String
  Return M_nombre & "" & M_apellido
 End Function

 Public Function Clone() As Object Implements System.ICloneable.Clone

  'Creamos una instancia de mi mismo, es perfectamente posible
  Dim EmpleadoClonado As New CEmpleado

   'La copia tiene que ser miembro a miembro
   EmpleadoClonado.M_nombre = Me.M_nombre
   EmpleadoClonado.M_apellido = Me.M_apellido

  'Devolvemos el objeto que acabamos de crear
  Return EmpleadoClonado
  End Function
 End Class


Una vez hecho esto sólo tenemos que llamar al metodo Clone sobre la instancia de nuestro objeto de tipo Cempleado