2016-08-20 14 views
0

我們以NetworkStream類爲例。Stream.Read(byte [] buffer,int offset,int count)如何在沒有輸出參數的情況下工作?

... 
byte[] c = new byte[1]; 
networkstream1.Read(c,0,1); 

如何NetworkStream.Read將數據放入變量Ç沒有使用某種輸出參數?

簽名應該是:

Stream.Read(out byte[] buffer, int offset, int count); 

必須使用指針?

如果有人能在這樣做的(潛在的)力學闡述,謝謝:)

+0

見標記的重複和所有其他類似的參考文獻,包括Q&A上堆棧溢出。 'buffer'參數是一個數組,它是一個引用類型。因此,傳遞該值將傳遞對該對象的引用。因此,無論是在調用方法還是其他地方,對該對象的更改對於具有相同引用的任何其他代碼都是可見的。另見https://stackoverflow.com/questions/1696938/c-sharp-objects-by-ref –

回答

0

你傳遞給將要通過該方法填補了數組的引用,這裏是展示如何爲例這是工作

public static void FillArrayWithA(char[] arr) 
{ 
    for(var i = 0;i<arr.Length;i++) 
    { 
     arr[i]='A'; 
    } 
} 


public static void Main(string[] args) 
{ 
    var newArr = new char[10]; 
    FillArrayWithA(newArr); 
    Console.WriteLine(new string(newArr)); 
} 

out和ref用來修改實際傳遞的變量,這裏是一個例子,其中正在發生:

public static void NewArrayWithA(out char[] arr) 
{ 
    arr = new char[10]; 
    for(var i = 0;i<arr.Length;i++) 
    { 
     arr[i]='A'; 
    } 
} 


public static void Main(string[] args) 
{ 
    char[] newArr; 
    FillArrayWithA(out newArr); 
    Console.WriteLine(new string(newArr)); 
} 

不像第一EXA mple在可變newArr保持的值正在由NewArrayWithA方法分配一個變量,所述FillArrayWithA方法只是修改通過當該方法被稱爲經過參考陣列

相關問題