引用类型的赋值、浅拷贝和深拷贝的区别

时间:2020-12-11 19:50:42

首先,赋值的话很简单,就是将原来对象的地址给新的对象拷贝一下即可。2个变量会同时改变,一个改变,另一个也改变!

浅拷贝,需要继承ICloneable 接口(支持克隆,即用与现有实例相同的值创建类的新实例)然后用MemberwiseClone 方法(创建当前 System.Object 的浅表副本)。但是需要注意的是MemberwiseClone的拷贝方式,首先它是浅拷贝,方法是将所有的值类型字段拷贝一个副本,但是引用类型的字段不会创建副本,仅仅是传递一个相同的地址给新对象,并且新对象和原对象指向的地址都是一致的。


浅拷贝实现:


public class model 
{
public int id;
public int name;
public object Clone()
{
return this.MemberwiseClone();
}
}

在基类Object类中有:
protected object MemberwiseClone();

调用:model m =(model) model.Clone();