天天看點

淺拷貝MemberwiseClone()

/Object類隻有MemberwiseClone

調用了就已經産生了一個新對象了,這是淺複制

在淺克隆中,如果原型對象的成員變量是值類型,将複制一份給克隆對象;如果原型對象的成員變量是引用類型,則将引用對象的位址複制一份給克隆對象,也就是說原型對象和克隆對象的成員變量指向相同的記憶體位址。簡單來說,在淺克隆中,當對象被複制時隻複制它本身和其中包含的值類型的成員變量,而引用類型的成員對象并沒有複制/

淺拷貝MemberwiseClone()

/MemberWiseClone()是System.Object包含的其中一個方法。因為所有的類都繼承于System.Object,

是以這些類都可以通路System.Object中受保護的成員

包括MemberWiseClone()方法;在MyCopyableClass類中定義的GetCopy()方法,也叫淺度複制

它是通過建立一個新對象并複制成員,也就複制了該對象/

using System;
using static System.Console;

namespace MemberClone
{
    class Program
    {
        static void Main(string[] args)
        {
            Person p1=new Person();
            p1.Age = 20;
            p1.Name = "一休";
            p1.idInfo=new IdInfo(666);

            Person p2=p1.ShallowCopy(); //P2中的Age 和 Name 相對于 P1是全新的,但P2中的 IdInfo 和 P1中的 IdInfo 是同一個對象,二者同在一個記憶體位址!
            WriteLine(p2.Age+":"+p2.Name+":"+p2.idInfo.IdNumber);

            ReadKey();
        }
    }

    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();
        }

    } 

}      
淺拷貝MemberwiseClone()