2017-04-24 80 views
-1
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的其餘部分。

回答

6

不,它將引用的副本返回給數組,在這種情況下分配的內存(在本例中爲堆)不會以任何方式複製。

+0

另請參閱:https://msdn.microsoft.com/en-us/library/t63sy5hs.aspx – JamesFaix

+0

@Tigran你很想說「指針」。 :-) –