关于c#:C-通过反射的方式调用方法

39次阅读

共计 607 个字符,预计需要花费 2 分钟才能阅读完成。

using System;
using System.Reflection;
using System.IO;

// 读取 .dll 文件
byte[] fileData = File.ReadAllBytes("D:\\file.dll");
Assembly assembly1 = Assembly.Load(fileData);

// 获取 Type
Type type1 = assembly1.GetType("namespace.type");

// 获取办法
MethodInfo method = type1.GetMethod("method");

// 创立一个实例
object activator = Activator.CreateInstance(type1);

// 执行办法并获取返回后果
object result = method.Invoke(activator, null);

载入程序集是通过读取为字节数组的形式,这样能够防止 Assembly.LoadFile 办法造成的 .dll 文件被占用问题,这里须要应用绝对路径;获取 Type 时须要在后面加上命名空间,获取办法只需提供办法名称即可;对于静态方法的调用能够不用应用 Activator 类创立实例,所以 Invoke 办法的第一个参数能够为 null,Invoke 办法的第二个参数是 object[] 类型,示意传递给该办法的参数汇合,办法被调用后返回的后果是以 object 类型保留的,在理论状况下当然还须要一个转换操作。

正文完
 0