C# 反射实战:加载本地DLL、创建实例、读取属性、调用方法(完整版源码解析)

发布时间:2026/9/12 2:42:38

C# 反射实战:加载本地DLL、创建实例、读取属性、调用方法(完整版源码解析) 一、传统调用方式 VS 反射调用方式核心对比1. 传统类库调用硬编码、强依赖想要调用第三方类库的属性/方法必须三步到位缺一不可项目添加程序集引用代码引入命名空间new 类()实例化调用缺点耦合度极高类库代码改动、版本更新必须重新引用、重新编译主项目。2. 反射DLL调用动态、解耦无需添加项目引用、无需引入命名空间直接加载本地编译好的DLL文件。程序运行阶段动态解析DLL内部的类、属性、方法彻底解除硬编码依赖实现插件化、热更新架构。二、反射完整执行五步流程必背实操步骤定义DLL绝对路径拼接项目运行目录 存放DLL的文件夹路径Assembly.LoadFile()加载本地DLL读取完整程序集CreateInstance()根据「命名空间.类名」动态创建对象实例GetType()获取目标类的完整Type元数据GetMembers()遍历所有成员区分属性、方法分别读取、调用三、完整配套源码1. 被反射的类库源码ClassLibrary1.dll 源代码单独类库项目编译后生成 DLL 文件供主程序反射加载namespace ClassLibrary1 { /// summary /// 被反射调用的目标类 /// 包含带默认值属性、无返回值方法、带返回值方法 /// /summary public class Class1 { // 自动属性赋默认值 public string Name { get; set; } 梅西; public string ID { get; set; } 001; // 无返回值方法 public void Test1() { Console.WriteLine(Test1方法); } // 有返回值方法 public string Test2() { Console.WriteLine(Test2方法); return test2方法; } } }2. 主程序反射调用源码WinForm 入口不引用类库、不引入命名空间纯文件动态加载DLL执行using System; using System.IO; using System.Reflection; using System.Windows.Forms; namespace _8反射 { internal static class Program { /// summary /// 应用程序的主入口点。 /// [STAThread] static void Main() { #region 传统调用痛点说明 // 传统调用类库必须【添加引用引入命名空间实例化】 // 少一步直接编译报错高度耦合无法动态更新 #endregion // 查看当前主程序类的类型 Console.WriteLine(typeof(Program)); // 输出_8反射.Program // 反射核心五步 // 1. 拼接本地DLL绝对路径回退两级目录读取libs文件夹下dll string path Path.Combine(Environment.CurrentDirectory, ../../libs/ClassLibrary1.dll); // 2. 加载本地DLL程序集文件 Assembly sbly Assembly.LoadFile(path); // 3. 根据【命名空间.类名】动态创建实例等价 new Class1() object class1 sbly.CreateInstance(ClassLibrary1.Class1); // 4. 获取目标类的详细元数据Type Type type class1.GetType(); Console.WriteLine(type); // 输出ClassLibrary1.Class1 // 5. 获取当前类所有成员属性、方法、字段全部获取 MemberInfo[] arr type.GetMembers(); // 遍历所有成员区分属性、方法分别操作 foreach (MemberInfo item in arr) { // 处理属性读取属性默认值 if (item.MemberType MemberTypes.Property) { // 通用成员对象转为属性专属对象 PropertyInfo info item as PropertyInfo; // GetValue(实例)获取实例的属性值 Console.WriteLine(info.GetValue(class1) ); } // 处理方法匹配方法名并调用 if (item.MemberType MemberTypes.Method) { MethodInfo info item as MethodInfo; // 调用无参无返回值方法 Test1 if (info.Name Test1) { info.Invoke(class1, null); } // 调用无参有返回值方法 Test2 if (info.Name Test2) { // 接收方法返回值拓展知识点 object returnRes info.Invoke(class1, null); Console.WriteLine(Test2返回值 returnRes); } } } // WinForm 程序启动 Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form1()); } } }四、核心反射API逐行详解考试/面试必背1. Assembly 程序集核心类Assembly.LoadFile(文件路径)加载本地dll/exe文件读取外部程序集CreateInstance(命名空间.类名)无参构造动态创建对象返回object类型2. Type 元数据核心类对象.GetType()运行时获取实例的真实类型信息typeof(类名)编译期固定获取类型信息3. MemberInfo 所有成员父类属性、方法、字段、事件的统一父类通过MemberType区分成员类型MemberTypes.Property属性成员MemberTypes.Method方法成员4. PropertyInfo 属性专属操作GetValue(实例对象)读取实例当前属性值SetValue(实例对象, 值)给属性动态赋值拓展5. MethodInfo 方法专属操作Invoke(实例, 参数数组)执行目标方法实例方法第一个参数传对象实例静态方法第一个参数传 null无参数方法第二个参数传 null有返回值方法Invoke 返回 object 可接收结果五、程序运行输出结果_8反射.Program ClassLibrary1.Class1 梅西 001 Test1方法 Test2方法 Test2返回值test2方法六、反射核心优势面试高频彻底解耦无需项目引用、无需命名空间脱离硬编码依赖完全动态运行时加载DLL、动态创建对象、动态调用成员插件架构替换外置DLL即可更新功能无需修改主程序、无需重新编译支持热更新常用于框架、中间件、插件系统、动态权限七、高频易错点避坑重点DLL路径错误必须保证路径指向编译后的dll否则加载异常类全名必须完整CreateInstance 必须传命名空间.类名仅写类名报错类型强转必须精准MemberInfo 必须转为 PropertyInfo/MethodInfo 才能执行专属操作返回值别忽略有返回值的方法Invoke 结果可以接收使用区分静态/实例方法实例方法Invoke必须传对象实例八、反射实操口诀路径找准Load文件程序集创实例先Type获取元数据全成员遍历分两边属性取值GetValue方法执行Invoke连无需引用无命名动态插件最领先。
延伸阅读

