値型のパラメーターの引き渡し (C# プログラミング ガイド)
参照型の変数はデータへの参照を持つのに対し、値型の変数はデータを直接格納します。 値をメソッドに値型の変数を渡すとメソッドに変数のコピーを渡すことを意味します。 引数の変数でメソッド内に存在しない格納されている元のデータには影響しませんパラメーターに変更します。 呼び出されたメソッドのパラメーターの値を変更する場合 ref または アウト のキーワードを使用してパラメーターを参照で渡す必要があります。 説明を簡単にするために、次の例では ref だけを使用しています。
値による値型の引き渡し
値によって値型を渡す方法を次の例で示します。 変数 n は、SquareIt メソッドに値で渡されます。 メソッド内で変更があっても、元の変数値には影響しません。
class PassingValByVal
{
static void SquareIt(int x)
// The parameter x is passed by value.
// Changes to x will not affect the original value of x.
{
x *= x;
System.Console.WriteLine("The value inside the method: {0}", x);
}
static void Main()
{
int n = 5;
System.Console.WriteLine("The value before calling the method: {0}", n);
SquareIt(n); // Passing the variable by value.
System.Console.WriteLine("The value after calling the method: {0}", n);
// Keep the console window open in debug mode.
System.Console.WriteLine("Press any key to exit.");
System.Console.ReadKey();
}
}
/* Output:
The value before calling the method: 5
The value inside the method: 25
The value after calling the method: 5
*/
可変 n は値型です。 これはデータ 5 値が含まれます。 SquareIt が呼び出されると、n の内容がパラメーター x にコピーされ、値はメソッド内で 2 乗されます。 ただしMain では n の値は前に SquareIt のメソッドを呼び出すと同じです。 メソッド内での変更はローカル変数 x にのみ影響します。
参照による値型の引き渡し
次の例は前の例と同じですが引数は ref のパラメーターとして渡されます。 基になる n引数の値はx がメソッドで変更されても変更されます。
class PassingValByRef
{
static void SquareIt(ref int x)
// The parameter x is passed by reference.
// Changes to x will affect the original value of x.
{
x *= x;
System.Console.WriteLine("The value inside the method: {0}", x);
}
static void Main()
{
int n = 5;
System.Console.WriteLine("The value before calling the method: {0}", n);
SquareIt(ref n); // Passing the variable by reference.
System.Console.WriteLine("The value after calling the method: {0}", n);
// Keep the console window open in debug mode.
System.Console.WriteLine("Press any key to exit.");
System.Console.ReadKey();
}
}
/* Output:
The value before calling the method: 5
The value inside the method: 25
The value after calling the method: 25
*/
この例では、n の値ではなく、n への参照が渡されています。 パラメーター x は int ではなく、int への参照 (例では、n への参照) です。 したがってx がメソッド内で 2 乗の場合何が 2 乗されます n は x に示されています。
値型の交換
引数の値を変更する一般的な例はメソッドを 2 回変数を渡すメソッドはコンテンツを交換しますのメソッドです。 参照をスワップのメソッドに引数を渡す必要があります。 はメソッド内のパラメーターのローカル コピーを入れ替え変更は呼び出し元のメソッドに発生しません。 次の例では整数値を交換します。
static void SwapByRef(ref int x, ref int y)
{
int temp = x;
x = y;
y = temp;
}
SwapByRef のメソッドを呼び出すと次の例に示すように呼び出しで ref のキーワードを使用します。
static void Main()
{
int i = 2, j = 3;
System.Console.WriteLine("i = {0} j = {1}" , i, j);
SwapByRef (ref i, ref j);
System.Console.WriteLine("i = {0} j = {1}" , i, j);
// Keep the console window open in debug mode.
System.Console.WriteLine("Press any key to exit.");
System.Console.ReadKey();
}
/* Output:
i = 2 j = 3
i = 3 j = 2
*/
参照
関連項目
参照型のパラメーターの引き渡し (C# プログラミング ガイド)