接上篇更新:
1.什么是反射
反射:Reflection,System.Reflection命名空间,是微软提供的帮助类库
反射加载dll,读取程序集(Assembly),模块(Module),类(Class),方法(Method)
Dll包括:IL和metada
IL:中间语言,标准的面向对象语言,但是不太好阅读
Medata:元数据,数据清单,只是描述了类中有什么
反射破坏单例其实就是反射可以调用私有构造函数

2.反射的优缺点
优点:1.降低耦合性,提高自适应能力。[减少对象与对象之间的依赖,只需要知道类名(字符串),方法名(字符串),就可以调用]
2.允许程序创建和控制任何类的对象,无需提前硬编码目标类[可以突破特定权限,可以做到普通方式无法做到的比如可以通过反射调用私有方法]
缺点:1.编写比较困难,代码量大,编写的时候容易出错
2. 性能问题,性能损耗大,经过测试:发现反射确实性能损耗比较大 普通方式:60, 反射:5470,确实让我们无法接受,经过缓存优化之后发现,普通方式:42反射:80,对于性能损耗,大家要理性看待,因为执行的数量巨大,中间的这些性能损耗是可以忽略不计。




反射的使用

使用LoadFile加载程序集

使用LoadFrom加载程序集

使用反射获取类型,创建对象

使用反射+简单工厂+配置文件获取类型,创建对象



反射选择不同构造函数创建对象


反射调用方法
反射调用普通方法


反射调用有参数方法


反射调用重载方法


反射调用私有方法


反射调用静态方法


反射调用泛型方法,泛型类
反射在普通类中调用泛型方法:


反射在泛型类中调用泛型方法:


另外一种:


反射操作类内属性


