C#高级:利用反射让字符串决定调用哪个方法

一、反射的实现

cs 复制代码
using System;
using System.Reflection;
using System.Threading.Tasks;

public class Calculator
{
    public int Add(int a, int b)
    {
        return a + b;
    }

    public int Subtract(int a, int b)
    {
        return a - b;
    }

    public int Multiply(int a, int b)
    {
        return a * b;
    }

    public double Divide(int a, int b)
    {
        if (b == 0) throw new DivideByZeroException();
        return (double)a / b;
    }
}

class Program
{
    static void Main()
    {
        // 创建Calculator实例
        var calc = new Calculator();

        // 定义要调用的方法名和参数
        string methodName = "Multiply"; // 可以是"Subtract", "Multiply", "Divide"
        object[] parameters = new object[] { 5, 3 };
        // 获取Calculator类型
        Type type = calc.GetType();

        try
        {
            // 查找方法
            MethodInfo methodInfo = type.GetMethod(methodName);
            if (methodInfo != null)
            {
                // 调用方法并输出结果
                var result = methodInfo.Invoke(calc, parameters);
                Console.WriteLine($"方法{methodName}的结果是: {result}");
            }
            else
            {
                Console.WriteLine("未找到该方法");
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.ToString());
        }
    }
}

二、思考:让字符串决定方法的调用

|------|---------|-------|------------|
| 方法 | 优点 | 缺点 | 适用场景 |
| 反射 | 灵活,动态调用 | 慢,易出错 | 动态调用未知方法 |
| 委托字典 | 快,可控 | 需预定义 | 固定方法集合快速调用 |
| 工厂模式 | 可扩展,解耦 | 结构复杂 | 对象创建逻辑统一管理 |
| 表达式树 | 编译后快,灵活 | 复杂,难写 | 动态构建逻辑 |

相关推荐
小杨同学492 小时前
STM32 进阶封神之路(二十二):DMA 实战全攻略 ——ADC 采集 + 串口收发 + 内存复制(库函数 + 代码落地)
后端·单片机·嵌入式
天下无贼!2 小时前
【Python】2026版——FastAPI 框架快速搭建后端服务
开发语言·前端·后端·python·aigc·fastapi
大傻^2 小时前
Spring AI Alibaba Agent开发:基于ChatClient的智能体构建模式
java·数据库·人工智能·后端·spring·springaialibaba
大傻^2 小时前
Spring AI Alibaba ChatClient实战:流式输出与多轮对话管理
java·人工智能·后端·spring·springai·springaialibaba
程序员老乔3 小时前
Java 新纪元 — JDK 25 + Spring Boot 4 全栈实战(二):Valhalla落地,值类型如何让电商DTO内存占用暴跌
java·spring boot·c#
SuniaWang3 小时前
《Spring AI + 大模型全栈实战》学习手册系列· 专题二:《Milvus 向量数据库:从零开始搭建 RAG 系统的核心组件》
java·人工智能·分布式·后端·spring·架构·typescript
张小洛3 小时前
Spring 常用类深度剖析(工具篇 02):ReflectionUtils——优雅操作反射的利器
java·后端·spring·工具类·spring常用类
祝大家百事可乐3 小时前
嵌入式——02 数据结构
c++·c#·硬件工程
夕颜1113 小时前
Skill 与 MCP Function:傻傻分不清楚?
后端
古城小栈3 小时前
Go 底层代码的完整分类
开发语言·后端·golang