博客
关于我
隔空取物——reflection
阅读量:759 次
发布时间:2019-03-23

本文共 1860 字,大约阅读时间需要 6 分钟。

在C#中,通过反射操作已加载的程序集中的类型和方法,可以实现隔空操作。以下是关于使用反射从外部DLL获取信息并调用方法的步骤指南:

1. 创建项目

首先,创建一个新的C#项目,选择“空项目”模板,展开项目属性,确保“输出类型”设置为“类库”,这样可以避免生成控制台应用程序,防止缺少Main方法的问题。

2. 设置输出路径

在项目属性中,将“输出路径”设置为反射所需的目录,确保反射可以找到生成的DLL文件。

3. 预先准备DLL文件

确保测试反射的下层项目(TestDll)已在bin/Debug目录下正确生成TestDll.dll文件。如果遇到生成问题,检查项目输出路径是否正确。

4. 配置反射代码

在反射使用的程序中,使用以下代码加载DLL并获取所需的类型。确保在代码中正确引用System.Reflection命名空间,或者在代码开头添加using System.Reflection;。

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Reflection;namespace Reflection{    class Program    {        static void Main(string[] args)        {            // 加载所需的DLL文件            string assemblyPath = Environment.CurrentDirectory + "\\TestDll.dll";            Assembly loadedDll = Assembly.LoadFile(assemblyPath);            try            {                // 获取类                Type mathType = loadedDll.GetType("TestDll.Math");                // 获取方法                MethodInfo addMethod = mathType.GetMethod("Add");                // 调用方法并处理结果                object result = addMethod.Invoke(new object[] {10, 20});                Console.WriteLine("Method result: " + result);            }            catch (Exception ex)            {                Console.WriteLine("Exception: " + ex.Message);            }            finally            {                Console.WriteLine("Reflection completed.");            }        }    }}

5. 注意事项和误区

  • 命名空间配置:确保TestDll项目的命名空间设置正确,否则反射无法找到TestDll.Math类。可以在项目的Properties中找到AnnealingSupported的快捷键设置,确保全名的正确性。
  • 大写问题:类名TestDll.Math的首字母是否大写会影响反射结果。在代码中使用 GetType("TestDll.Math")而不是GetType("testDll.math")。
  • 权限检查:如果反射从本外部加载DLL,确保 Odibi集中的类和方法的访问权限正确。有时可能需要在代码中加入反射权限 року//"反射权限。

6. 测试反射结果

编写上述代码后,运行反射程序,查看输出结果是否正确调用了TestDll.Math.Add方法。如果出现错误,回头检查类名、命名空间和方法定义是否正确。

通过以上步骤,可以名 正确地反射外部类和方法,实现隔空取物的效果。记住,反射提供了一个灵活的解决方案,尤其是在需要动态获取类型信息或修改代码行为时非常有用。

转载地址:http://tpzzk.baihongyu.com/

你可能感兴趣的文章
NIFI大数据进阶_离线同步MySql数据到HDFS_01_实际操作---大数据之Nifi工作笔记0029
查看>>
NIFI大数据进阶_离线同步MySql数据到HDFS_02_实际操作_splitjson处理器_puthdfs处理器_querydatabasetable处理器---大数据之Nifi工作笔记0030
查看>>
NIFI大数据进阶_离线同步MySql数据到HDFS_说明操作步骤---大数据之Nifi工作笔记0028
查看>>
NIFI大数据进阶_连接与关系_设置数据流负载均衡_设置背压_设置展现弯曲_介绍以及实际操作---大数据之Nifi工作笔记0027
查看>>
NIFI数据库同步_多表_特定表同时同步_实际操作_MySqlToMysql_可推广到其他数据库_Postgresql_Hbase_SqlServer等----大数据之Nifi工作笔记0053
查看>>
NIFI汉化_替换logo_二次开发_Idea编译NIFI最新源码_详细过程记录_全解析_Maven编译NIFI避坑指南001---大数据之Nifi工作笔记0068
查看>>
NIFI汉化_替换logo_二次开发_Idea编译NIFI最新源码_详细过程记录_全解析_Maven编译NIFI避坑指南002---大数据之Nifi工作笔记0069
查看>>
NIFI集群_内存溢出_CPU占用100%修复_GC overhead limit exceeded_NIFI: out of memory error ---大数据之Nifi工作笔记0017
查看>>
NIFI集群_队列Queue中数据无法清空_清除队列数据报错_无法删除queue_解决_集群中机器交替重启删除---大数据之Nifi工作笔记0061
查看>>
NIH发布包含10600张CT图像数据库 为AI算法测试铺路
查看>>
Nim教程【十二】
查看>>
Nim游戏
查看>>
NIO ByteBuffer实现原理
查看>>
Nio ByteBuffer组件读写指针切换原理与常用方法
查看>>
NIO Selector实现原理
查看>>
nio 中channel和buffer的基本使用
查看>>
NIO三大组件基础知识
查看>>
NIO与零拷贝和AIO
查看>>
NIO同步网络编程
查看>>
NIO基于UDP协议的网络编程
查看>>