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