C# 实现类深复制
时间: 2023-10-19 08:55:39 浏览: 105
在C#中,要实现类的深复制,你可以使用以下几种方式:
1. 使用序列化和反序列化:使用BinaryFormatter或JsonSerializer等序列化器,将对象序列化为字节流或JSON字符串,然后再通过反序列化操作将其转换回新的对象。这种方式会创建一个完全独立的对象副本。
```csharp
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
using System.Runtime.Serialization.Json;
// 使用BinaryFormatter进行深复制
public static T DeepCopy<T>(T obj)
{
using (MemoryStream memoryStream = new MemoryStream())
{
BinaryFormatter formatter = new BinaryFormatter();
formatter.Serialize(memoryStream, obj);
memoryStream.Seek(0, SeekOrigin.Begin);
return (T)formatter.Deserialize(memoryStream);
}
}
// 使用JsonSerializer进行深复制
public static T DeepCopyJson<T>(T obj)
{
using (MemoryStream memoryStream = new MemoryStream())
{
DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(T));
serializer.WriteObject(memoryStream, obj);
memoryStream.Position = 0;
return (T)serializer.ReadObject(memoryStream);
}
}
```
2. 实现ICloneable接口:让需要进行深复制的类实现ICloneable接口,并在Clone方法中实现属性的逐个复制或使用其他方式创建新的对象。
```csharp
public class MyClass : ICloneable
{
public int MyProperty { get; set; }
public object Clone()
{
return new MyClass
{
MyProperty = this.MyProperty
};
}
}
```
然后可以使用Clone方法进行深复制:
```csharp
MyClass original = new MyClass { MyProperty = 42 };
MyClass clone = (MyClass)original.Clone();
```
3. 使用第三方库:还可以使用一些第三方库,如AutoMapper、DeepClone等,它们提供了更高级的深复制功能,可以自动处理对象之间的关联关系和复杂结构。
以上是实现类的深复制的几种常见方式,你可以根据具体情况选择适合的方法。需要注意的是,如果类中包含引用类型的成员变量,你可能需要对这些成员变量也进行深复制,以确保实现完全的深复制。
阅读全文