2016-08-20 6 views
0

たとえばNetworkStreamクラスを考えてみましょう。Stream.Read(byte [] buffer、int offset、int count)は出力パラメータなしでどのように動作しますか?

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

はどのようNetworkStream.Readは、出力パラメータのいくつかの種類を使用せずにC変数にデータを入れていますか?

署名は次のようになります。

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 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とは異なり:

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)); 
} 

アウトとrefに動作していることは、ここではそれが起こっている例があり、実際に渡された変数を変更するために使用されています変数newArrに保持されている値をNewArrayWithAメソッドで変数に代入すると、メソッドが呼び出されたときに渡された参照によって配列が変更されます

関連する問題