C# 对象复制:浅拷贝和深拷贝详解
在C#中,要复制一个对象,可以使用以下方法之一:
-
使用'MemberwiseClone'方法:'MemberwiseClone'方法是'System.Object'类中的一个受保护的方法,它用于创建当前对象的一个浅拷贝。浅拷贝将复制对象的字段值,但不会复制引用类型的字段所引用的对象。要使用'MemberwiseClone'方法,需要确保对象类实现了'ICloneable'接口。
public class MyClass : ICloneable { public int MyProperty { get; set; } public object Clone() { return this.MemberwiseClone(); } }然后,可以通过调用'Clone'方法来复制对象。
MyClass original = new MyClass(); original.MyProperty = 10; MyClass copy = (MyClass)original.Clone(); -
使用序列化和反序列化:可以使用C#的序列化和反序列化功能来复制一个对象。首先,需要确保对象类标记为可序列化,即在类定义前面添加'[Serializable]'特性。
[Serializable] public class MyClass { public int MyProperty { get; set; } }然后,可以使用'BinaryFormatter'类将对象序列化为字节数组,再将字节数组反序列化为新的对象。
using System.IO; using System.Runtime.Serialization.Formatters.Binary; MyClass original = new MyClass(); original.MyProperty = 10; BinaryFormatter formatter = new BinaryFormatter(); using (MemoryStream stream = new MemoryStream()) { formatter.Serialize(stream, original); stream.Seek(0, SeekOrigin.Begin); MyClass copy = (MyClass)formatter.Deserialize(stream); }
无论哪种方法,都可以复制一个对象,但请注意,如果对象包含引用类型的字段,则只会复制引用,而不会复制引用对象本身。如果需要复制引用对象,需要进一步处理。
原文地址: https://www.cveoy.top/t/topic/fdRH 著作权归作者所有。请勿转载和采集!