温馨提示×

C#object如何实现深拷贝

c#
小樊
115
2024-07-08 20:06:19
栏目: 编程语言

在C#中实现深拷贝的方法有很多种,以下是其中一种方法:

  1. 使用序列化和反序列化:将对象序列化为字节数组,然后再将字节数组反序列化为一个新的对象。这样可以创建一个完全独立的对象,与原始对象没有任何关联。
using System;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;

[Serializable]
public class MyClass
{
    public int MyProperty { get; set; }
}

public class DeepCopyExample
{
    public static T DeepCopy<T>(T obj)
    {
        using (MemoryStream stream = new MemoryStream())
        {
            IFormatter formatter = new BinaryFormatter();
            formatter.Serialize(stream, obj);
            stream.Seek(0, SeekOrigin.Begin);
            return (T)formatter.Deserialize(stream);
        }
    }

    public static void Main()
    {
        MyClass originalObject = new MyClass { MyProperty = 42 };
        MyClass copiedObject = DeepCopy(originalObject);

        Console.WriteLine($"Original Object: {originalObject.MyProperty}");
        Console.WriteLine($"Copied Object: {copiedObject.MyProperty}");
    }
}

在上面的代码中,DeepCopy方法接受一个泛型参数T,并将输入对象序列化为字节数组,然后再反序列化为一个新的对象。最后输出原始对象和深拷贝后的对象的属性值。

通过这种方法可以实现深拷贝,确保新对象与原始对象完全独立,没有任何引用关系。

0