.Net-動的呼び出し方法


一、InvokeMemberを使用する
考え方:タイプの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

実は时々方法名によって方法を呼び出すのはやはりとても便利で、反射のもたらす性能の问题は测ったことがなくて、すべて性能がよくないと言って、しかしいったいどれだけ大きい影响があって、解釈を求めますか?