次のコードはエラーなしで実行され、「In some」を出力します。これは、ステートメントが
m[0].Invoke(o, args);
クラスsome
のメンバーである関数をオブジェクトで呼び出し、そのパブリック変数に影響を与えます。しかし、コードの最後の行のコメントを外してコンパイルしようとすると、エラーが発生します。なぜ??foo
o
i
using System;
using System.Reflection;
class foo
{
public int i;
public foo(int ii = 0)
{
i = ii;
}
public void some(int ii)
{
i = ii;
Console.WriteLine("In some ");
}
}
class main
{
static public void Main()
{
foo f = new foo();
object o = new foo();
Type t = typeof(foo);
object[] args = new object[1];
args[0] = 9;
MethodInfo[] m = t.GetMethods();
m[0].Invoke(o, args);
//Console.WriteLine(o.i);
}
}