ref と out を使用した配列の受け渡し (C# プログラミング ガイド)のページを読み、配列パラメーターが既に参照型であるのに、なぜ配列パラメーターを ref パラメーターとして定義する必要があるのか疑問に思いました。呼び出し先関数の変更は呼び出し元関数に反映されませんか?
質問する
4912 次
2 に答える
5
配列の内容のみを変更する予定であれば、その通りです。ただし、配列自体を変更する場合は、参照渡しする必要があります。
例えば:
void foo(int[] array)
{
array[0] = 5;
}
void bar(int[] array)
{
array = new int[5];
array[0] = 6;
}
void barWithRef(ref int[] array)
{
array = new int[6];
array[0] = 6;
}
void Main()
{
int[] array = int[5];
array[0] = 1;
// First, lets call the foo() function.
// This does exactly as you would expect... it will
// change the first element to 5.
foo(array);
Console.WriteLine(array[0]); // yields 5
// Now lets call the bar() function.
// This will change the array in bar(), but not here.
bar(array);
Console.WriteLine(array[0]); // yields 1. The array we have here was never changed.
// Finally, lets use the ref keyword.
barWithRef(ref array);
Console.WriteLine(array[0]); // yields 5. And the array's length is now 6.
}
于 2013-10-08T20:00:45.507 に答える