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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

DRF从入门到精通九(权限控制)

文章目录 一、权限控制模型1) ACL(Access Control List,访问控制列表)2) RBAC(Role-Based Access Control,基于角色的访问控制)应用前后台权限控制实操 3) ABAC(Attribute-Based Access Control,基于属性的访问控制) 一、权限控制模型 1) ACL(Access Control List,访问控制列表…

Transforer逐模块讲解

本文将按照transformer的结构图依次对各个模块进行讲解: 可以看一下模型的大致结构:主要有encode和decode两大部分组成,数据经过词embedding以及位置embedding得到encode的时输入数据 输入部分 embedding就是从原始数据中提取出单词或位置&…

大数据毕业设计:租房推荐系统 python 租房大数据 爬虫+可视化大屏 计算机毕业设计(附源码+文档)✅

毕业设计:2023-2024年计算机专业毕业设计选题汇总(建议收藏) 毕业设计:2023-2024年最新最全计算机专业毕设选题推荐汇总 🍅感兴趣的可以先收藏起来,点赞、关注不迷路,大家在毕设选题&#xff…

RTKLIB命令行指令介绍

1.manual_2.4.2原文: 1.1SYNOPSIS rnx2rtkp [option ...] file file [...] 1.2DESCRIPTION Read RINEX OBS/NAV/GNAV/HNAV/CLK, SP3, SBAS message log files and compute receiver (rover) positions and output position solutions. The first RINEX OBS fil…

60.网游逆向分析与插件开发-游戏增加自动化助手接口-游戏公告功能的逆向分析与测试

内容来源于:易道云信息技术研究院VIP课 上一个内容:文字资源读取类的C还原-CSDN博客 码云地址(master分支):https://gitee.com/dye_your_fingers/sro_-ex.git 码云版本号:878db7708de09b448010ef54526fe…

任务调度知识点

任务调度 定时任务调度 定时任务调度在项目开发中是一种不可缺少的需求,在Java中,实现任务调度有三种方式,分别是jdk自带的任务定时工具Timer、Spring task、第三方组件Quartz,接下来细聊这三种方式。 方式一、Timer(JDK自带任…

【KingbaseES】实现MySql函数Space

CREATE OR REPLACE FUNCTION SPACE(input_length integer) RETURNS text AS $$ BEGIN RETURN REPEAT( , input_length) AS SPACES; END; $$ LANGUAGE plpgsql;

使用valgrind 分析缓存命中

使用valgrind 分析缓存命中 char transpose_submit_desc[] "Transpose submission"; void transpose_submit(int M, int N, int A[N][M], int B[M][N]) { int i,j,tmp;int bsize 8;unsigned long long addrA;unsigned long long addrB;unsigned long long setin…

市场复盘总结 20240104

仅用于记录当天的市场情况,用于统计交易策略的适用情况,以便程序回测 短线核心:不参与任何级别的调整 昨日回顾: 方法一:指标选股 select * from dbo.ResultAll where 入选类型 like %指标选股% and 入选日期=20240104;方法二:趋势选股法 1、最低价持续3日上涨 2、均价…

node.js安装web3.js

第一步 node.js和npm 首先你需要有node.js和npm 可参考菜鸟教程 第二步 初始化nodejs项目 在项目文件夹打开命令行,输入 npm init -y此代码意为创建一个nodejs项目,默认配置。 然后安装web3.js,命令行输入安装命令 npm install web3npm会…

IO作业4.0

思维导图 创建出三个进程完成两个文件之间拷贝工作&#xff0c;子进程1拷贝前一半内容&#xff0c;子进程2拷贝后一半内容&#xff0c;父进程回收子进程的资源 #include <stdio.h> #include <string.h> #include <stdlib.h> #include <myhead.h> int …

服务器防护怎么做

随着网络攻击的日益猖獗&#xff0c;服务器安全已成为关注的焦点。如何有效防御各种网络威胁&#xff0c;确保数据安全与业务连续性&#xff0c;已成为一项迫切的需求。目前服务器所面临的主要威胁包括但不限于&#xff1a;DDoS攻击、SQL注入、跨站脚本攻击(XSS)、远程命令执行…

RTC第二个功能和应用程序

一般RTC模块设备管理时间日历、计时器等。从年到二。一些爱普生RTC 模块可以通过使用来自32768 Hz的分割频率来管理次第二功能。本文件 描述了RTC模块的三个具体的应用程序。&#xff08;表1&#xff09; 表1中的功能和产品 [FOUT函数应用程序] 图1描述了RTC模块&#xff0…

LinuxShell

一、 新建用户 在Linux上新建一个用户并赋予超级用户权限&#xff0c;建立家目录并设置默认shell为bash&#xff0c;并设置Linux在输入sudo密码时显示星号。请提交全部命令及输出截图&#xff08;表明完成需求即可&#xff09;。 1.sudo useradd -m ymhs(用户名) 增加用户 2.su…

基于EMD-SpEn(样本熵)联合小波阈值去噪

代码原理 基于 EMD-SpEn&#xff08;样本熵&#xff09;联合小波阈值去噪方法是一种用于信号降噪的信号处理方法&#xff0c;它结合了经验模态分解 (EMD)、样本熵 (SpEn) 和小波阈值处理技术。 首先&#xff0c;使用 EMD 将原始信号分解为一组称为经验模态函数 (IMFs) 的信号…

铁塔基站数字化管理监测解决方案

截至2023年10月&#xff0c;我国5G基站总数达321.5万个&#xff0c;占全国通信基站总数的28.1%。然而&#xff0c;随着5G基站数量的快速增长&#xff0c;基站的能耗问题也逐渐日益凸显&#xff0c;基站的用电给运营商带来了巨大的电费开支压力&#xff0c;降低5G基站的能耗成为…

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

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

解析诊断调查表中的各个表单

诊断调查表 1、系统级别规范2、ECU级别规范 1、系统级别规范 总体可分为5部分&#xff1a;文档相关、控制器ID和时间参数、DID资源区间、DTC资源区间和安全算法掩码。 Cover&#xff1a;项目名称、编制、校对、批准等等&#xff1b;ModificationRecord:版本更新&#xff0c;修…

阿里、字节等大厂系统测试方法的知识点总结,终于被我搞到手了

系统测试一般采取黑盒测试&#xff0c;系统测试的方法也比较多&#xff0c;其中常用的方法有&#xff1a;多任务测试、临界测试、中断测试、等价划分测试 多任务测试 多任务测试是指在非idle状态下&#xff0c;测试对象处于工作状态时&#xff0c;有新的事件发生&#xff0c;…

ruoyi-ai 基于ruoyi-plus实现AI聊天和绘画功能-后端

基于ruoyi-plus实现AI聊天和绘画功能-后端 本项目完全开源免费&#xff01; 后台管理界面使用elementUI服务端使用Java17SpringBoot3.X ruoyi-ai: 基于ruoyi-plus实现AI聊天和绘画功能-后端 实现功能 集成OpenAi API (gpt-4-vision-preview dall-e-3)接入文生图模型&#xf…