値型のパラメーターの引き渡し (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# プログラミング ガイド)

参照型のパラメーターの引き渡し (C# プログラミング ガイド)

概念

C# プログラミング ガイド