は、WinFormsのアプリケーションからこのコードサンプルを考えてみましょう:メソッドの呼び出しが引数の例外で失敗するのはなぜですか?
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
object[] parms = new object[1];
parms[0] = "foo";
DoSomething(parms);
}
public static string DoSomething(object[] parms)
{
Console.WriteLine("Something good happened");
return null;
}
}
期待どおりボタン1をクリックすると、それはそれは、コンソールに「良い起こった何か」を印刷し、動作します。今では、リフレクションを使用してDoSomething
を呼び出すことを除いて同じである。このサンプルコードを検討
:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
object[] parms = new object[1];
parms[0] = "foo";
System.Reflection.MethodInfo mi = typeof(Form1).GetMethod("DoSomething");
mi.Invoke(null, parms);
}
public static string DoSomething(object[] parms)
{
Console.WriteLine("Something good happened");
return null;
}
}
それはラインmi.Invoke(null, parms)
(タイプのオブジェクト上System.ArgumentException
をスロー「は可能System.String」に変換できませんタイプ「System.Objectの[]」。)
PARMSは明らかオブジェクト配列であり、doSomethingののメソッドのシグネチャは、明らかにオブジェクト配列を期待しています。なぜ、最初のオブジェクトを配列から引き出し、代わりにそれを渡そうとするのですか?
それとも私は理解していない何か他のことがありますか?
これは今完璧な理にかなって - もちろんそれはそのように動作します。キーボードから数分歩く時間:-) – GojiraDeMonstah