C# 反射 入门到详解
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 改为动态赋值

调用泛型方法测试


通过循环为每个属性赋值

测试结果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!