需要使用反射调用的类定义如下:
class InvokeTest { #region 静态方法 public static void StaticMethod(string para) { Console.WriteLine(para); } #endregion #region 实例方法 public void InstanceMethod(string para1,string para2) { Console.WriteLine(para1 + " " + para2); } #endregion }
使用Invoke调用方法如下:
public static void InvokeMethod<T>() where T:new () { /* * 对于静态方法 */ // 第一步,使用反射获取类的方法 var staticMethod = typeof(T).GetMethod("StaticMethod"); // 第二步,使用Invoke方法调用方法 staticMethod.Invoke(typeof(T), new object[] { "参数" }); /* * 对于实例方法 */ // 第一步,先构造实例 var instanceObj = new T(); // 第二步,使用Invoke方法调用类方法
instanceObj.GetType().GetMethod("InstanceMethod").Invoke(instanceObj, new object[] { "参数1", "参数2" });
//instanceObj.GetType().InvokeMember("InstanceMethod", System.Reflection.BindingFlags.InvokeMethod, null, instanceObj, new object[] { "参数1", "参数2" }); }
测试代码如下:
static void Main(string[] args) { InvokeMethod<InvokeTest>(); Console.ReadLine(); }
测试结果: