C# Array类的浅复制Clone()与Copy()的区别

1 Array.Clone方法

命名空间:System

程序集:mscorlib

语法:

public Object Clone()

Array的浅表副本仅复制Array的元素,无论他们是引用类型还是值类型,但是不负责这些引用所引用的对象。

新Array中的引用与原始Array的引用指向相同的对象。

例:

int[] intArray1 = {1, 2};

int [] intArray2 = (int [])intArray1.Clone();

这里需要说明的是,需要使用强制类型转换,原因在于Clone()返回的类型为Object

2 Array.Copy方法

命名空间:System

程序集:mscorlib

Copy有几个重载函数:

//从第一个元素开始复制Array中的一系列元素,将它们粘贴到另一Array中(从第一个元素开始)。长度为32位整数

public static void Copy(Array sourceArray, Array destinationArray, int length)

//从第一个元素开始复制Array中的一系列元素,将它们粘贴到另一Array中(从第一个元素开始)。长度为64位整数

public static void Copy(Array sourceArray, Array destinationArray, long length)

//从指定的源索引开始,复制Array中的一系列元素,将它们粘贴到另一Array中(从指定的目标索引开始)。长度和索引指定为32位整数

public static void Copy(Array sourceArray, int sourceIndex,Array destinationArray, int destinationIndex,int length)

//从指定的源索引开始,复制Array中的一系列元素,将它们粘贴到另一Array中(从指定的目标索引开始)。长度和索引指定为64位整数

public static void Copy(Array sourceArray, long sourceIndex,Array destinationArray, long destinationIndex,long length)

例: Array myIntArray=Array.CreateInstance( typeof(System.Int32), 5 );

for ( int i = myIntArray.GetLowerBound(0); i <= myIntArray.GetUpperBound(0); i++ )

{myIntArray.SetValue( i+1, i );}

Array myObjArray = Array.CreateInstance( typeof(System.Object), 5 );

for ( int i = myObjArray.GetLowerBound(0); i <= myObjArray.GetUpperBound(0); i++ )

{myObjArray.SetValue( i+26, i );}

// Copies the first element from the Int32 array to the Object array.

Array.Copy( myIntArray, myIntArray.GetLowerBound(0), myObjArray, myObjArray.GetLowerBound(0), 1 );

// Copies the last two elements from the Object array to the Int32 array.

Array.Copy( myObjArray, myObjArray.GetUpperBound(0) - 1, myIntArray, myIntArray.GetUpperBound(0) - 1, 2 );

区别:

Clone()返回值是Object,Copy返回值为void

Clone()是非静态方法,Copy为静态方法。

Clone()会创建一个新数组,Copy方法必须传递阶数相同且有足够元素的已有数组。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-12 07:43:33

C# Array类的浅复制Clone()与Copy()的区别的相关文章

C# Array类的浅复制Clone()与Copy()的差别

1 Array.Clone方法 命名空间:System 程序集:mscorlib 语法: public Object Clone() Array的浅表副本仅复制Array的元素,不管他们是引用类型还是值类型.可是不负责这些引用所引用的对象. 新Array中的引用与原始Array的引用指向同样的对象. 例: int[] intArray1 = {1, 2}; int [] intArray2 = (int [])intArray1.Clone(); 这里须要说明的是.须要使用强制类型转换,原因在于

DataTable的方法Clone()和Copy()的区别

Clone()-------只是复制表结构,包括所有的架构和约束.简单理解就是复制原表中的字段. Copy()-------复制整个表,包括表结构和表中所有的数据,即原表中的字段和字段值. 实例: DataTable dt = set.Tables[0]; DataTable cloneTable = dt.Clone(); DataTable copyTable = dt.Copy(); 其中dt为原表如下: cloneTable记录行为0的原表结构: 而copyTable则同dt完全一样.

Java的clone():深复制与浅复制

Java中要想自定义类的对象可以被复制,自定义类就必须实现Cloneable中的clone()方法,如下: 1 public class Student implements Cloneable { 2 3 private String name; 4 5 private int age; 6 7 private Professor professor; 8 9 public String getName() { 10 return name; 11 } 12 13 public void se

面向对象之深复制与浅复制

前言: 基于面向对象的思想,大部分的类都可视为“工具”.那么对于工具的使用,我们总是期望能高效而又方便.特别是当我们在重复实现某些功能的时候,那有没有一种能快速复用类的捷径呢? 既然提出来,答案当然是肯定的.“Copy”----复制. 查看Java中的Object这个祖先类我们可以发现,该类含有一个clone()方法,并且返回“Object”类型.不过,方法的前面还有“native”关键字,其表示Object类使用其方法时是编译器内部执行的,对外界不可正常访问. 回到正题,什么样的类才可以进行克

python 深复制与浅复制------copy模块

模块解读: 浅复制: x = copy.copy(y)深复制: x = copy.deepcopy(y)(注:模块特有的异常,copy.Error) 深copy与浅copy的差别主要体现在当有混合对象时,即在一个对象中包含其他子对象,比如在一个字典中的一个value是一个列表,这时:浅copy,没有拷贝子对象,所以原始数据改变,子对象会跟着改变.深copy,包含拷贝对象中对子对象的拷贝,也就是说原始数据改变,子对象不会随之改变. 举个例子:info = { 'name':'webber', 'j

Python学习日记之字典深复制与浅复制

关于字典复制函数dict.copy()实际应用复制问题 # -*- coding:utf-8 -*- ab={'1':'电话','2':'姓名','3':'性别'} test=ab //浅复制 test2=ab.copy() //深复制 def out(t): for n,a in t.items(): print '%s %s'%(n,a) print out(test) out(test2) del ab['1'] out(test) out(test2) 实际使用发现 dict.copy(

clone()方法、深复制和浅复制

clone方法 Java中没有明确提供指针的概念和用法,而实质上没个new语句返回的都是一个指针的引用,只不过在大部分情况下开发人员不需要关心如何去操作这个指针而已. 在实际编程中,经常会遇到从某个已有对象A创建出另一个与A具有相同状态的对象B,并且B的修改不会影响到A的情况,例如Prototype(原型)模式中,就需要clone一个对象实例. 仅仅通过简单的复制操作显然无法达到这个目的,而Java提供了一个简单有效的clone()方法来满足这个需求. Java中所有的类默认都继承自Object

Java中的clone()----深复制,浅复制

这篇文章主要介绍了Java中对象的深复制(深克隆)和浅复制(浅克隆) ,需要的朋友可以参考下 1.浅复制与深复制概念 ⑴浅复制(浅克隆) 被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象.换言之,浅复制仅仅复制所考虑的对象,而不复制它所引用的对象. ⑵深复制(深克隆) 被复制对象的所有变量都含有与原来的对象相同的值,除去那些引用其他对象的变量.那些引用其他对象的变量将指向被复制过的新对象,而不再是原有的那些被引用的对象.换言之,深复制把要复制的对象所引用

clone中的浅复制和深复制

clone:用于两个对象有相同的内容时,进行复制操作. 提示:Java中要想自定义类的对象可以被复制,自定义类就必须实现Cloneable中的clone()方法. 浅复制:另一个对象用clone()方法对已经存在的对象进行复制的时候,会改变被复制对象里面所有的内容,换句话说,浅复制就是对对象的复制出现了一些问题. 深复制:另一个对象对已有的对象进行相同的内容复制的时候,不会改变原对象的内容 什么情况下会出现浅复制呢?用下面的例子进行说明: 学生类: public class Student im