/Object类只有MemberwiseClone
调用了就已经产生了一个新对象了,这是浅复制
在浅克隆中,如果原型对象的成员变量是值类型,将复制一份给克隆对象;如果原型对象的成员变量是引用类型,则将引用对象的地址复制一份给克隆对象,也就是说原型对象和克隆对象的成员变量指向相同的内存地址。简单来说,在浅克隆中,当对象被复制时只复制它本身和其中包含的值类型的成员变量,而引用类型的成员对象并没有复制/
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiAnYldHL0FWby9mZvwFN4ETMfdHLkVGepZ2XtxSZ6l2clJ3LcV2Zh1Wa9M3clN2byBXLzN3btgHL9s2RkBnVHFmb1clWvB3MaVnRtp1XlBXe0xCMy81dvRWYoNHLwEzX5xCMx8FesU2cfdGLwMzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsQTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5CNyQDM5IzN5cTY5IDNwIjNzYzX3EjN0MTMyAzLcFTMyIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLyM3Lc9CX6MHc0RHaiojIsJye.png)
/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();
}
}
}