可以反编译DLL文件
1. 使用步骤
找到dll文件,反射出dll文件中的。
主流的框架中基本上都有反射。例如:MVC 、IOC,AOP,ORM等
1.1. 反射是什么?
reflection: 是.netframworker 提供的一个帮助类库,可以读取 并使用metadata。可以动态运行dll库。
注意反射和反编译并不一样。 反射是根据metadata创建对象,反编译是根据dll获得源代码。
2. 使用反射
2.1. 基本用法
private void button1_Click(object sender, EventArgs e)
{
//针对一个不知道的dll进行映射
Assembly x = Assembly.Load("ChineseSplitter");
//下面对一个dll进行方法遍历
foreach (var item in x.GetModules())
{
Console.WriteLine("-------这是一个模块----------------------------\n");
foreach (var a in item.GetTypes())
{
Console.WriteLine("-------这是一个类型----------------------------\n");
//获得类型全名
Console.WriteLine($"laojia:{a.FullName}");
//获得构造函数
foreach (var covt in a.GetConstructors())
{
Console.WriteLine($"{covt.Name}");
}
//获得方法
foreach (var method in a.GetMethods())
{
Console.WriteLine("\n\n");
Console.WriteLine($"方法名称:{method.Name}| 是不是:public{method.IsPublic} | 返回类型:{method.ReturnType}|方法参数如下:");
foreach (var canshu in method.GetParameters())
{
Console.WriteLine($"--参数:{canshu.Name} ,类型:{canshu.ParameterType},{canshu.DefaultValue}");
}
}
}
}
//实例化
Type mytpye = x.GetType("ChineseSplitter.DefaultSplitter");
var myobj = Activator.CreateInstance(mytpye);
// 此时 myobj虽然是一个类型,但是不能直接调用它的方法
//原因是 此时myobj仍然是一个object类型,还不是一个业务类
//在编译器看来这是无法通过编译的,也就是说运行时可以,编译器编译时不可以
//如何骗过编译器呢?可以使用下面的写法
//dynamic myobj = Activator.CreateInstance(mytpye);
}
2.2. 为什么用反射
可配置 可扩展
2.3. 利用泛型+反射+ADO实现ORM
版权声明: 原创保护,禁止转载。申请转载请联系:281773404@qq.com
陕公网安备 61011602000462号