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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/321267.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Flappy Bird QDN PyTorch博客 - 代码解读

Flappy Bird QDN PyTorch博客 - 代码解读 介绍环境配置项目目录结构QDN算法重要函数解读preprocess(observation)DeepNetWork(nn.Module)BirdDQN类主程序部分 介绍 在本博客中,我们将介绍如何使用QDN(Quantile Dueling Network)算法&#xf…

快速批量运行命令

Ansible 是 redhat 提供的自动化运维工具,它是 Python编写,可以通过 pip 安装。 pip install ansible 它通过任务(task)、角色(role)、剧本(playbook) 组织工作项目,适用于批量化系统配置、软件部署等需要复杂操作的工作。 但对于批量运行命…

(Java企业 / 公司项目)Nacos的怎么搭建多环境配置?(含相关面试题)(二)

上一篇讲了一个单体服务中配置,传统的Nacos配置但是在微服务架构当中肯定都是多环境下配置,比如生产环境,dev测试环境等等。 第一种方式模拟开始: 首先展示在生产环境中nacos如何配置,在模块下新建一个配置文件&…

Vue2.Hello World

步骤: 准备容器引包(开发版本/生产版本)创建实例new Vue()添加配置项 el指定挂载点data提供数据 准备容器 就是新建一个div标签 引包 vue2版本中文文档:https://v2.cn.vuejs.org/v2/guide/ 尝试 Vue.js 最简单的方法是使用 …

福利来袭,.NET Core开发5大案例,30w字PDF文档大放送!!!

千里之行,始于足下,若想提高软件编程能力,最最重要的是实践,所谓纸上得来终觉浅,绝知此事要躬行。根据相关【艾宾浩斯遗忘曲线】研究表明,如果不动手实践,记住的东西会很快忘记。 为了便于大家查…

教程:Centos6迁移旧虚拟机文件后的网络配置教程,完美解决虚拟机移动后的网络ip变化问题

博主在工作后,想整整之前大学的虚拟机集群,因此特意从之前的旧电脑把虚拟机文件给拷贝了过来,在导入到vm-workstation,顺便能启动虚拟机后,发现之前的静态ip已经跟现在的宿主机网络不一样。想着重新配置,但…

深度学习课程实验二深层神经网络搭建及优化

一、 实验目的 1、学会训练和搭建深层神经网络; 2、掌握超参数调试正则化及优化。 二、 实验步骤 初始化 1、导入所需要的库 2、搭建神经网络模型 3、零初始化 4、随机初始化 5、He初始化 6、总结三种不同类型的初始化 正则化 1、导入所需要的库 2、使用非正则化…

WEB 3D技术 three.js 法向量演示性讲解

本文 我们来说法向 法向 又叫 法向量 就是 我们一个三维物体 顶点垂直于面 的方向 向量 他的作用 用来做光反射 根据光照的方向 根据面进行反射 我们上文写的这个代码 import ./style.css import * as THREE from "three"; import { OrbitControls } from "…

基于SSM的新闻网站

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:Vue 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目:是 目录…

指令周期流程图相关题目

已知CPU结构如下图所示,其中包括一个累加器AC、一个状态寄存器和其他几个寄存器。各部分之间的连线表示数据通路,箭头表示信息传递方向。试完成以下工作:①写出图中四个寄存器A、B、C、D的名称和作用;②简述完成指令ADD Y的数据通…

Python 标准库中的 csv 包

0. Abstract 官方文档很罗嗦,长篇大论例子少。本文将举例说明 csv 包的用法,然后补充一些必要的说明。 1.0 CSV 文件 CSV(Comma-Separated Values,逗号分隔值)文件是一种常见的以纯文本形式存储数据的文件格式。它使用逗号作为字段之间的分隔符&#…

【unity】基于Obi的绳长动态修改(ObiRopeCursor)

文章目录 一、在运行时改变绳子长度:ObiRopeCursor1.1 Cursor Mu(光标μ)1.2 Source Mu(源μ)1.3 Direction(方向) 一、在运行时改变绳子长度:ObiRopeCursor Obi提供了一个非常通用的组件来在运行时修改绳…