将返回一个数组的c#函数创建数组的新副本?
问题描述:
class comm
{
public Socket sock;
public byte[] buf;
public int pos;
public comm()
{
buf = new byte[4000];
pos = 0;
}
public byte[] func(int n)
{
byte[] msg;
msg = new byte[4000];
for(int i = 0; i < n; ++i)
{
if(pos >= buf.length)
{
sock.Receive(buf, 0, 4000, 0);
pos = 0;
}
msg[i] = buf[pos++];
}
Array.Resize(ref msg, n);
return msg;
}
}
我想知道这是否会创建一个味精的副本?将返回一个数组的c#函数创建数组的新副本?
这个想法是返回流的n个字节,并保存下一个调用func的其余部分。
答
不,它将引用的副本返回给数组,在这种情况下分配的内存(在本例中为堆)不会以任何方式复制。
另请参阅:https://msdn.microsoft.com/en-us/library/t63sy5hs.aspx – JamesFaix
@Tigran你很想说“指针”。 :-) –