首页 > 编程语言 >C#高级–反射详解

C#高级–反射详解

时间:2024-04-09 10:57:33浏览次数:26  
标签:反射 exe Assembly C# dll 后缀 详解

一、反射是什么
1、C#编译运行过程
高级语言->编译->dll/exe文件->CLR/JIT->机器码

2、原理解析
metadata:元数据数据清单,记录了dll中包含了哪些东西,是一个描述。
IL:中间语言,编译把高级语言编译后得到的C#中最真实的语言状态,面向对象语言。

反射:来自于System.Reflection,是一个帮助类库,可以读取dll/exe中metadata,使用metadata创建对象。

Emit:一种反射技术,可以动态创建dll/exe。

反编译工具:ILSpy可以反编译dll/exe,查看对应的C#/IL代码。
二、反射创建对象
1、动态读取dll
LoadFrom:dll全名称,需要后缀
LoadFile:全路径,需要dll后缀
Load:dll名称不需要后缀
//1、动态读取dll的三种方式 //(1)LoadFrom:dll全名称,需要后缀 Assembly assembly = Assembly.LoadFrom("Business.DB.SqlServer.dll"); //(2)LoadFile:全路径,需要dll后缀 //Assembly assembly1 = Assembly.LoadFile(@"dll文件全路径"); //(3)Load:dll名称 不需要后缀 //Assembly assembly2 = Assembly.Load("Business.DB.SqlServer");
2、获取类型

点击查看代码
//2、获取某一个具体的类型,参数需要是类的全名称
Type type1 = assembly.GetType("Business.DB.SqlServer.SqlServerHelper");
**3、创建对象** 直接传类型 重载方法,传dll的全名称 返回值是object类型,不能直接调用方法

标签:反射,exe,Assembly,C#,dll,后缀,详解
From: https://www.cnblogs.com/xutongyang/p/18123393

相关文章

  • docker 常用命令
    whereisredis  查询redis.conf文件位置dockrun-it--name=myredisredis/bin/bashdockerrun-it--namemyredisredis-d-p6379:6379(启动方式一:docker默认启动redis)说明:-it:让容器的标准输入保持打开,并分配一个伪终端并绑定到容器的标准输入上-......
  • Elasticsearch 配置内置分析器(3)
    一.内置分析器(analyzer)内置分析器无需任何配置即可直接使用,也支持配置选项来更改其行为。下面示例,分别使用了自定义分析器与内置分析器PUTmy-index-000001{"settings":{"analysis":{"analyzer":{"std_english":{#自定义分析......
  • 在CentOS7上搭建hadoop集群
    hadoop官方下载地址https://hadoop.apache.org/releases.html用到的命令/root/hadoop-3.4.0/bin/hdfsnamenode-format,start-all.sh,stop-all.sh1.三台虚拟机分别设置静态ip2.设置免密登录(更改主机名、添加映射)3.配置hadoop(添加环境变量)core-site.xmlhdfs-site.......
  • rhcsa练习题容易错的地方
    rhcsa练习题容易错的地方yum仓库的配置注意配置yum仓库的时候,baseurl的路径不要写错dnfcleanall&&dnfmakecache//检查错误selinux放行端口的命令修改selinx的文件类型的命令修改了服务配置文件一定要重启服务配置时间同步时间同步的格式修改了配置文件要记......
  • Firefox火狐浏览器控制台,提示:已拦截跨源请求:同源策略禁止读取位于 http://127.0.0.1
    前言全局说明Firefox火狐浏览器控制台,提示:已拦截跨源请求一、火狐官方说明https://developer.mozilla.org/zh-CN/docs/Web/HTTP/CORS/Errors/CORSMissingAllowOrigin?utm_source=devtools&utm_medium=firefox-cors-errors&utm_campaign=default二、修改浏览器方法[原文......
  • 低功耗抗噪/高抗干扰,LCD显示驱动控制电路(IC)-VK2C23A/B LQFP48/64 替代市面上16C23,56*4
    VK2C23是一个点阵式存储映射的LCD驱动器,可支持最大224点(56SEGx4COM)或者最大416点(52SEGx8COM)的LCD屏。单片机可通过I2C接口配置显示参数和读写显示数据,也可通过指令进入省电模式。其高抗干扰,低功耗的特性适用于水电气表以及工控仪表类产品。L23+01特点:•工作电压2.4-5.5V•内......
  • 安装vscode
    1、浏览器搜索vscode,点击下方内容 2、点击右上方Download,弹出左下方内容点几向下的箭头弹出Otherdowloads,点击Otherdowloads3、点击以下圈红内容4、下载到本地后下一步下一步傻瓜式安装 ......
  • C++ Note 继承指向
    引自:https://blog.csdn.net/baidu_35679960/article/details/80812527引自:https://blog.csdn.net/qq_21989927/article/details/111226696引自:https://www.runoob.com/cplusplus/cpp-polymorphism.html 为什么父类指针可以指向子类实例:可以通俗的理解,子类可能含有一些父类没......
  • 为什么C++中不能将数组的内容拷贝给其他数组作为初始值,也不能用数组给其他数组赋值
    0前言来自primer的3.5部分以下写法是有问题的inta[]={0,1,2}inta2[]=a;//错误,不允许使用一个数组初始化另一个数组a2=a;//错误:不能把一个数组赋值给另一个数组有些编译器支持上面的操作,但是书上说这属于非标准功能,是编译器扩展1原因C++中的数组......
  • 聊聊ChatGLM3多用户并发API调用的问题
    转载请备注出处:https://www.cnblogs.com/zhiyong-ITNote背景目前在公司内部4张A10的GPU服务器上部署了ChatGLM3开源模型;然后部署了官方默认的web_demo、api_demo两种模式;重新设计了前端,支持H5和安卓两个客户端调用。但却发现了不能并发访问的问题。问题现象在安卓与H5同时调......