メソッドの引数にout
/ref
修飾子、ByRef
修飾子が設定されている場合、引数は参照渡しとなり、メソッドは引数の値を別の値に置き換えることができます。 MethodInfo.Invokeメソッドを使ってメソッドを呼び出す場合、参照渡しによって置き換えられた値は引数parametersに渡した配列に格納されます。
MethodInfoでのメソッド呼び出しで参照渡しの引数を参照する
using System;
using System.Reflection;
class C {
public void M(int x, ref int y)
{
Console.WriteLine("x = {0}", x);
Console.WriteLine("y = {0}", y);
x = 3; // 値渡し引数の値を変更する (呼び出し元には反映されない)
y = 3; // 参照渡し引数の値を変更する (呼び出し元に反映される)
}
}
class Sample {
static void Main()
{
var t = typeof(C);
var inst = Activator.CreateInstance(t);
var m = t.GetMethod("M");
// メソッド呼び出しに使用する引数の配列
var args = new object[2] {42, 42};
// メソッドを呼び出す(参照渡しとなる引数では、配列内の値が置き換えられる)
m.Invoke(inst, args);
// 置き換えられた値を参照する
Console.WriteLine(args[0]);
Console.WriteLine(args[1]);
}
}
実行結果
x = 42 y = 42 42 3