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方法必须传递阶数同样且有足够元素的已有数组。
C# Array类的浅复制Clone()与Copy()的差别的更多相关文章
- C# Array类的浅复制Clone()与Copy()的区别
1 Array.Clone方法 命名空间:System 程序集:mscorlib 语法: public Object Clone() Array的浅表副本仅复制Array的元素,无论他们是引用类型还是 ...
- 深复制与浅复制&&strong,copy修饰符总结
又是一个老生常谈的话题,可是貌似这个问题,好多ios开发工程师并不能理解透彻,所以简单记录分析一下深复制与浅复制的原理以及strong,copy修饰符的原理和使用. 一.深复制与浅复制 ...
- Java的clone():深复制与浅复制
Java中要想自定义类的对象可以被复制,自定义类就必须实现Cloneable中的clone()方法,如下: public class Student implements Cloneable { pr ...
- C++Array类模板编写笔记
C++Array类模板 函数模板和类模板都属于泛型技术,利用函数模板和类模板来创建一个具有通用功能的函数和类,以支持多种不同的形参,从而进一步简化重载函数的函数体设计. 声明方法:template&l ...
- [Python] dict字典的浅复制与深复制
Python中针对dict字典有两种复制: (1)浅复制:利用 copy() 或者 dict() :复制后对原dict的内部子对象(方括号[]内元素)进行操作时,由浅复制得到的dict会受该操作影响 ...
- python 深复制与浅复制------copy模块
模块解读: 浅复制: x = copy.copy(y)深复制: x = copy.deepcopy(y)(注:模块特有的异常,copy.Error) 深copy与浅copy的差别主要体现在当有混合对象 ...
- Python中的浅复制、深复制
参考 https://docs.python.org/3/library/copy.html?highlight=copy%20copy#copy.copy https://en.wikipedia. ...
- php对象复制、clone、浅复制与深复制实例详解
php对象复制.clone.浅复制与深复制实例详解 一.用clone(克隆)来复制对象$obj1 = new Object();$obj2 = clone $obj1;clone方法会触发对象里定义的 ...
- Java中的浅复制和深复制 Cloneable clone
先看一个简单案例 public class Test { public static void main(String args[]) { Student stu1 = new ...
随机推荐
- NS5S1153 切換器
昨天在研讀 NS5S1153 的 spec, 發現有一個詞 很陌生 DPDT, 原來是 double pole double throw 的縮寫,雙軸雙切, 更詳細的解釋可以看這個博客的另一篇 &qu ...
- IP首部之首部校验和
首先介绍一下1的补码,2的补码:(摘自http://blog.csdn.net/cradmin/article/details/3092559) 过1的补码,2的补码,到网上搜了下找到这个: It i ...
- scala之split()函数用法
split()函数: def split(arg0: String): Array[String] def split(arg0: String, arg1: Int): Array[String] ...
- Algorithm | hash
A basic requirement is that the function should provide a uniform distribution of hash values. A non ...
- SPOJ 20713 DIVCNT2 - Counting Divisors (square)
DIVCNT2 - Counting Divisors (square) #sub-linear #dirichlet-generating-function Let \sigma_0(n)σ0 ...
- Java---Static内存图详解
案例: 输出结果 内存图: 执行流程: java文件通过编译成class文件,class文件通过类加载器加载到方法区中,程序首先会加载核心类库,也就是你的程序想要运行所需要的一些最基本的类.接着程序会 ...
- IIS 7 Access to the path ‘c:\windows\system32\inetsrv\’ is denied
https://randypaulo.wordpress.com/2011/09/13/iis-7-access-to-the-path-cwindowssystem32inetsrv-isdenie ...
- CBIntrospector俗称:内部检查工具
Download View Introspector (CBIntrospector)内部检查工具是IOS和IOS模拟器的小工具集,帮助在调试的UIKit类的用户界面,它尤其有用于动态UI布局创建 ...
- Using Blocks in iOS 4: Designing with Blocks
In the first part of this series, we learned how to declare and call basic Objective-C blocks. The m ...
- Linux内核中等待队列的几种用法
Linux内核里的等待队列机制在做驱动开发时用的非常多,多用来实现阻塞式访问,下面简单总结了等待队列的四种用法,希望对读者有所帮助. 1. 睡眠等待某个条件发生(条件为假时睡眠): 睡眠方式:wait ...