反射使い方:
/// <まとめ> ///静的メソッドを呼び出す /// </要約> AKF /// <PARAM NAME = "T">クラスのフルネーム</ PARAM> /// <paramNameに= "strMethod">メソッド名</ PARAM> /// <paramNameに= "aobjParams">パラメータ</ PARAM> /// <戻る>関数の戻り値</戻り> パブリック静的オブジェクトRunStaticMethod(System.TypeをT、strMethodのString [] aobjParamsオブジェクト) { のBindingFlags EFLAGS = BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic; runMethodのようになり(T、strMethod、戻り ヌル、aobjParams、EFLAGS)を; } /// <まとめ> メソッド呼び出し///の例 /// </要約> /// <PARAM NAME = "T">类全名</ PARAM> /// <paramNameに= "strMethod">方法名</ PARAM> /// <paramNameに= "objInstance">类的实例</ PARAM > /// <paramNameに= "aobjParams">参数表</ PARAM> /// <戻る>函数返回值</戻り> パブリック静的オブジェクトRunInstanceMethod(のSystem.Typeさt、ストリングstrMethod、 objInstanceオブジェクト、[] aobjParamsオブジェクト) { のBindingFlags EFLAGS = BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic; runMethodのようになり(T、strMethod、戻り objInstance、aobjParams、EFLAGS)を、 strMethodは、objInstance、オブジェクト[] aobjParams、のBindingFlags EFLAGS)オブジェクト { METHODINFO mを、 試す { M = t.GetMethod(strMethod、EFLAGS)。 (M == NULL)の場合 、{ 新しいArgumentExceptionがをスロー( '+ "方法はありません" strMethod + '+ t.ToString()+ "'タイプで、" "'。"); } オブジェクトobjRet = m.Invoke(objInstance、aobjParams)。 objRetを返します。 } キャッチ { 投げます。
試験例時:
ウィンドウをForm1に2つの方法がある場合は、それぞれ、静的メソッドとプライベートインスタンスは、次のように:
プライベート静的ストリングStaticMethod(ストリングS、I INT) { 戻りS + iは、 } プライベートストリングInstanceMethod(ストリングS、I INT) { 戻りS + iは、 }
テストコードを呼び出すことができます。
【のtestMethod】
公共ボイドTestInstanceMethod()
{
Form1 F =新しいForm1の();
//f.msg(f);
//f.button1_Click(null、NULL);
文字列RET = "" + RunInstanceMethod(typeof演算(Form1に)、 "InstanceMethod"、F、新しいオブジェクト[] { "123"、123})。
Assert.AreEqual(RET、 "123123");
}
【のtestMethod】
公共ボイドTestStaticMethod()
{
文字列RET = "" + RunStaticMethod(typeof演算(Form1に)、 "StaticMethod"、新しいオブジェクト[] { "123"、123})。
Assert.AreEqual(RET、 "123123");
}