什么是浅拷贝?
浅拷贝是指copy的对象和被copy的对象它们公用一个实体,也就是同时指向内存中的一个相同的地址。比如,有的地方把太阳叫“太阳”,而有的地方把太阳叫做“日头”,不管是“太阳”还是“日头”,指的都是太阳这个物体,如果某天“太阳”缺了一块儿(只说如果),那么“日头”也肯定会缺一块儿,因为它们是指的是同一物体,只是称呼不同。
什么是深拷贝?
深拷贝是指copy的对象和被copy的对象两个都是独立的、互不影响的。就像玩具厂生产出来的玩具,它们是一模一样的,都可以被买走,但是又是谁也不影响谁。
* 一般来讲,值类型的copy都属于深拷贝,而引用类型copy都属于浅拷贝(string类型除外)。
如何实现深拷贝?
克隆的方法网上有很多,就不多说了。这里给大家推荐一种非常简单、易懂而且安全实用的方法来实现深拷贝,欢迎大家指出不足^_^
public class User { string name; public string Name //姓名 { get { return name; } set { name = value; } } int age; public int Age //年龄 { get { return age; } set { age = value; } } bool gender; public bool Gender //性别 { get { return gender; } set { gender = value; } } public User Copy(User user) //深拷贝方法 { //创建一个新的User对象 User newUser = new User(); //将你要Copy的User对象的所有属性赋值给新建的User对象 newUser.Name = user.Name; newUser.Age = user.Age; newUser.Gender = user.Gender; //将赋值后的User对象return,这样你就得到了一个和你要Copy的User对象一模一样的新的User对象 return newUser; } }
测试代码:
class Program { static void Main(string[] args) { //创建一个名为张三的User对象 User user = new User(); user.Age = 18; user.Name = "张三"; user.Gender = false; //将张三这个User对象Copy给newUser User newUser = user.Copy(user); //改变张三这个对象的各个属性 user.Name = "李四"; user.Age = 20; user.Gender = true; //输出张三的信息 Console.WriteLine(user.Name); Console.WriteLine(user.Age); Console.WriteLine(user.Gender); Console.WriteLine(); //输出newUser的信息 Console.WriteLine(newUser.Name); Console.WriteLine(newUser.Age); Console.WriteLine(newUser.Gender); Console.ReadLine(); } }