接上篇更新:
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加载程序集
使用反射获取类型,创建对象
使用反射+简单工厂+配置文件获取类型,创建对象
反射选择不同构造函数创建对象
反射调用方法
反射调用普通方法
反射调用有参数方法
反射调用重载方法
反射调用私有方法
反射调用静态方法
反射调用泛型方法,泛型类
反射在普通类中调用泛型方法:
反射在泛型类中调用泛型方法:
另外一种:
反射操作类内属性