.Net-動的呼び出し方法
一、InvokeMemberを使用する
考え方:タイプのtypeのオブジェクトでInvokeMemberメソッドを呼び出し、メソッドを呼び出すオブジェクトを渡し、BindingFlagsをInvokeMethodと指定します.メソッドに基づいて署名するには、パラメータを渡す必要がある場合があります.
例(通常のメソッドと静的メソッドの呼び出し):
二、MethodInfoを使用する.Invoke
使用方法:typeオブジェクトのgetMethodメソッドを使用して、呼び出したいメソッドオブジェクト、すなわちMethodinfoオブジェクトを取得し、そのオブジェクトにInvokeメソッドを呼び出します.メソッドに基づいて署名するには、パラメータを渡す必要がある場合があります.
実は时々方法名によって方法を呼び出すのはやはりとても便利で、反射のもたらす性能の问题は测ったことがなくて、すべて性能がよくないと言って、しかしいったいどれだけ大きい影响があって、解釈を求めますか?
考え方:タイプのtypeのオブジェクトでInvokeMemberメソッドを呼び出し、メソッドを呼び出すオブジェクトを渡し、BindingFlagsをInvokeMethodと指定します.メソッドに基づいて署名するには、パラメータを渡す必要がある場合があります.
例(通常のメソッドと静的メソッドの呼び出し):
#region —— InvokeMember
//Type t = typeof(Calculator);
//Calculator c = new Calculator(1, 2);
//int result = (int)t.InvokeMember("Add", BindingFlags.InvokeMethod, null, c, null);
//Console.WriteLine(result);
#endregion
#region —— InvokeMember
//object[] paramas = { 6, 9 };
//Type t = typeof(Calculator);
//t.InvokeMember("Add", BindingFlags.InvokeMethod, null, t, paramas);// , 。 object
#endregion
二、MethodInfoを使用する.Invoke
使用方法:typeオブジェクトのgetMethodメソッドを使用して、呼び出したいメソッドオブジェクト、すなわちMethodinfoオブジェクトを取得し、そのオブジェクトにInvokeメソッドを呼び出します.メソッドに基づいて署名するには、パラメータを渡す必要がある場合があります.
#region —— MethodInfo.Invoke
Type t = typeof(Calculator);
Calculator c = new Calculator(3, 4);
MethodInfo mi = t.GetMethod("Add", BindingFlags.Instance | BindingFlags.Public);
mi.Invoke(c, null);
#endregion
実は时々方法名によって方法を呼び出すのはやはりとても便利で、反射のもたらす性能の问题は测ったことがなくて、すべて性能がよくないと言って、しかしいったいどれだけ大きい影响があって、解釈を求めますか?