Como clonar objetos .net: implementando Iclonable
Si asignamos un objeto a otro usando el simbolo = 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 simbolo = 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
Aqui teneis 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 FunctionEnd Class
|
Una vez hecho esto sólo tenemos que llamar al metodo Clone sobre la instancia de nuestro objeto de tipo Cempleado
Para más información sobre los interfaces podeis echar un ojo a esta página:
http://www.devjoker.com/asp/ver_contenidos.aspx?co_contenido=165