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 改为动态赋值
在这里插入图片描述

调用泛型方法测试
在这里插入图片描述
在这里插入图片描述
通过循环为每个属性赋值
在这里插入图片描述
测试结果:
在这里插入图片描述

  • 19
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值