更多相关文章

2026/9/6 12:12:29

TVA具身智能的概念、架构与应用(15)

前沿技术探索:AI智能体视觉(TVA,Transformer-based Vision Agent)是依托Transformer架构与“因式智能体”理论所构建的颠覆性工业视觉技术,是集深度强化学习(DRL)、卷积神经网络(CNN…

2026/9/10 8:07:43

安卓新奇玩机工具全攻略____几款集合高通读写分区 免授权刷写工具操作解析【二十五】

高通机型只要拥有引导文件即可进行分区读写操作。官方推荐的常用工具是 QPST,但其操作流程相对繁琐且界面不够直观。本文将解析几款集成工具,它们整合了高通平台通过引导文件实现分区读写、备份、单分区刷写、槽位切换等多种功能。此外,这些工具还内置了对部分新款机型(如 …

2026/9/11 1:20:47

QSFP-DD MSA Hardware协议解读(二)

文章目录1 低速信号概览2 各低速信号详解2.1 ModSelL:模块选择2.2 ResetL:复位2.3 LPMode/TxDis:低功耗模式/发送禁用2.3.1 双重身份2.3.2 工作原理2.3.3 实际行为逻辑(结合电平高低)2.3.4 特殊情况与提醒2.4 ModPresL…

2026/9/12 4:34:47

Java StringEntry接口设计与实现最佳实践

1. StringEntry接口的设计背景与核心诉求在软件开发中,数据结构的抽象与封装一直是提升代码复用性和可维护性的关键手段。StringEntry这个接口概念的提出,本质上是为了解决字符串类型数据在多种场景下的统一操作问题。我最近在重构一个历史遗留系统时&am…

2026/9/12 4:34:47

海光DCU接入K8s:整卡、共享与vDCU调度实战解析

如果你接过“把一批海光 DCU 节点接进 Kubernetes,再让上层 AI 平台和 DeepSeek 推理服务跑起来”这种需求,第一反应大概率是:装个驱动、部署个 Device Plugin 不就行了?真动手之后才会发现,整卡、共享、vDCU 虚拟化是…

2026/9/12 4:34:47

2026年软考高级系统分析师论文备考指南与高分技巧

1. 2026年软考高级系统分析师论文备考指南作为国内IT领域最具含金量的职业资格认证之一,软考高级系统分析师(以下简称"系分")的论文环节一直是考生面临的"拦路虎"。不同于选择题和案例分析,论文写作不仅需要扎…

2026/9/12 4:34:47

Linux下TFTP服务器安装配置与优化指南

1. Linux下TFTP服务器的安装与配置指南在嵌入式开发和网络设备维护领域,TFTP(Trivial File Transfer Protocol)作为轻量级文件传输协议,因其实现简单、资源占用少的特点,成为固件更新、配置文件传输的标配工具。不同于…

2026/9/12 4:34:47

ThinkPHP在线客服系统实战:多坐席分配与部署调优全解析

简介:基于ThinkPHP框架打造的运营级在线客服系统源码,面向需要快速搭建网页客服、多坐席协作与智能客服平台的开发者和企业技术团队,可直接用于电商、官网、SaaS产品等场景的客户服务模块。系统包含实时聊天、坐席状态管理、访客分配、智能自…

2026/9/12 4:29:47

PyMC 采样与推断方法实战指南:MCMC、变分推断与诊断调优

PyMC 采样与推断方法实战指南:MCMC、变分推断与诊断调优 【免费下载链接】scientific-agent-skills Turn any AI agent into an AI Scientist. The #1 Agent Skills library for science, used by 190,000 scientists worldwide. 165 ready-to-use validated skills…

2026/9/12 2:05:33

超人会飞不算本事:系统稳定依赖清晰规则与边界设计

开头先不绕弯子。“#斯坦李吐槽dc 所以超人是无缘无故会飞的嘛哈哈哈哈哈哈哈锤哥真是技术人才啊!#雷神 #复联”这类调侃式短标题,第一波冲击力在于它把两个宇宙的角色塞进同一个吐槽箱里,但细想一下就能发现,它真正碰到的根本不是…

2026/9/12 3:55:12

超人VS蜘蛛侠:拆解超级IP的影响力与传播方法论

把“蜘蛛侠 vs 超人”放在 CSDN 上聊,可能很多人第一反应是走错片场了。但如果把这两个角色看成“两个持续运营了 80 多年的文化产品”,你会发现,这场比较本质上是两个不同 IP 策略的长期结果对比:超人赢在定义了整个超级英雄题材…

2026/9/9 16:31:09

基于CNN的调制信号识别:MATLAB实现时频图分类实战

简介:本资源是一套面向通信工程与信号处理方向学习者、研究者的深度学习实践方案,聚焦调制信号自动检测与识别这一典型无线通信任务,解决传统方法依赖人工特征、低信噪比下性能下降等痛点。压缩包共12个文件(10.73MB)&…

2026/9/12 0:04:17

MATLAB仿生优化框架:长鼻浣熊算法多策略融合实现

简介:本资源是一份面向智能优化算法研究者与MATLAB初学者的仿生智能算法实践代码包,聚焦于长鼻浣熊优化算法(COA)的多策略改进与性能验证。针对传统COA易陷局部最优、收敛精度不足等问题,作者融合Circle映射初始化提升…

2026/9/12 0:04:17

【JAVA毕设源码分享】基于 JavaWeb 的校园一卡通管理系统的设计与实现 基于 JavaWeb 的校园卡业务管理系统(程序+文档+代码讲解+一条龙定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/9/12 0:04:17

【JAVA毕设源码分享】基于 Java 的图书馆借阅管理平台的搭建与实现 基于 Java 的图书馆综合管理系统(程序+文档+代码讲解+一条龙定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/9/10 12:32:02

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/10 15:19:50

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/10 15:49:53

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码