DeepClone与ShadowClone
杳MSDN知:
ArrayList.Clone 方法


下面给出一个完整的例子:
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;

namespace CloneObjectTest
{

// Just added to show the difference between shallow and deep cloning
[Serializable()]
class SampleRefType
{
public int Val;
}

[Serializable()]
class Employee
{
public string m_Name;
public Int16 m_age;
public SampleRefType someObject;

public void Print()
{
Console.WriteLine("Name : " + m_Name);
Console.WriteLine("Age : " + m_age);
Console.WriteLine("Some Value: " + someObject.Val);
}
// This is one way to do deep cloning. But works only if the
// objects and its references are serializable
public Employee DeepClone()
{
MemoryStream m = new MemoryStream();
BinaryFormatter b = new BinaryFormatter();
b.Serialize(m, this);
m.Position = 0;
return (Employee)b.Deserialize(m);
}
// Do shallow cloning
public Employee ShallowClone()
{
return (Employee)this.MemberwiseClone();
}
static void Main(string[] args)
{
SampleRefType objRef = new SampleRefType();
objRef.Val = 1000;
Employee objA = new Employee();
objA.m_Name = "Manoj";
objA.m_age = 23;
objA.someObject = objRef;
Employee objB = objA.DeepClone();
Employee objC = objA.ShallowClone();
//objB is a deep clone. So chages made to objRef would not affect objB's value.
//But objC is shallow cloned. So, if the objRef is changed, so is the value in
//ObjC. So objC should print 2000 whereas objB should print 1000
objRef.Val = 2000;

//Updating some state
objC.m_age = 100;
objB.m_Name = "New Name";

Console.WriteLine("Original Object:");
objA.Print();
Console.WriteLine();
Console.WriteLine("Shallow Cloned Object:");
objC.Print();
Console.WriteLine();
Console.WriteLine("Deep Cloned Object:");
objB.Print();
}
}
}
ArrayList.Clone 方法
创建ArrayList 的浅表副本。
命名空间:System.Collections
程序集:mscorlib(在 mscorlib.dll 中)
集合的浅表副本仅复制集合的元素(不论它们是引用类型还是值类型),但不复制引用所引用的对象。新集合中的引用与原始集合中的引用指向相同的对象。
与之相对,集合的深层副本将复制这些元素以及由它们直接或间接引用的所有内容。
据此,说明如下 :

下面给出一个完整的例子:











































































【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)