请问,C#里浅拷贝是新建一个对象,然后原对象的字段是值类型就复制值,原对象的字段是引用类型就复制地址。深拷贝则是新建一个对象,然后原对象的字段是值类型就复制值,原对象的字段是引用类型的话新对象就在托管堆新开辟一个内存存放引用类型字段的值,是不是这样理解呢?

解决方案 »

  1.   

    http://blog.csdn.net/xiaolei1982/archive/2008/04/02/2245480.aspx
      

  2.   

    a.浅拷贝(Shallow Copy 影子克隆):只复制对象的基本类型,对象类型,仍属于原来的引用。
    b.深拷贝(Deep Copy 深度克隆):不紧复制对象的基本类,同时也复制原对象中的对象.完全产生新对象。
      

  3.   

    把新对象的某个对象变量指向源对象那个对象。class A
    {
        public string Text;
    }
    class Test:ICloneable
    {
        public A a = new A();
              public object Clone()
        {
            return this.MemberwiseClone();
        }     
    }  protected void Page_Load(object sender, EventArgs e)
        {        Test t = new Test();
            t.a.Text = "A";        Response.Write(t.a.Text);
            Test t1 = (Test)t.Clone();
            t.a.Text = "B";        Response.Write(t1.a.Text);
            
        }看上面的例子,t.Text的值变成B了,t1是在改变之前Clone的,结果t1的值也是B
      

  4.   

    我想问,书上说浅复制是复制对象的地址,那为什么还要初始化新对象呢?
    ==>
    不是被copy对象,而是被copy对象中的属性,字段等是对象类型的时候才引用地址。
      

  5.   

        class student
        {
            public int age;
            public student(int i)
            {
                age = i;
            }
        }
        class Program
        {
            static void Main(string[] args)
            {
                student s1 = new student(22);
                student s2 = s1;
                s2.age = 27;
                Console.WriteLine(s1.age);
                Console.Read();
            }
        }这样输出的是27哦。。
      

  6.   

    student s2 = s1; 这哪是拷凡?这是把s2变量
    指向s1
      

  7.   

    呃。书上说s2=s1执行了浅拷贝。。
    所以我就很奇怪为什么这里的浅拷贝是复制对象地址而memberwiseclone的浅拷贝是初始化一个新对象了。。