我最近遇到了一些第三方C#代码,它执行以下操作:
public int RecvByteDataFromPrinter(ref byte[] byteData) { byte[] recvdata = new byte[1024]; ///...fills recvdata array... byteData = recvdata; return SUCCESS; }
byteData = recvdata
在这种情况下," " 线实际上做了什么?
似乎目标是让byteData包含recvdata数组的内容.但是,我的印象是你需要做一个Array.Copy(...)
操作才能实现这一点.
这实际上是在修改byteData引用以指向新分配的数组吗?如果是这样,该阵列是否可以保留?
是的,因为ref - 它确实修改了传递的引用.停在附近?你的意思是 - 没有被破坏?是的,由于新的参考,它不会是GC'd.如果没有更多的引用,旧的数组(传递)可能是GC'd但是在这个赋值后...
Array.Copy实际上会复制元素,然后你不需要"ref",但这会更耗时