WEB开发网
开发学院软件开发C语言 C# Tips-浅拷贝和深拷贝(shallow copy VS deep co... 阅读

C# Tips-浅拷贝和深拷贝(shallow copy VS deep copy )

 2009-05-14 08:28:26 来源:WEB开发网   
核心提示: 赋值操作(=)VS使用Object类MemberwiseClone实现对于引用类型的变量,我们有种误解,C# Tips-浅拷贝和深拷贝(shallow copy VS deep copy )(2),认为赋值操作就是浅拷贝一种,其实不然,只有顶级对象是重复的,并且顶级以下的对象包含引用,两者

赋值操作(=)VS使用Object类MemberwiseClone实现

对于引用类型的变量,我们有种误解,认为赋值操作就是浅拷贝一种,其实不然,两者有区别。

浅拷贝(shallow copy)对于引用类型对象中的值类型字段进行了逐位复制。赋值运算符只是把源对象的引用赋值给目的对象,两者引用同一个对象。

浅拷贝后的对象的值类型字段更改不会反映到源对象,而赋值运算后的对象的值类型字段更改会反映到源对象

代码实现如下:

    public class Person
    {
        public int Age { get; set; }
        public string Address { get; set; }
        public Name Name { get; set; }
    }


    public class Name
    {
        public Name(string frisName,string lastName)
        {
            FristName = frisName;
            LastName = lastName;
        }
        public string FristName { get; set; }
        public string LastName { get; set; }
    }

深拷贝实现

相对于浅拷贝,是指依照源对象为原型,创建一个新对象,将当前对象的所有字段进行执行逐位复制并支持递归,不管是是值类型还是引用类型,不管是静态字段还是非静态字段。

在C#中,我们们有三种方法实现深拷贝

实现ICloneable接口,自定义拷贝功能。

ICloneable 接口,支持克隆,即用与现有实例相同的值创建类的新实例。

ICloneable 接口包含一个成员 Clone,它用于支持除 MemberwiseClone 所提供的克隆之外的克隆。Clone 既可作为深层副本实现,也可作为浅表副本实现。在深层副本中,所有的对象都是重复的;而在浅表副本中,只有顶级对象是重复的,并且顶级以下的对象包含引用。 结果克隆必须与原始实例具有相同的类型或是原始实例的兼容类型。

上一页  1 2 3 4  下一页

Tags:Tips 拷贝 拷贝

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接