A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

1:首先新建一个类库,编译生成dll文件;
  1. namespace Assem
  2. {
  3.     public class Asm
  4.     {
  5.         public int Fun1(int num1, int num2)
  6.         {
  7.             return num1 + num2;
  8.         }

  9.         private void Fun()
  10.         {
  11.             Console.WriteLine("No Params Function");
  12.         }
  13.     }
  14. }
复制代码

2:把编译生成的dll文件 Copy到 反射目录下的bin目录下
  1.         static void Main(string[] args)
  2.         {
  3.             /*
  4.              * //读取程序集
  5.                         -> 使用Assembly.LoadFrom(文件名)获得程序集对象
  6.                         //读取对象
  7.                         -> 使用GetTypes()获得所有的类型信息(Type对象)
  8.                         //创建对象
  9.                         -> Activator.CreateInstance(Type类型的数据)创建指定类型的对象(object)
  10.                         //获取方法
  11.                         -> 如果需要调用方法,使用 <type>.GetMethod(方法名)获得MethodInfo类型对象
  12.              *  //调用方法
  13.                         -> 调用 方法对象.Invoke(实例, 参数);
  14.              */

  15.             //读取程序集
  16.             Assembly asm = Assembly.LoadFrom("Assem.dll");
  17.             //读取对象
  18.             Type t = asm.GetType("Assem.Asm");
  19.             //创建对象
  20.             object o = Activator.CreateInstance(t);
  21.             //获取无参数方法
  22.             MethodInfo m = t.GetMethod("Fun", BindingFlags.NonPublic | BindingFlags.Instance);
  23.             //调用无参数方法
  24.             object res = m.Invoke(o, null);
  25.             Console.WriteLine("Fun:"+res);

  26.             //获取方法 带参数方法
  27.             MethodInfo m1=t.GetMethod("Fun1",new Type[]{typeof(int),typeof(int)});
  28.             //调用带参数方法
  29.             object res1 = m1.Invoke(o, new object[] { 100, 200 });
  30.             Console.WriteLine("Fun1:"+res1);
  31.             Console.ReadKey();

  32.         }
复制代码

评分

参与人数 1技术分 +1 收起 理由
陈君 + 1

查看全部评分

2 个回复

倒序浏览
不太看得明白喔
回复 使用道具 举报
总结的不错
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马