1. 主页
  2. 文档
  3. C#进阶
  4. 第三章 反射
  5. 第六节 通过反射调用方法

第六节 通过反射调用方法

static void Main(string[] args)
{
   Console.WriteLine("---------------------- 通过反射调用方法-------------------");
   Assembly assembly = Assembly.LoadFrom("DB.MySqlClass.dll"); //加载方式三,完全限定名
   Type type = assembly.GetType("DB.MySqlClass.ReflectionTest");//命名空间+类名+`3表示3个参数
    object oReflection = Activator.CreateInstance(type);
    //foreach (var method in type.GetMethods())
    //{
     //    Console.WriteLine(method.Name);
     //    foreach (var parameter in method.GetParameters())
     //    {
     //        Console.WriteLine(parameter.Name+" "+parameter.ParameterType);
     //    }
     //}
     {
           MethodInfo methodInfo = type.GetMethod("Test3", new Type[] { typeof(int) });
           methodInfo.Invoke(oReflection, new object[] { 123 });  //调用重载方法
      }

      {
            MethodInfo methodInfo = type.GetMethod("Test2");
            methodInfo.Invoke(oReflection, null);  //调用方法
       }
       {
           MethodInfo methodInfo = type.GetMethod("Test3", new Type[] { typeof(string) });
           methodInfo.Invoke(oReflection, new object[] { "world" });   //调用重载方法
        }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DB.MySqlClass
{
    public class ReflectionTest
    {
        public ReflectionTest()
        {
            Console.WriteLine($"这是{this.GetType()}无参构造函数");
        }
        public ReflectionTest(string name)
        {
            Console.WriteLine($"这是{this.GetType()}有参构造函数{name.GetType()}");
        }
        public ReflectionTest(int id)
        {
            Console.WriteLine($"这是{this.GetType()}有参构造函数{id.GetType()}");
        }
        public ReflectionTest(int id ,string name)
        {
            Console.WriteLine($"这是{this.GetType()}有两个参数构造函数,类型为{id.GetType()}和{name.GetType()}");
        }
        private void Test(string name)
        {
            Console.WriteLine($"这是{0}的Test私有方法{this.GetType()}");
        }
        public static void Test1(string name)
        {
            Console.WriteLine($"这是{0}的Test1静态方法",typeof(ReflectionTest));
        }
        public static void Test3(int id )
        {
            Console.WriteLine($"这是{0}的Test3重载方法", typeof(ReflectionTest));
        }
        public static void Test3(string name)
        {
            Console.WriteLine($"这是{0}的Test3重载方法", typeof(ReflectionTest));
        }
        public  void Test2()
        {
            Console.WriteLine($"这是{0}的Test2方法", this.GetType());
        }
    }
这篇文章对您有用吗?

我们要如何帮助您?