Saltar al contenido

Creando una copia de un objeto en C#

Si te encuentras con algo que no comprendes nos puedes dejar un comentario y haremos todo lo posible de ayudarte lo más rápido posible.

Solución:

Podrías hacerlo:

class myClass : ICloneable

    public String test;
    public object Clone()
    
        return this.MemberwiseClone();
    

entonces puedes hacer

myClass a = new myClass();
myClass b = (myClass)a.Clone();

nótese bien MemberwiseClone() Crea una copia superficial del System.Object actual.

No hay forma integrada. Puede hacer que MyClass implemente el IClonable interfaz (pero está un poco obsoleta) o simplemente escriba su propio método Copiar/Clonar. En cualquier caso, tendrás que escribir algo de código.

Para objetos grandes, podría considerar la serialización + deserialización (a través de un MemoryStream), solo para reutilizar el código existente.

Cualquiera que sea el método, piense detenidamente qué significa exactamente “una copia”. ¿Qué tan profundo debe ser, hay campos de identificación para ser exceptuados, etc.

La forma más fácil de hacer esto es escribir un constructor de copias en la clase MyClass.

Algo como esto:

namespace Example

    class MyClass
    
        public int val;

        public MyClass()
        
        

        public MyClass(MyClass other)
        
            val = other.val;
        
    

El segundo constructor simplemente acepta un parámetro de su propio tipo (el que desea copiar) y crea un nuevo objeto asignado con el mismo valor

class Program

    static void Main(string[] args)
    
        MyClass objectA = new MyClass();
        MyClass objectB = new MyClass(objectA);
        objectA.val = 10;
        objectB.val = 20;
        Console.WriteLine("objectA.val = 0", objectA.val);
        Console.WriteLine("objectB.val = 0", objectB.val);
        Console.ReadKey();
    

producción:

objectA.val = 10

objectB.val = 20               

Sección de Reseñas y Valoraciones

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *