Una cosa Geek (deep-clon de una clase en VB.NET)


Bueno, me da un poco verguenza abrir un post solo para esto tras un año y mas con la de cosas que me han pasado tan graves, tan interesantes y tan de todo, pero tras hacer esa puntualizacion, he encontrado una cosa para los sufridos programadores de Visual Basic muy muy util

Un metodo para hacer un deepclon de una clase sin matarte mucho la cabeza, basta con modificar un poquito tu clase para incluir un metodo clone y un poquito la Definicion.

Encontrado en: www.rectanglered.com

Imports System.IO
Imports System.Runtime.Serialization.Formatters.Binary

<Serializable()> _
Public Class todo1
Implements ICloneable

Private NombreValor As String
Private ContrasenaValor As String
Public TipoVentaValor As Integer
Public PorcentajeValor As Decimal
Public pkIdValor As Integer
Public CodigoClienteValor As Integer
Public TipoAsociadoMapfreValor As Int32
Public CampoIdiomaValor As String
Public CampoDescripcionIdiomaValor As String

Public Function Clone() As Object Implements System.ICloneable.Clone
Dim m As New MemoryStream()
Dim f As New BinaryFormatter()
f.Serialize(m, Me)
m.Seek(0, SeekOrigin.Begin)
Return f.Deserialize(m)
End Function

End Class

Las partes en cursiva son las que es necesario añadir para que un objeto sea clonable, el resto es un ejemplo de clase.

Asi podras usarla así:

Dim t1 as todo1 = New todo1
Dim t2 as todo1 = t1.Clone

NOTA: Si una propiedad es compleja (otra clase, …) hay que asegurarse que sea serializable tambien (recuerda que estamos haciendo un deep clon)

Anuncios

Acerca de vongonsez

Ciudadano cabreado y poeta metido a informatico ... bueno, o viceversa.
Esta entrada fue publicada en Informática, Trabajo y etiquetada , , . Guarda el enlace permanente.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s