将返回一个数组的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的其余部分。

不,它将引用的副本返回给数组,在这种情况下分配的内存(在本例中为堆)不会以任何方式复制。

+0

另请参阅:https://msdn.microsoft.com/en-us/library/t63sy5hs.aspx – JamesFaix

+0

@Tigran你很想说“指针”。 :-) –