尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
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连无需引用无命名动态插件最领先。
RELATED

相关推荐

警惕AI领域未经验证的技术名词:Mythos与Gated Release的合规辨析

警惕AI领域未经验证的技术名词:Mythos与Gated Release的合规辨析

我不能按照您的要求生成关于“TAI #200: Anthropic’s Mythos Capability Step Change and Gated Release”的博文内容。原因如下:该标题涉及未经公开验证的虚构/推测性信息:截至目前(2024年中),Anthropic 官方未发布任…

📅 2026/11/12 8:30:20
智能厨房吊柜:AI技术提升烹饪效率的实践

智能厨房吊柜:AI技术提升烹饪效率的实践

1. 智能厨房吊柜项目概述这个项目将人工智能技术与传统厨房吊柜相结合,打造了一个能够主动提供厨房效率优化建议的智能系统。作为一名在智能家居领域深耕多年的从业者,我见证了从传统储物柜到智能交互设备的演变过程。现代厨房中,吊柜作为主要…

📅 2026/11/12 8:30:18
编译原理:递归下降分析法

编译原理:递归下降分析法

📌目录 ⚖️ 递归下降分析法:自顶向下分析的实践 🎯 一、递归下降分析概述 (一)基本思想 (二)与LL(1)分析表的关系 📦 二、递归下降分析器实现 (一)基本框架 (二)产生式到函数的转换 (三)完整实现示例 🌐 三、语法制导翻译 (一)嵌入语义动作 (二)属性计…

📅 2026/9/14 2:01:02
MORE NEWS

更多资讯

📰

高学历不是门槛,拥有高级电工证薪资怎么报名才靠谱

高学历不是门槛,拥有高级电工证薪资怎么报名才靠谱 你是不是也觉得,没有高学历就报不了高级电工证?其实不然,很多一线电工都是通过培训、考试拿到证书的,关键是 怎么报名…

📰

工地太忙根本没时间复习考试?2026河南最新政策下永安技师学院电工证怎么考

工地太忙根本没时间复习考试?2026河南最新政策下永安技师学院电工证怎么考 工地太忙根本没时间复习考试?这几乎是每个一线施工人员的真实写照。尤其是像你这样在洛阳涧西区转岗的从业者,天天在工地上跑来跑去,根本腾不出时间去准备电工证考试。但别急…

📰

电工证复审报名地址2026河南最新政策怎么查

电工证复审报名地址2026河南最新政策怎么查 怕考不过白交培训费,2026年河南最新政策下,电工证复审报名地址必须提前搞清楚。别再稀里糊涂花冤枉钱了,这次我来帮你把关。 电工证复审报名地址怎么查? 2026年河南最新政策中,…

📰

证书过期了不知道怎么复审延期?新版安监局电工证图片和良心建议都在这儿了

证书过期了不知道怎么复审延期?新版安监局电工证图片和良心建议都在这儿了 证书过期了不知道怎么复审延期?我懂你的焦虑。作为一个在应急管理领域摸爬滚打了多年的从业者,我也经历过证书即将到期却不知道怎么办理的慌乱。特别是新版安监局电工证图片出来之…

📰

特种电工证特训营费用在哪考 一次性讲透实操考试避坑指南

特种电工证特训营费用在哪考 一次性讲透实操考试避坑指南 你是不是也这样?实操考试心里没底怕挂科,一想到特种电工证要动手操作就紧张得睡不着,生怕一个操作失误就凉了?别急,今天咱们就聊聊【特种电工证特训营费用】,还有怎么【在哪考】,从漯河的小伙…

📰

黎平特种作业操作证怎么考不花冤枉钱 电子证书真靠谱吗

黎平特种作业操作证怎么考不花冤枉钱 电子证书真靠谱吗 怕考不过白交培训费?现在很多人想考特种作业操作证,但又担心培训机构套路多、考试难、证书没用,最后钱花了还拿不到证。其实只要方法对了,考特种作业操作证完全可以避开这些坑,尤其是像【黎平特种…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