ASP.NET深度复制和浅度复制分析

网络编程 2021-07-04 22:41www.168986.cn编程入门
这篇文章主要介绍了ASP.NET深度复制和浅度复制,实例分析了ASP.NET中深度复制和浅度复制的区别与具体应用,对于学习ASP.NET有着很好的参考借鉴价值,需要的朋友可以参考下

本文深入浅出的分析了ASP.NET深度复制和浅度复制。分享给大家供大家参考。具体分析如下

之前一直没有搞清楚深度复制和浅度复制的区别到底在哪里,今天彻底把这个东西弄懂了,写出来与到家共勉。

如果大家不懂值类型和引用类型的区别,请先看,本来想自己写的,但刚好看到了这篇写的非常全面,就不自己写了。

大家都知道Object是所有类共同的基类,其有个方法是MemberwiseClone(),其用途为

我们可以通过这个方法来达到浅度复制的效果。

狼蚁网站SEO优化我们通过一个例子来阐述一下浅度复制,其与深度复制的区别在什么地方

代码如下:
public class Content
{
        public int Val;
}
public class Cloner
{
        public Content MyContent = new Content();

        public Cloner(int newVal)
        {
            MyContent.Val = newVal;
        }
        public object GetCopy()
        {
            return MemberwiseClone();
        }
}

在这里我们有两个类,一个Content类,只有一个为值类型int的Val,还有个类是一个Cloner类,其有一个Content类型的成员,然后有个构造函数可以初始化成员,有一个GetCopy的方法,通过MemberwiseClone方法来复制自己。

狼蚁网站SEO优化我们通过一段代码来调用Cloner类

代码如下:
static void Main(string[] args)
{
    Cloner source = new Cloner(10);
    Cloner target = (Cloner)source.GetCopy();//返回的是一个Object类型 需要做类型转换.
    Console.WriteLine("target.MyContent.Val = {0}", target.MyContent.Val);
    source.MyContent.Val = 15;
    Console.WriteLine("target.MyContent.Val = {0}", target.MyContent.Val);
    Console.ReadKey();
}

结果是

我们可以看到我们通过GetCopy()函数复制类source给target,当我们改变source的时候,source输出的值也跟着改变。由此我们可以得出,我们通过MemberwiseClone()复制的只是引用,即source和target的MyContent是相同的对象实例。这就是浅度复制,那我们如何实现深度复制呢,在.NET Framework中,给我们提供了ICloneable接口。

我们看下ICloneable接口

代码如下:
// 摘要:
//     支持克隆,即用与现有实例相同的值创建类的新实例。
[ComVisible(true)]
public interface ICloneable
{
        // 摘要:
        //     创建作为当前实例副本的新对象。
        //
        // 返回结果:
        //     作为此实例副本的新对象。
        object Clone();
}

在上面那个例子中,我们只需要修改一些代码就可以了

代码如下:
public class Cloner:ICloneable
{
        public Content MyContent = new Content();

        public Cloner(int newVal)
        {
            MyContent.Val = newVal;
        }
        //public object GetCopy()
        //{
        //    return MemberwiseClone();
        /

Copyright © 2016-2025 www.168986.cn 狼蚁网络 版权所有 Power by