c# - Method.Invoke() 与 switch

标签 c#

我正在使用 RabbitMQ 在应用程序 (RPC) 之间进行通信,但我遇到了一个困境,不知道什么是调用我需要的方法的适当方法。我有一个类,其中包含一堆可用方法,我需要执行与 Rabbit 消息中携带的字符串相匹配的方法。

选项1: 使用所示方法HERE看起来更干净、更好看,但我想知道它是否有什么缺点。例如性能损失、不良实践等

var method = this.GetType().GetMethod(methodNameString);
method.Invoke(this, messagebody);

选项2: 使用开关

switch(methodNameString)
case: method1
    method1();
case: method2
    method2();
...

最佳答案

反射的事情没问题。反射比(常见)消息队列快得多。这极不可能成为性能瓶颈。

请记住,您允许消息生成者调用任何方法。如果生产者开始调用本应属于内部的内容,这可能是一个安全问题,或者是分层违规。

此外,系统的静态分析能力较差。例如,您无法通过执行“查找用法”来找出正在调用哪些方法。

我提到这一点是为了完整性。我认为这很可能是正确的方法。

关于c# - Method.Invoke() 与 switch,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39733627/

相关文章:

c# - Windows 环境下 LSA\LSI 的随机 SVD

c# - 为什么我在 C# 中异步发送邮件后没有收到所有邮件?

c# - LINQ to SQL .Join 语法

c# - Entity Framework (4.3) 寻找单数名称而不是复数名称(当实体名称以 "s"结尾时)

c# - 使用自定义解析器跳过空值

c# - String.Replace 未按预期工作

c# - 不再需要时自动关闭 TIBCO EMS 连接

c# - 在c#中休息调用post方法

c# - 如何从字节数组 c# MVC .NET Core 在 iframe 中显示 pdf

c# - 从第一个 WPF 应用程序中启动第二个实例