1:首先新建一个类库,编译生成dll文件;
- namespace Assem
- {
- public class Asm
- {
- public int Fun1(int num1, int num2)
- {
- return num1 + num2;
- }
- private void Fun()
- {
- Console.WriteLine("No Params Function");
- }
- }
- }
复制代码
2:把编译生成的dll文件 Copy到 反射目录下的bin目录下
- static void Main(string[] args)
- {
- /*
- * //读取程序集
- -> 使用Assembly.LoadFrom(文件名)获得程序集对象
- //读取对象
- -> 使用GetTypes()获得所有的类型信息(Type对象)
- //创建对象
- -> Activator.CreateInstance(Type类型的数据)创建指定类型的对象(object)
- //获取方法
- -> 如果需要调用方法,使用 <type>.GetMethod(方法名)获得MethodInfo类型对象
- * //调用方法
- -> 调用 方法对象.Invoke(实例, 参数);
- */
- //读取程序集
- Assembly asm = Assembly.LoadFrom("Assem.dll");
- //读取对象
- Type t = asm.GetType("Assem.Asm");
- //创建对象
- object o = Activator.CreateInstance(t);
- //获取无参数方法
- MethodInfo m = t.GetMethod("Fun", BindingFlags.NonPublic | BindingFlags.Instance);
- //调用无参数方法
- object res = m.Invoke(o, null);
- Console.WriteLine("Fun:"+res);
- //获取方法 带参数方法
- MethodInfo m1=t.GetMethod("Fun1",new Type[]{typeof(int),typeof(int)});
- //调用带参数方法
- object res1 = m1.Invoke(o, new object[] { 100, 200 });
- Console.WriteLine("Fun1:"+res1);
- Console.ReadKey();
- }
复制代码 |