可以反编译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