class A
{public int n;};A x=new A;
A y;
y=x;这个时候y和x都指向同一个引用,如果再添加下面两个语句:
y.n=3;
Console.WriteLine(x.n); //注意:括号里是x.n不是y.n
此时输出结果是3而不是0;对于此例,在C++中y=x;语句只是简单的值复制(浅拷贝),x和y是不同的对象,都有为自己分配的存储空间.
但是C#中x和y指向同一个对象的引用的事实此时不是我想要的.我想在y=x;这个语句执行完后有C++那种浅拷贝的效果,我不想重载=然后在它里面用new开辟空间,把成员值一个一个复制到这个新对象上,最后再返回这个对象.请问我应该怎么做?(刚接触C#,可能C#里面有非常简单的方法实现这个作用,不过我不知道)

解决方案 »

  1.   

    C++里面引用和指针是不同的,C#里面的引用也不同于C++中的引用
      

  2.   

    Memberwiseclone, 不过是protect方法
      

  3.   

    y=x.Memberwiseclone()?
    这个不行啊~~~~
      

  4.   

    我不想重载=然后在它里面用new开辟空间,把成员值一个一个复制到这个新对象上,最后再返回这个对象
    ======这上面的事正是你需要做的。
      

  5.   

    都说了是protected方法,不能直接访问,对于实现了Clone方法的,直接调Clone,没有实现的这样用
    public object Clone()
    {
       return this.MemberwiseClone();
    }
    //把object换成你具体要Clone的类型.
    以上方法为浅拷贝