黑马程序员技术交流社区

标题: 反射---从文件中读取程序集中的成员并使用它 [打印本页]

作者: u010209195    时间: 2014-8-1 11:44
标题: 反射---从文件中读取程序集中的成员并使用它
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.         }
复制代码

作者: huangxuanheng    时间: 2014-8-1 13:36
不太看得明白喔
作者: 陈君    时间: 2014-8-3 18:02
总结的不错




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2