C# 实现对象深拷贝(序列化方式)

简介: 利用 BinaryFormatter 实现对象深拷贝,适用于复杂对象复制。需标记类为 [Serializable],通过序列化与反序列化实现完整克隆,确保成员独立。

利用 BinaryFormatter 实现对象的深拷贝,适用于复杂对象的复制。

using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
[Serializable]
public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
    public List<string> Hobbies { get; set; } = new List<string>();
}
public static class DeepCopyHelper
{
    public static T DeepCopy<T>(T obj)
    {
        using (var ms = new MemoryStream())
        {
            BinaryFormatter formatter = new BinaryFormatter();
            formatter.Serialize(ms, obj);
            ms.Position = 0;
            return (T)formatter.Deserialize(ms);
        }
    }
}
// 调用示例
public static void TestDeepCopy()
{
    var p1 = new Person { Name = "张三", Age = 25 };
    p1.Hobbies.Add("编程");
    var p2 = DeepCopyHelper.DeepCopy(p1);
    p2.Hobbies.Add("阅读");
    Console.WriteLine($"p1爱好: {string.Join(",", p1.Hobbies)}"); // 编程
    Console.WriteLine($"p2爱好: {string.Join(",", p2.Hobbies)}"); // 编程,阅读
}

注意:被拷贝的类必须标记 [Serializable] 特性。

相关文章
|
2天前
|
安全 C#
C# 泛型:实现类型安全的通用代码
泛型通过类型参数(如T)实现类型通用性,可定义不指定具体类型的类或方法,使用时再确定类型。示例中,Swap&lt;T&gt;方法可交换任意同类型变量,List&lt;T&gt;集合避免装箱拆箱,提升性能与安全。
|
2天前
|
C#
C# 字符串操作:常用方法汇总(含案例)
C# 提供丰富的字符串操作方法,如拼接、截取、替换和判断等。本文通过工具类案例演示如何高效处理字符串,提升开发效率与代码可读性。
|
2天前
|
算法 C#
C# 实现简单的策略模式
策略模式定义算法族,封装可互换的算法,使算法变化独立于客户端。通过接口统一调用,支持动态切换排序方式,如冒泡排序与快速排序,提升系统灵活性与可扩展性。
|
2天前
|
C# UED
C# 制作控制台版验证码认证(核心案例)
验证码用于防止恶意操作,控制台程序通过生成随机字符实现验证功能。用户输入验证码后系统比对,支持多次尝试并提示剩余机会,错误过多则认证失败,确保安全性与用户体验平衡。(236字符)
|
2天前
|
C#
C# 随机数生成:Random 类用法
Random类用于生成伪随机数,适用于游戏、验证码、测试等场景。通过静态实例避免重复创建,确保随机性。提供整数、小数、布尔值及指定长度的随机字符串生成方法,使用简便且高效。注意需复用实例防止种子重复导致随机数相同。
|
2天前
|
开发框架 .NET Java
C# LINQ:简化集合查询(基础用法)
LINQ是C#中集成的查询功能,可简洁高效地查询集合、数据库等数据源。通过示例演示了过滤、排序、分组、投影和聚合操作,展现其在处理产品列表时的强大与便捷。
|
2天前
|
安全 C#
C# 实现简单的单例模式(懒汉式)
单例模式确保一个类仅存在一个实例,并提供全局访问点。通过私有构造函数防止外部实例化,结合静态属性和延迟初始化实现线程安全的唯一实例,常用于日志、配置管理等场景。
|
2天前
|
安全 C#
C# 实现文本文件批量重命名工具
批量重命名工具可统一修改文件夹内文件名,支持添加前缀或替换关键词。通过C#代码实现,安全高效,避免文件覆盖,适用于大量文件的命名整理,操作简单便捷。
|
2天前
|
Java C#
C# 实现简单的线程池工具
使用 `ThreadPool` 管理多线程任务,有效控制并发数量,避免因线程过多导致系统性能下降。通过示例代码演示如何提交任务、跟踪完成状态,并等待所有任务结束,提升资源利用率和程序稳定性。
|
2天前
|
算法 C# 容器
C# 实现简单的迭代器模式
迭代器模式提供一种顺序访问聚合对象元素的方法,无需暴露其内部结构。通过定义统一的迭代接口,实现对不同集合的遍历操作,增强容器的封装性和算法的复用性。

热门文章

最新文章