MemberwiseClone Yöntem
Bu makale makine tarafından çevrilmiştir. Orijinal metni görmek için imlecinizi makaledeki cümlelerin üzerine getirin. Daha Fazla Bilgi.
Çeviri
Original

Object.MemberwiseClone Yöntem ()

 

Mevcut Object'in basit bir kopyasını oluşturur.

Ad Alanı:   System
Derleme:  mscorlib (mscorlib.dll içinde)

protected object MemberwiseClone()

Dönüş Değeri

Type: System.Object

Geçerli basit bir kopyası Object.

MemberwiseClone Yöntemi yeni bir nesne oluşturarak ve ardından statik olmayan alanları geçerli nesnenin yeni nesneye kopyalama basit bir kopyasını oluşturur.Bir alan bir değer türü ise, alan bir bit bit kopyasını gerçekleştirilir.Bir alan bir başvuru türü ise, başvuru kopyalanır ancak başvurulan nesne değil; Bu nedenle, orijinal nesneyi ve kendi kopya aynı nesne için bakın.

Örneğin, bir ve B. nesneleri başvuran X adlı bir nesne göz önünde bulundurun.B sırayla nesnesini, başvuruları C. nesneX basit bir kopyası nesneleri A ve b başvuran yeni X 2 oluştururBuna karşılık, A2 ve B2 bir kopyası olan yeni nesneler başvuran yeni bir nesne X 2 X ayrıntılı bir kopyasını oluşturur ve B.C. bir kopyası olan yeni nesneye C2, B2 sırayla başvururÖrnek, bir basit ve ayrıntılı kopyalama işlemi arasındaki farkı gösterir.

Basit kopyalama işlemi tarafından gerçekleştirdiyseniz derin kopyalama işlemi uygulamak için çok çeşitli yollar MemberwiseClone yöntemi gereksinimlerinizi karşılayacak değil.Bunlar aşağıdakileri içerir:

  • Nesnenin ikinci nesneden ilk nesnesinden alınan özellik değerlerini oluşturmak için kopyalanacak bir sınıf oluşturucu çağrılır.Bu nesnenin değerlerini tamamen sınıf oluşturucusu tarafından tanımlanan varsayar.

  • Arama MemberwiseClone bir nesne basit bir kopyası oluşturun ve ardından yeni nesneler değerleri olan tüm özellikleri veya değerleri olan başvuru türleri alanlar orijinal nesneyi aynı atamak için yöntem. DeepCopy Yöntemi örnekte bu yaklaşımın göstermektedir.

  • Kopyalanan derin olması için nesneyi serileştirmek ve sonra farklı nesne değişkenine serileştirilmiş veriler geri yükleyin.

  • Yansıma birlikte özyineleme derin kopyalama işlemi gerçekleştirmek için kullanın.

Aşağıdaki örnekte gösterilmektedir MemberwiseClone yöntemi.Bu tanımlayan bir ShallowCopy çağıran yöntemi MemberwiseClone basit kopyalama işlemi gerçekleştirmek için yöntemi bir Person nesne.Ayrıca tanımlayan bir DeepCopy derin kopyalama işlemi gerçekleştiren yöntemi bir Person nesnesi.

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(IdInfo.IdNumber);
       other.Name = String.Copy(Name);
       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 = 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

In this example, the Person.IdInfo property returns an IdInfo object.As the output from the example shows, when a Person object is cloned by calling the MemberwiseClone method, the cloned Person object is an independent copy of the original object, except that they share the same Person.IdInfo object reference.As a result, modifying the clone's Person.IdInfo property changes the original object's Person.IdInfo property.On the other hand, when a deep copy operation is performed, the cloned Person object, including its Person.IdInfo property, can be modified without affecting the original object.

Universal Windows Platform
Þu saatten beri kullanýlabilir: 4.5
.NET Framework
Þu saatten beri kullanýlabilir: 1.1
Portable Class Library
Destekleyen: portable .NET platforms
Silverlight
Þu saatten beri kullanýlabilir: 2.0
Windows Phone Silverlight
Þu saatten beri kullanýlabilir: 7.0
Windows Phone
Þu saatten beri kullanýlabilir: 8.1
Başa dön
Show:
© 2016 Microsoft