C# の参照渡し
C#の参照渡しには、引数にref
修飾子もしくはout
修飾子を使います。
ref
C# で参照渡しを行うには、ref
修飾子を使います。ref
修飾子を付けて引数を渡すことで、値ではなく変数の参照が渡ります。
ref
修飾子はメソッドの定義と呼び出し元の双方で明示的にref
を指定する必要があります。
例えば、引数の値をインクリメントするようなメソッドを考えます。
using System;
public class Program
{
public static void Main(string[] args)
{
int x = 0;
Func_Ref(ref x); // 呼び出し時でもrefを付ける
Console.WriteLine(x); // 1
}
public static void Func_Ref(ref int x)
{
x++;
}
}
out
C# での参照渡しには、out
修飾子も使えます。
out
修飾子の引数はメソッド内部から外に値を渡すというイメージで使います。したがってメソッド内部で必ず値を割り当てる必要があります。値が未割当のままコンパイルしようとするとエラーになります。
TryParseの例
out
修飾子を使うメソッドでよく使うものに、TryParse
メソッドがあります。戻り値でキャストの成否をBool値で返し、参照で渡した変数にキャストした値を入れてくれます。
DateTime d;
DateTime.TryParse("2017/1/1", out d);
TryParseメソッド内部でキャストした結果を外に返すのでout
修飾子が使われています。
実装例
out
修飾子を使うメソッドは、ref
と違って値をそのまま使うことはできません。必ず値を割り当てる必要があります。コンパイルエラーになるのですぐに気が付きます。
public static void Func_Out(out int x)
{
// xに値を割り当てていないのでコンパイルエラー
// x++;
// メソッド内部で値を割り当てなければならない
x = 100;
}
参考URL
- ref (C# リファレンス).aspx)
- out パラメーター修飾子 (C# リファレンス).aspx)
コメントを書く