首页 技术 正文
技术 2022年11月17日
0 收藏 977 点赞 3,803 浏览 1232 个字
using System.Reflection;

1.载入Dll

 Assembly asm=Assembly.LoadFile(FullPath);//FullPath 为Dll所在位置的全路径。

2.取得所需要的类的类型

Type t = asm.GetType("namespaceName.className");//命名空间名.类名

3.建立此类型的对象(相当于 new)

object o = Activator.CreateInstance(t); //创建Type t类型的对象

4.取得类中想要执行的方法

MethodInfo me = t.GetMethod("TestFunction");

5.取得此方法所需参数列表

ParameterInfo[] para=me.GetParameters();

6.创建参数类型的对象,并传入参数Array

Type re = asm.GetType("TestDll.ReturnClass");  //我的参数类型是TestDll命名空间下 ReturnClass类
object reo = Activator.CreateInstance(re);
object[] r = { reo };

7.调用函数

Object rr = me.Invoke(o, r);  //如果调用的是非异步函数,此时object rr就是函数的返回值。

8.如果调用的是异步函数

Task task = me.Invoke(o, r) as Task;
await task;
object result = task.GetType().GetProperty("Result").GetValue(task, null); //result就是异步函数的返回值

9.反射常用操作

//取得o实例中propertyName属性的值value
Type t = asm.GetType("TestDll.TestClass");
object o = Activator.CreateInstance(t);
object getproperty = t.GetProperty("propertyName").GetValue(o, null); //方法一
object getproperty1 = o.GetType().GetProperty("propertyName").GetValue(o, null); //方法二//取得枚举类型中的指定元素
Type enumType = asm.GetType("namespaceName.enumName");
foreach(var name in Enum.GetValues(enumType))
{
   if("elementname"==name.ToString())
   {
Convert.ToInt32(name);//转化制定元素为int
   }
}
string[] strname=Enum.GetNames(enumType);//取得枚举所有元素名

10.总结

大概就是,在你不知道Dll的内部结构的情况下,可以通过反射获得Dll内所有信息

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,030
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,520
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,368
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,147
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,781
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,859