.NET浅复制和深复制

浅复制和深复制

浅复制(Shallow Copy)和深复制(Deep Copy)是在编程中用于复制对象的两种方式。浅复制复制的是对象的引用(指针),而深复制则复制对象的实际值。

在.NET中,浅复制可以通过MemberwiseClone方法实现,而深复制则需要自己定义复制逻辑,手动复制对象的字段。

示例代码

public class MyObject : ICloneable
{
    public int Value { get; set; }
    
    // 浅复制
    public object ShallowCopy()
    {
        return this.MemberwiseClone();
    }
    
    // 深复制
    public object DeepCopy()
    {
        return new MyObject { Value = this.Value };
    }
    
}

class Program
{
    static void Main(string[] args)
    {
        MyObject original = new MyObject { Value = 5 };
        
        // 浅复制
        MyObject shallowCopy = (MyObject)original.ShallowCopy();
        
        // 深复制
        MyObject deepCopy = (MyObject)original.DeepCopy();
        
        // 修改原始对象的值,看看浅复制和深复制的对象是否受影响
        original.Value = 10;
        
        Console.WriteLine($"Original: {original.Value}");
        Console.WriteLine($"Shallow Copy: {shallowCopy.Value}");
        Console.WriteLine($"Deep Copy: {deepCopy.Value}");
        
        // 输出结果将显示浅复制的对象的值也被修改了,而深复制的对象的值未改变
    }
}

在这个例子中,MyObject类实现了ICloneable接口,并提供了ShallowCopyDeepCopy方法。ShallowCopy方法使用了MemberwiseClone,而DeepCopy方法则是通过创建一个新实例并复制每个字段来实现深复制。

当你修改原始对象的Value属性时,浅复制的对象会反映这个改变,而深复制的对象则保持原样。这展示了浅复制和深复制的区别。

这种创建对象的方式,也是设计模式中-原型模式的一种实现:用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象。

posted @ 2024-05-30 17:39  梦想航路  阅读(35)  评论(0编辑  收藏  举报