首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在C#中创建对象的副本

在C#中创建对象的副本有两种方法:浅拷贝和深拷贝。

  1. 浅拷贝

浅拷贝是指创建一个新对象,并将原对象的非静态字段复制到新对象中。如果原对象的字段是引用类型,则拷贝的是该字段的引用,而不是该字段指向的对象本身。

在C#中,可以使用Object.MemberwiseClone()方法来创建浅拷贝。

代码语言:csharp
复制
public class MyClass
{
    public int MyInt { get; set; }
    public string MyString { get; set; }
}

MyClass original = new MyClass { MyInt = 1, MyString = "Hello" };
MyClass copy = original.MemberwiseClone() as MyClass;
  1. 深拷贝

深拷贝是指创建一个新对象,并将原对象的非静态字段复制到新对象中,包括原对象的字段指向的对象本身。

在C#中,可以使用序列化和反序列化来创建深拷贝。

代码语言:csharp
复制
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;

public static T DeepClone<T>(T obj)
{
    using (var ms = new MemoryStream())
    {
        var formatter = new BinaryFormatter();
        formatter.Serialize(ms, obj);
        ms.Position = 0;
        return (T)formatter.Deserialize(ms);
    }
}

MyClass original = new MyClass { MyInt = 1, MyString = "Hello" };
MyClass copy = DeepClone(original);

在这个例子中,DeepClone方法使用二进制序列化和反序列化来创建深拷贝。需要注意的是,被拷贝的对象必须是可序列化的,否则会抛出异常。

总结:

在C#中创建对象的副本有两种方法:浅拷贝和深拷贝。浅拷贝只复制对象的非静态字段,而深拷贝会复制对象的非静态字段以及字段指向的对象本身。在创建副本时,需要根据实际需求选择合适的拷贝方式。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

领券