Bu makale, makine tarafından çevrilmiştir. Makaleyi İngilizce dilinde görüntülemek için İngilizce onay kutusunu işaretleyin. Ayrıca, fare işaretçisiyle İngilizce metnin üzerine gelerek metni açılır pencerede de görüntüleyebilirsiniz.
Çeviri
İngilizce

Object.MemberwiseClone Yöntemi ()

 

Geçerli basit bir kopyasını oluşturur Object.

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 kopya oluşturur. Bir alan bir değer türü ise, alan 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, özgün nesne ve klonu aynı nesneye başvuruyor.

Örneğin, nesneler A ve b nesne B, sırasıyla başvuran X başvuruları nesne C. adlı bir nesne düşünün A ve b nesneleri de başvuran yeni nesne X2 X basit bir kopyasını oluşturur Buna karşılık, başvuruda bulunan yeni nesneler A2 ve B2 bir kopyası olan yeni bir nesne X2 X derin bir kopyasını oluşturur ve B. B2 C. kopyası olan yeni bir nesne, C2 sırayla başvurur. Örnek, bir basit ve derin kopyalama işlemi arasındaki farkı gösterir.

Basit bir kopya işlemi tarafından gerçekleştirdiyseniz, derin kopyalama işlemi uygulamak için çok çeşitli yollar MemberwiseClone yöntemi, gereksinimlerini karşılamıyor. Bunlar aşağıdakileri içerir:

  • İkinci nesne ilk nesnesinden alınan özellik değerleri oluşturmak için Kopyalanacak nesnenin sınıf oluşturucusunu çağırın. Bu nesnenin değerlerini tamamen kendi sınıf oluşturucu tarafından tanımlanan varsayar.

  • Çağrı MemberwiseClone bir nesne basit bir kopyasını oluşturun ve ardından yeni nesneler değerleri olan tüm özellikler veya alanları değerleri olan başvuru türleri özgün nesneye aynı atamak için yöntemi. DeepCopy Yöntemi örnekte bu yaklaşımı gösterir.

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

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

Aşağıdaki örnekte gösterilmiştir MemberwiseClone yöntemi. Tanımlayan bir ShallowCopy çağıran yöntemi MemberwiseClone yöntemi basit kopyalama işlemi gerçekleştirmek için bir Person nesnesi. Ayrıca tanımlar bir DeepCopy derin kopyalama işlemi gerçekleştirir 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 M:System.Object.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.

Evrensel Windows Platformu
8 sonrasında kullanılabilir
.NET Framework
1.1 sonrasında kullanılabilir
Taşınabilir Sınıf Kitaplığı
Destekleyen: taşınabilir .NET platformları
Silverlight
2.0 sonrasında kullanılabilir
Windows Phone Silverlight
7.0 sonrasında kullanılabilir
Windows Phone
8.1 sonrasında kullanılabilir
Başa dön
Show: