反射的基本用法
反射的基本用法
反射提供了一种动态的方法,使程序能够灵活的扩展、配置,在各种框架中广泛运用
反射的核心优点是将原本写死在代码中方法功能抽取出来,使具体的执行仅由传递的字符串参数决定,以此做到无需修改程序本身,只通过传递字符串就能有不同的执行动作,至于字符串则可以通过各种形式提供,常见的行为有通过配置文件绑定不同的数据库提供程序、Web程序中通过URL选择执行不同的Controller/Action、数据库字段与类的映射等
示例程序代码:https://gitee.com/wujunchengman/doc-example/tree/master/ReflectionExample
因为涉及多个项目,还有引用关系,不适合直接贴代码,大家可以在码云上查看代码
反射的基本使用步骤
使用反射的基本步骤如下
加载程序集
// 加载路径下程序集 Assembly assembly = Assembly.LoadFile(file)
获取类型
// 获取程序集中定义的公共类型 Type[] types = assembly.GetExportedTypes(); // 返回可以转换为IChange的类型 Type type = types.FirstOrDefault(m => typeof(IChange).IsAssignableFrom(m));
实例化对象
// 实例化指定类型的对象 IChange changeValue = (IChange) Activator.CreateInstance(type);
使用对象
listChange[select].Change(test);
这里只是截取了关键的部分,所以不是很好看,还请大家到源代码中找对应位置
有关这个例子的讲解
目标需求:对字符串进行处理,并支持后续对功能进行扩展
从当前程序的plugs目录下读取dll,并将所有继承IChange接口的类添加到操作列表中,IChange接口定义了描述操作名的Name属性,用于执行操作的Change方法
然后用户根据操作列表的索引调用不同功能的Change方法
通过反射,程序中并没有定义具体使用哪一个Change,而是从plugs目录下动态读取,如果需要扩展,只需要编写一个继承IChange接口的类,将其编译为dll放入pulgs目录下即可(Assembly->Type:程序集->类)
Assembly的基本单位是程序集,不严谨的说是一个项目
Type的基本单位是类
在这个例子中,我写了ChangeToLower方法,大家可以自行扩展试一试
需要注意的是,在使用反射时,拷贝dll时需要将其依赖项一同拷贝,否则运行时会报错
如:在这个例子中,ChangeToLower依赖了IChange项目,所以运行时需要IChange.dll,正常情况下需要将ChangeToLower.dll和IChange.dll一同拷贝到plugs目录下。但是本例中存在特殊情况,即主程序也依赖于IChange,在编译时会自动将IChange.dll放至根目录下,所以不再需要拷贝IChange.dll至plugs
新手学习,写得不好,如果哪里有疑问可以给我留言或者发邮件wujunchengman@163.com
下一篇,有关反射的常用API
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从二进制到误差:逐行拆解C语言浮点运算中的4008175468544之谜
· .NET制作智能桌面机器人:结合BotSharp智能体框架开发语音交互
· 软件产品开发中常见的10个问题及处理方法
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· C# 13 中的新增功能实操
· Ollama本地部署大模型总结
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(4)
· langchain0.3教程:从0到1打造一个智能聊天机器人
· 2025成都.NET开发者Connect圆满结束