Método Object.MemberwiseClone en C# con ejemplos

El método Object.MemberwiseClone se usa para crear una copia superficial o clonar el objeto actual . La copia superficial es una copia bit a bit de un objeto. En este caso, se crea un nuevo objeto y ese objeto tiene una copia exacta del objeto existente. Básicamente, este método copia los campos no estáticos del objeto actual al nuevo objeto.

  • Si un campo es un tipo de referencia, entonces se copia la única referencia, no el objeto referido. Así que aquí, el objeto clonado y el objeto original se referirán al mismo objeto.
  • Si el campo es de tipo valor, se realizará la copia bit a bit del campo.

Sintaxis:

protected object MemberwiseClone ();

Devoluciones: este método devuelve un objeto , que es la copia superficial del objeto existente. Ejemplo 1: 

csharp

// C# program to clone a object
// using MemberwiseClone() method
using System;
 
class GFG1 {
 
    public int val;
 
    public GFG1(int val)
    {
        this.val = val;
    }
     
}
 
class GFG2 {
 
    public GFG1 gg;
 
    public GFG2(int val)
    {
        // copy the reference of GFG1 to gg
        this.gg = new GFG1(val);  
    }
 
    // method for cloning
    public GFG2 Clone()
    {
        // return cloned value using
        // MemberwiseClone() method
        return ((GFG2)MemberwiseClone());
        
    }
}
 
// Driver Code
class Geek {
 
 
    // Main Method
    public static void Main()
    {
        // object of Class GFG2 with a value 3
        GFG2 g = new GFG2(3);
         
        // calling Clone()
        // "cc" has the reference of Clone()
        GFG2 cc = g.Clone();
        
        // accessing the main value
        Console.WriteLine("Value: " + g.gg.val);
         
        // accessing the cloned value
        Console.WriteLine("cloned value: " + cc.gg.val);
         
        // set a new value
        // in variable "val"
        cc.gg.val = 6;
         
        // accessing the main value
        Console.WriteLine("\nValue: " + g.gg.val);
        
        // accessing the cloned value
        Console.WriteLine("cloned value: " + cc.gg.val);
         
    }
}
Producción:

Value: 3
cloned value: 3

Value: 6
cloned value: 6

Ejemplo 2: 

csharp

// C# program to demonstrate the
// MemberwiseClone() method
using System;
 
public class GFG : ICloneable {
 
    // data members
    public string Name;
    public string Surname;
    public int Age;
 
    // constructor
    public GFG(string name,
     string title, int age)
    {
        Name = name;
        Surname = title;
        Age = age;
    }
 
    // method for cloning
    public object Clone()
    {
        // return cloned value using
        // MemberwiseClone() method
        return MemberwiseClone();  
    }
 
    public override string ToString()
    {
        return string.Format("Name = {0}, Surname = {1}, Age {2}",
                                              Name, Surname, Age);
    }
}
 
// Driver Class
public class MainClass {
 
    // Main Method
    public static void Main()
    {
        GFG g = new GFG("ABC", "XYZ", 26);
 
        // calling Clone()
        // "cg" has reference of Clone()
        GFG cg = (GFG)g.Clone();
         
        Console.WriteLine("For Old values\nOriginal :");
        Console.WriteLine(g);
 
        Console.WriteLine("Cloned :");
        Console.WriteLine(cg);
 
        Console.WriteLine("\nAfter assigning new values");
        g.Name = "LMN";
        g.Surname = "QRS";
        g.Age = 13;
 
        Console.WriteLine("Original :");
        Console.WriteLine(g);
 
        Console.WriteLine("Cloned :");
 
        // prints the old cloned value
        Console.WriteLine(cg);
         
    }
}
Producción:

For Old values
Original :
Name = ABC, Surname = XYZ, Age 26
Cloned :
Name = ABC, Surname = XYZ, Age 26

After assigning new values
Original :
Name = LMN, Surname = QRS, Age 13
Cloned :
Name = ABC, Surname = XYZ, Age 26

Referencia:

Publicación traducida automáticamente

Artículo escrito por SoumikMondal y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

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