C# .net 中的浅层和深层克隆

本文关键字:net | 更新日期: 2023-09-27 17:56:26

class CloneExample : ICloneable
{
    private int m_data ;
    private double m_data2 ;
    public object Clone()
    {
        return this.MemberwiseClone();
    }
    public CloneExample()
    {
    }
    public CloneExample(int data1, int data2)
    {
        m_data = data1;
        m_data2 = data2;
    }
    public override string ToString()
    {
       return String.Format("[d1,d2] {0} {1}", m_data, m_data2);
    }
}
class Program
{
    static void Main(string[] args)
    {
        CloneExample aEx = new CloneExample(10,20);
        CloneExample aEx2 = (CloneExample)aEx.Clone();
        Console.WriteLine("the first object value is {0}", aEx.ToString());
        Console.WriteLine("the first object value is {0}", aEx2.ToString());
        Console.Read();
    }
}
  1. 我写了一个例子来了解浅层克隆是如何工作的。在上面的例子中克隆方法 我称之为。MemberWiseClone() ,因为在类中我没有实现 memeberwiseclone 。谁将提供默认实现?

C# .net 中的浅层和深层克隆

Memberwiseclone 首先创建实例,可能使用 Activator.CreateInstance,然后遍历类型中的所有字段并将值设置为相应的成员/字段。

但我宁愿根本不使用ICloneable。如果我需要使用克隆,我会使用 BinaryFormatter 来序列化对象图,然后对其进行反序列化,以便获得新的深度克隆实例。

每个对象都继承自"对象",即使您没有指定。所以它就在那里。

MemberwiseClone的默认实现来自 .NET 中的 Object 类。

MemberwiseClone 方法使用反射来完成这项工作。

这是由基对象类提供的。 在此处查看文档。

相关文章:
  • 没有找到相关文章