首页 ┆ 网站地图 ┆ 在线留言 ┆ 游戏资讯 ┆ 资源下载 ┆ 端午节祝福 ┆ 迅雷在线影视 ┆淘宝手机在线充值 ┆淘宝游戏点卡充值 
设为首页
加入收藏
联系我们
高级搜索
您当前的位置: 主页>NET专区>C#语言>什么是c#深拷贝与浅拷贝及其代码示例
什么是c#深拷贝与浅拷贝及其代码示例
来源: 发布时间:2008-04-03 发布人: 浏览: 人次   字体: [ ]  

接下来介绍一下数组的拷贝:
首先数组的直接拷贝也就是复制,不用多说看例子:
  int [] numbers = 2345};

   
int [] numbersCopy = numbers;

numbersCopy[
2= 0;

      Console.Write(numbers[
2]);

           Console.Write(numbersCopy[
2]);
结果就是

0

0

道理很简单,数组的复制也就是引用传递,指向的是同一个地址,这不是我们介绍的重点

接下来

看一下概念

数组是引用类型,所以将一个数组变量赋予另一个数组变量,就会得到两个指向同一数组的变量。而复制数组,会使数组实现ICloneable接口。这个接口定义的Clone()方法会创建数组的浅副本。

如果数组的元素是值类型,就会复制所有的值,如果数组包含引用类型,则不复制元素,而只复制引用,

除了使用Clone()方法之外,还可以使用Array.Copy()方法创建浅副本。但Clone()方法和Copy()方法有一个重要区别:Clone()方法会创建一个新数组,而Copy()方法只是传送了阶数相同、有足够元素空间的已有数组。

提示:

如果需要包含引用类型的数组的深副本,就必须迭代数组,创建新对象。

看一下例子:

 

using System;
using System.Collections.Generic;
using System.Text;

namespace WindowsApplication1
{
    
class Class2
    
{
       
public static void Main()
        
{
            
int[] numbers = 2345 };

            
int[] numbersCopy = new int[5];

            numbers.CopyTo(numbersCopy,
0);

            numbersCopy[
2= 0;

            
int[] numbers1 = 2345 };

            
int[] numbersClone1 = (int[])numbers1.Clone();

            numbersClone1[
2= 0;

            Console.Write(numbers[
2+ "---" + numbersCopy[2]);

            Console.Read();


        }

    }

}

我这里介绍的主要是数组的clone和copyto的用法,两者都不会改变其中的值,与上面我们的复制有很大的区别

因为数组里面是值类型,所以他们不存在引用,而

 

 class class1
    
{
        
public string aa = "aa";
    }

    
class class4
    
{
        
public static void Main()
        
{
           
            class1 aaa 
= new class1();
            class1[] array3 
= new class1[1];
            class1[] array4 
= new class1[1];
            array3[
0= aaa;
            
//Array.Copy(array3, 0, array4, 0,1);
            array3.CopyTo(array4, 0);
            
//array4=(class1[])array3.Clone();
            array3[0].aa = "bb";

            Console.Write(array4[
0].aa);
            Console.Read();
        }

    }
结果是两者都改变了值,最后输出都是bb,那时因为两者都是浅拷贝,区别上面已经介绍了,所以  

都没有实现深拷贝,以上如果分析有错误请大家指出,这只是我这么认为!


共2页: 上一页 [1] 2 下一页
相 关 文 章   发布商链接
·c#访问修饰符介绍及其应用实例
·C#如何获取文件路径中的文件名?
·c#子线程控制进度条的一个简单例子
·什么是泛型编程思想?及其简单的应用...
·如何使用C#获取IIS服务器版本?
·如何在c#中去掉字符串中的回车符?
·C#如何从文本文件读取信息并使用Arra...
·什么是泛型?泛型的一些概述
·C#对timer类的使用操作代码
·如何在c#中获取事件注册的方法
 §最新评论:(评论内容只代表网友观点,与本站立场无关!)
网名: 验证码:  【所有评论】【↑返回顶部
评 分: 12 345
评论内容:(不能超过500字,请自觉遵守互联网相关政策法规。[按 Ctrl+Enter 可直接提交]
注意:请勿在本站发布政治话题、色情及违反法律的内容。
IT知道网 声明:刊登此文章是为了传递更多信息,文章内容仅供参考,转载请注明出处。
推 荐 文 章
·最为经典的C#操作文件的方法...
·有助快速理解C#委托和事件之...
·C#泛型学习笔记总结
·c#语言从dbf数据库提取数据并
·C#编写控制线程的运行和线程...
·怎样在C#中删除只读文件及其...
·C#函数中返回多个值的两种方...
·如何在C#中插入照片到Excel文
·如何在c#中获取事件注册的方...
·C#对timer类的使用操作代码
·什么是泛型?泛型的一些概述
·C#如何从文本文件读取信息并...
·如何在c#中去掉字符串中的回...
·如何使用C#获取IIS服务器版本...
·什么是泛型编程思想?及其简...
热 门 文 章
·C#如何获取文件路径中的文件...
·c#中收发邮件处理代码(POP3,...
·浅谈接口和抽象类的区别,加...
·C#语言实现创建、删除和移动...
·C#中关于四舍五入函数的讨论...
·c#中的ArrayList属性祥解及其...
·快速进行List排序的通用方法...
·C#对timer类的使用操作代码
·C#如何从文本文件读取信息并...
·C#语言实现从XML文件导出数据...
·用C#编写ActiveX控件代码实例
·如何在c#中去掉字符串中的回...
·String.Split 方法使用及其代...
·C#语言绘制实时曲线图代码实...
·c#子线程控制进度条的一个简...
网站首页 - 关于本站 - 加入收藏 - 网站地图 - 友情连接 - 在线留言 - 联系我们 - 返回顶部
Copyright © 2007 IT知道网.[冀ICP备07026896号]. All Rights Reserved .