偶然看到 Array.Copy 方法的时候,想到,它是否是克隆,又是否是深克隆。

做了一个测试

        public class abc    {        public string hello;    } 

   [TestMethod]
public void TestArrayCopy()
{
abc a = new abc();
a.hello = "hello "; var r = new abc[];
Array.Copy(new abc[] { a }, r, ); var b = r[];
b.hello = "world"; Console.WriteLine(a.hello + "," + b.hello);
}

输出: world,world . 看来是它不是克隆。

仔细想想也应该不是克隆。如果是克隆,那克隆就可以用这个方法逆天了。更谈的不上深克隆。

很好奇,看了一下 Reflector . 实现方法着实看不懂。

[MethodImpl(MethodImplOptions.InternalCall), ReliabilityContract(Consistency.MayCorruptInstance, Cer.MayFail), SecurityCritical]
internal static extern void Copy(Array sourceArray, int sourceIndex, Array destinationArray, int destinationIndex, int length, bool reliable);

是一个 internal  的,这个见多了,还是一个 extern 的!要命的是属性声明,看了MSDN也不懂。到底在哪实现这玩意。有待研究。

PS. Array 继承自  ICloneable , 是可以浅克隆的,但仅克隆Array本身,对里面的内容是不克隆的。

Array.Copy 数据是克隆吗?的更多相关文章

  1. C#把某个数组的一部分复制到另一个数组中的两种方法:Buffer.BlockCopy和Array.Copy

    static void Main(string[] args) { , , , , , }; ;//目标数组大小 int int_size = sizeof(int);//用于获取值类型的字节大小. ...

  2. Array.Copy

    var bt = new byte[] { 0x03, 0x00, 0x01, 0xD9, 0x23 }; var result = new byte[] { 0x01, 0x00, 0x03, 0x ...

  3. Swift Array copy 的线程安全问题

    Swift Array copy 的线程安全问题 NSArray 继承自 NSObject,属于对象,有 copy 方法.Swift 的 Array 是 struct,没有 copy 方法.把一个 A ...

  4. C# 字节数组拼接的速度实验(Array.copy(),Buffer.BlockCopy(),Contact())

    无聊做了如题的一个算法的优劣性能比较,由于很多人都只关心结果,那么我先贴出结果如下: 由于我的测试数据量比较小,只能得出Array.Copy()和Buffer.BlockCopy()方法性能要好于Co ...

  5. Array.Copy vs Buffer.BlockCopy

    http://stackoverflow.com/questions/1389821/array-copy-vs-buffer-blockcopy Since the parameters to Bu ...

  6. 【python】numpy array特殊数据统一处理

    array中的某些数据坏掉,想要统一处理,找到了这个方法,做个笔记. 比如,把数组中所有小于0的数字置为0 import numpy as np t = np.array([-2, -1, 0, 1, ...

  7. 从已删除邮箱copy数据到活动邮箱

    Start Windows PowerShell Start > search for "PowerShell" > Start Windows PowerShell ...

  8. array copy rotate in Pointwise

    goal: # # Copyright 2010 (c) Pointwise, Inc. # All rights reserved. # # This sample Pointwise script ...

  9. window下如何通过ssh从服务端copy数据文件

    通过cygwin在WINDOWS系统上安装SSH服务 并使用scp命令进行上传和下载文件.按照步骤参考如下 https://jingyan.baidu.com/article/08b6a591a504 ...

随机推荐

  1. c++getline()、get()等

    1.cin 接受一个字符串,遇“空格”.“TAB”.“回车”都结束 2.cin.get() cin.get(字符变量名)可以用来接收字符 只能接收一个字符 cin.get(字符数组名,接收字符数目)用 ...

  2. 清除浮动元素的margin-top失效原因(更改之前的错误)

    //样式代码body,div{ margin:; padding:; } .box1{ background:#900; width:200px; height:200px; margin:20px ...

  3. Mybatis联合查询记录,左连接参数操作

    公司业务需求要做个列表的排序 而实际排序的字段不再本库中,需要跨库去拿到字段,因为是微服务体系架构,不可能Left join跨库的表,所以决定调用一次跨服务的API拿到排序相关的对象,里面包含需要排序 ...

  4. SpringBoot与mongodb的结合

    本文系列文章: ​ 使用Shell 操作 MongoDB的技巧 ​ MongoTemplate的使用技巧及其注意事项 敬请期待. 前言 最近公司想要做一个用户行为数据的收集,最开始想用mysql来存储 ...

  5. ruby的循环控制命令loop等

    ruby的循环有以下几种: times方法 for while until(与while相反) each(与for极度相似,在ruby内部,for语句是用each实现的) loop(无限循环,与bre ...

  6. SEO优化上首页之搜索引擎用户需求理解

    经过前面<搜索引擎原理SEO优化上首页之网络蜘蛛Spider>和<搜索引擎原理SEO优化上首页之内容处理与创建索引>介绍,搜索引擎已经完成页面抓取和分析,并把原始页面.索引等信 ...

  7. SSM整合思路

    引自网友: https://zhuanlan.zhihu.com/p/23917781

  8. UWP Read write File -StorageFile

    // private void MainPage_Loaded(object sender, RoutedEventArgs e) { GetFileAsync(); } public async v ...

  9. 20155236范晨歌_MSF基础应用

    20155236范晨歌_MSF基础应用 20155236范晨歌_MSF基础应用 目录 概述 MS08-067漏洞攻击 MS11-050漏洞攻击 MS10-087漏洞攻击 辅助模块 概述 MSF的六种模 ...

  10. cnn 滤波

    http://blog.csdn.net/zouxy09/article/details/49080029