C# 通过反射调用类方法

需要使用反射调用的类定义如下:

    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();
        }

测试结果:

 

posted @ 2020-11-14 17:05  温故纳新  阅读(1324)  评论(0编辑  收藏  举报