c#反射应用

接上篇更新:

1.什么是反射

反射:Reflection,System.Reflection命名空间,是微软提供的帮助类库

反射加载dll,读取程序集(Assembly),模块(Module),类(Class),方法(Method)

Dll包括:IL和metada

IL:中间语言,标准的面向对象语言,但是不太好阅读

Medata:元数据,数据清单,只是描述了类中有什么

反射破坏单例其实就是反射可以调用私有构造函数

c#反射应用_第1张图片

 

2.反射的优缺点

  优点:1.降低耦合性,提高自适应能力。[减少对象与对象之间的依赖,只需要知道类名(字符串),方法名(字符串),就可以调用]

        2.允许程序创建和控制任何类的对象,无需提前硬编码目标类[可以突破特定权限,可以做到普通方式无法做到的比如可以通过反射调用私有方法]

缺点:1.编写比较困难,代码量大,编写的时候容易出错

     2. 性能问题,性能损耗大,经过测试:发现反射确实性能损耗比较大 普通方式:60, 反射:5470,确实让我们无法接受,经过缓存优化之后发现,普通方式:42反射:80,对于性能损耗,大家要理性看待,因为执行的数量巨大,中间的这些性能损耗是可以忽略不计。

 

 

c#反射应用_第2张图片

 

 

 

 c#反射应用_第3张图片

 

 

反射的使用

 c#反射应用_第4张图片

 

 

使用LoadFile加载程序集

使用LoadFrom加载程序集

 

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

c#反射应用_第5张图片

 

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

 

 c#反射应用_第6张图片

 

 

 

 

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

c#反射应用_第7张图片

 

 c#反射应用_第8张图片

 

 反射调用方法

反射调用普通方法

c#反射应用_第9张图片

 

 c#反射应用_第10张图片

 

 反射调用有参数方法

c#反射应用_第11张图片

 

 

 反射调用重载方法

 

 c#反射应用_第12张图片

 

 反射调用私有方法

 

 c#反射应用_第13张图片

 

 反射调用静态方法

 

 

 c#反射应用_第14张图片

 

 反射调用泛型方法,泛型类

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

c#反射应用_第15张图片

 

 

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

 c#反射应用_第16张图片

 

 

 

另外一种:

 c#反射应用_第17张图片

 

 

 

 

反射操作类内属性

 c#反射应用_第18张图片

 

 

 

 c#反射应用_第19张图片

 

你可能感兴趣的:(c#反射应用)