AD

¿Ya dominas lo básico? Un curso estructurado de VB.NET es la vía rápida para dar el salto.

Ver cursos de VB.NET en Udemy

Enlace de afiliado. No te cuesta nada extra.

🔷Lecciones de VB.NET
Lección 40 / 68

Copia superficial y copia profunda

En esta lección verás por qué asignar un objeto no siempre lo copia.

Al asignar un objeto de una clase a otra variable, ambas apuntan al mismo objeto: modificar uno cambia el otro.

El código de ejemplo lo demuestra con una dirección compartida.

La distinción de fondo en .NET es entre tipos por referencia y tipos por valor. Las Class son por referencia y se comparten; las Structure y los tipos básicos son por valor y se copian al asignarlos.

Para copiar de verdad hay que hacerlo a mano, creando un objeto nuevo con los mismos datos. .NET ofrece MemberwiseClone, que copia los campos — y es una copia superficial: los objetos anidados se siguen compartiendo. Para copiar en profundidad hay que recorrer la estructura.

Existe la interfaz ICloneable, y conviene saber que está desaconsejada: no especifica si la copia es superficial o profunda, así que quien la usa no sabe qué obtiene. La recomendación actual es escribir un método de copia propio con un nombre que lo diga.

La forma de evitar el problema por completo es no modificar nada: con objetos inmutables, la pregunta de cómo copiarlos desaparece.

📖 Código de referencia
✍️ Tu código
Escribe tu código y pulsa «Ejecutar»

🧪 Este sitio no puede compilar ni ejecutar VB.NET directamente, así que comprueba al instante si lo que escribiste coincide con el código de referencia (la corrección ocurre por completo en tu navegador; no se envía nada a ningún servidor).

🔗 El mismo tema en otros lenguajes

Mira cómo se escribe lo mismo en otro lenguaje.

Espacio publicitario (banner)
Espacio publicitario (en el artículo)