|
Dieser Artikel wurde maschinell übersetzt. Bewegen Sie den Mauszeiger über die Sätze im Artikel, um den Originaltext anzuzeigen. Weitere Informationen
|
Übersetzung
Original
|
Object.MemberwiseClone-Methode
Aktualisiert: September 2010
Namespace: System
Assembly: mscorlib (in mscorlib.dll)
Rufen Sie einen Klassenkonstruktor des Objekts auf, der kopiert werden soll, um ein zweites Objekt mit vom ersten Objekt akzeptierten Eigenschaftswerten zu erstellen. Dabei wird davon ausgegangen, dass die Werte eines Objekts vollständig durch den Klassenkonstruktor definiert werden. Rufen Sie die MemberwiseClone-Methode auf, um eine flache Kopie eines Objekts zu erstellen, und weisen Sie dann neue Objekte, deren Werte dem ursprünglichen Objekt entsprechen, zu Eigenschaften oder Feldern zu, deren Werte Verweistypen sind. Die DeepCopy-Methode im Beispiel veranschaulicht diesen Ansatz. Serialisieren Sie das Objekt, für das eine tiefe Kopie ausgeführt werden soll, und stellen Sie dann die serialisierten Daten in einer anderen Objektvariable wieder her. Verwenden Sie Reflektion mit Rekursion, um den Tiefenkopievorgang auszuführen.
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 (Server Core-Rolle wird nicht unterstützt), Windows Server 2008 R2 (Server Core-Rolle wird mit SP1 oder höher unterstützt; Itanium wird nicht unterstützt)
.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen für .NET Framework.