|
Este artículo proviene de un motor de traducción automática. Mueva el puntero sobre las frases del artículo para ver el texto original. Más información.
|
Traducción
Original
|
Object.MemberwiseClone (Método)
Espacio de nombres: System
Ensamblado: mscorlib (en mscorlib.dll)
Llame a un constructor de clase del objeto que se va a copiar para crear un segundo objeto con valores de propiedad tomado del primer objeto. Esto supone que los valores de un objeto están completamente definidos por su constructor de clase. Llame al método MemberwiseClone para crear una copia superficial de un objeto y, a continuación, asigne nuevos objetos cuyos valores son igual que el objeto original a las propiedades o campos cuyos valores sean los tipos de referencia. El método DeepCopy del ejemplo ilustra este enfoque. Serialice el objeto del que se va a hacer una copia profunda y, a continuación, restaure los datos serializados a una variable de objeto diferente. Utilice la reflexión con recursividad para realizar la operación de copia en profundidad.
using System; public class IdInfo { public int IdNumber; public IdInfo(int IdNumber) { this.IdNumber = IdNumber; } } public class Person { public int Age; public string Name; public IdInfo IdInfo; public Person ShallowCopy() { return (Person)this.MemberwiseClone(); } public Person DeepCopy() { Person other = (Person) this.MemberwiseClone(); other.IdInfo = new IdInfo(this.IdInfo.IdNumber); return other; } } public class Example { public static void Main() { // Create an instance of Person and assign values to its fields. Person p1 = new Person(); p1.Age = 42; p1.Name = "Sam"; p1.IdInfo = new IdInfo(6565); // Perform a shallow copy of p1 and assign it to p2. Person p2 = (Person) p1.ShallowCopy(); // Display values of p1, p2 Console.WriteLine("Original values of p1 and p2:"); Console.WriteLine(" p1 instance values: "); DisplayValues(p1); Console.WriteLine(" p2 instance values:"); DisplayValues(p2); // Change the value of p1 properties and display the values of p1 and p2. p1.Age = 32; p1.Name = "Frank"; p1.IdInfo.IdNumber = 7878; Console.WriteLine("\nValues of p1 and p2 after changes to p1:"); Console.WriteLine(" p1 instance values: "); DisplayValues(p1); Console.WriteLine(" p2 instance values:"); DisplayValues(p2); // Make a deep copy of p1 and assign it to p3. Person p3 = p1.DeepCopy(); // Change the members of the p1 class to new values to show the deep copy. p1.Name = "George"; p1.Age = 39; p1.IdInfo.IdNumber = 8641; Console.WriteLine("\nValues of p1 and p3 after changes to p1:"); Console.WriteLine(" p1 instance values: "); DisplayValues(p1); Console.WriteLine(" p3 instance values:"); DisplayValues(p3); } public static void DisplayValues(Person p) { Console.WriteLine(" Name: {0:s}, Age: {1:d}", p.Name, p.Age); Console.WriteLine(" Value: {0:d}", p.IdInfo.IdNumber); } } // The example displays the following output: // Original values of p1 and p2: // p1 instance values: // Name: Sam, Age: 42 // Value: 6565 // p2 instance values: // Name: Sam, Age: 42 // Value: 6565 // // Values of p1 and p2 after changes to p1: // p1 instance values: // Name: Frank, Age: 32 // Value: 7878 // p2 instance values: // Name: Sam, Age: 42 // Value: 7878 // // Values of p1 and p3 after changes to p1: // p1 instance values: // Name: George, Age: 39 // Value: 8641 // p3 instance values: // Name: Frank, Age: 32 // Value: 7878
Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (no se admite el rol Server Core), Windows Server 2008 R2 (se admite el rol Server Core con SP1 o versiones posteriores; no se admite Itanium)
.NET Framework no admite todas las versiones de todas las plataformas. Para obtener una lista de las versiones compatibles, vea Requisitos de sistema de .NET Framework.