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