1.什么是反射
首先看一张流程图
 
 反射最最要的关注的地方 就在metadata 元数据
 元数据:描述DLL/EXE文件中有什么内容
点击生成之后,就会在文件中生成DLL/EXE文件
 
 点击打开文件夹
 
在bin/Debug 文件下就会生成该文件
 
exe/dll文件的区别:
 最主要的区别就是exe文件有入口
metadata(元数据):
 描述exe/dll文件的一个数据清单
反射(Reflection):就是来获取和操作metadata数据
【反射使用情况】
 1.更新程序时。(自己的DLL)
 2.使用别人的DLL文件(可以读取别人私有的变量和方法)
【反射是什么】:他就是一个操作metadata的一个类库(可以把反射当成一个小工具来读取或者操作元数据)类,方法,特性,属性字段。
 【为什么要通过反射间接的去操作】:因为我们需要动态,读取私有的对象
【哪些地方用到了】:asp.net ORM LOC AOP 几乎所有的框架都会使用到反射。
2.反射加载DLL文件
反射----反射工具—操作metadata(元数据)的工具
通过反射加载DLL文件
项目结构
 
MySqlHelper.cs
 
 Program.cs
 当前目录下(如果未在当前目录下,需要在引用中添加)或者用完全路径的方式。
 
方式一:dll文件名
 
 运行结果:
 
 获取方法:

 加载方式二:完 整的路径名
 
 运行结果:
 接口所以只有一个方法
 
【推荐】加载方式三:完全限定名
 (1)
 
 运行结果:
 
(2)加上路径(与loadFile相同)
 
 运行结果:
 
3.通过反射创建文件

 
 运行结果:

4.通过反射创建对象(带参数)


 运行结果:
 
传入字符型,一个参数
 
 运行结果:
 
两个参数
 
使用反射创建对象(私有构造函数)
普通类创建私有构造函数。
 
 此时对象是不能创建访问的
 
使用反射创建对象(私有构造函数)
 
 
运行结果:
 
修改:
 
 运行结果:

这个功能还用在单例模式之中(一个对象只能创建一次)使用反射破坏单例模式。
使用反射创建泛型
泛型类:
 
 直接new 对象会报错
 
反射方式:
 
 
通过反射调用方法
方式一:
 通过反射创建对象之后,调用方法。
 
方式二:直接通过反射调用方法
1.在ReflectionTest.cs 中添加一些方法
 
 (2)输出方法名和方法类型方法参数
 
输出结果:
 
(3)调用具体方法
 
 运行结果:
 
调用方法
 
 无参数重载方法
 
 静态方法调用,有参数
 
运行结果:
反射与MVC和AOP

通过反射调用私有方法
(1) 创造一个私有方法

 通过反射调用私有方法
 
运行结果:
 
通过反射调用泛型方法
创造一个泛型类带泛型方法,一个普通类带泛型方法。
 
通过反射普通类中的泛型方法
 
运行结果:
 
泛型类中的泛型方法调用

泛型类 注意添加占位符。
 
运行结果:
 
 简化
 方式二:链式编程
 
通过反射操作字段和属性等成员
1.创建实体类:
 
 2.输出属性和类型名称
 
 结果:
 
 
 
 方式二:
 
案例:实战
通过反射来完善SQLHelper类
获取反射类,将sql 改为动态赋值
 
调用泛型方法测试
 
 
 通过循环为每个属性赋值
 
 测试结果:
 



















