C# 反射,通过类名、方法名调用方法
在 C# 代码中,有些时候只知道方法的名字(string),需要调用该方法,那么就需要用到 C# 的反射机制。下面是一个简单的 demo。
1 using System; 2 using System.Reflection; 3 4 class Test 5 { 6 // 无参数,无返回值方法 7 public void Method() 8 { 9 Console.WriteLine("Method(无参数) 调用成功!"); 10 } 11 12 // 有参数,无返回值方法 13 public void Method(string str) 14 { 15 Console.WriteLine("Method(有参数) 调用成功!参数 :" + str); 16 } 17 18 // 有参数,有返回值方法 19 public string Method(string str1, string str2) 20 { 21 Console.WriteLine("Method(有参数,有返回值) 调用成功!参数 :" + str1 + ", " + str2); 22 string className = this.GetType().FullName; // 非静态方法获取类名 23 return className; 24 } 25 } 26 27 class Program 28 { 29 static void Main(string[] args) 30 { 31 string strClass = "Test"; // 命名空间+类名 32 string strMethod = "Method"; // 方法名 33 34 Type type; // 存储类 35 Object obj; // 存储类的实例 36 37 type = Type.GetType(strClass); // 通过类名获取同名类 38 obj = System.Activator.CreateInstance(type); // 创建实例 39 40 MethodInfo method = type.GetMethod(strMethod, new Type[] {}); // 获取方法信息 41 object[] parameters = null; 42 method.Invoke(obj, parameters); // 调用方法,参数为空 43 44 // 注意获取重载方法,需要指定参数类型 45 method = type.GetMethod(strMethod, new Type[] { typeof(string) }); // 获取方法信息 46 parameters = new object[] {"hello"}; 47 method.Invoke(obj, parameters); // 调用方法,有参数 48 49 method = type.GetMethod(strMethod, new Type[] { typeof(string), typeof(string) }); // 获取方法信息 50 parameters = new object[] { "hello", "你好" }; 51 string result = (string)method.Invoke(obj, parameters); // 调用方法,有参数,有返回值 52 Console.WriteLine("Method 返回值:" + result); // 输出返回值 53 54 // 获取静态方法类名 55 string className = MethodBase.GetCurrentMethod().ReflectedType.FullName; 56 Console.WriteLine("当前静态方法类名:" + className); 57 58 Console.ReadKey(); 59 } 60 }
需要注意的是,类名是命名空间+类名,不然会找不到类。
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· 一次Java后端服务间歇性响应慢的问题排查记录
· dotnet 源代码生成器分析器入门
· ASP.NET Core 模型验证消息的本地化新姿势
· 对象命名为何需要避免'-er'和'-or'后缀
· 开发的设计和重构,为开发效率服务
· 从零开始开发一个 MCP Server!
· Ai满嘴顺口溜,想考研?浪费我几个小时
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· .NET 原生驾驭 AI 新基建实战系列(一):向量数据库的应用与畅想