メソッドの引数にout
/ref
修飾子、ByRef
修飾子が設定されている場合、引数は参照渡しとなり、メソッドは引数の値を別の値に置き換えることができます。 MethodInfo.Invokeメソッドを使ってメソッドを呼び出す場合、参照渡しによって置き換えられた値は引数parametersに渡した配列に格納されます。
MethodInfoでのメソッド呼び出しで参照渡しの引数を参照する
Imports System
Imports System.Reflection
Class C
Public Sub M(ByVal x As Integer, ByRef y As Integer)
Console.WriteLine("x = {0}", x)
Console.WriteLine("y = {0}", y)
x = 3 ' 値渡し引数の値を変更する (呼び出し元には反映されない)
y = 3 ' 参照渡し引数の値を変更する (呼び出し元に反映される)
End Sub
End Class
Class Sample
Shared Sub Main()
Dim t As Type = GetType(C)
Dim inst As Object = Activator.CreateInstance(t)
Dim m As MethodInfo = t.GetMethod("M")
' メソッド呼び出しに使用する引数の配列
Dim args() As Object = New Object(1) {42, 42}
' メソッドを呼び出す(参照渡しとなる引数では、配列内の値が置き換えられる)
m.Invoke(inst, args)
' 置き換えられた値を参照する
Console.WriteLine(args(0))
Console.WriteLine(args(1))
End Sub
End Class
実行結果
x = 42 y = 42 42 3