繁体   English   中英

Method.Invoke()与切换

[英]Method.Invoke() vs switch

我正在使用RabbitMQ在应用程序(RPC)之间进行通信,但对于调用我所需的方法的适当方式感到困惑。 我有一个包含一堆可用方法的类,我需要执行一个与Rabbit消息中携带的字符串匹配的类。

选项1:使用此处显示的方法更简洁,更美观,但我想知道它是否有任何不利之处。 例如性能损失,不当行为等

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

选项2:使用开关

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

您可以尝试使用Dictionary<string, Action>以便将所有可能的操作都保留在同一位置。 所有method1 .. methodN必须具有相同的格式:

 // method1..methodN can be called 
 Dictionary<String, Action> myMethods = new Dictionary<String, Action>() {
   {"method1", () => method1()},
   {"method1Synonym", () => method1()},  
   ...
   {"methodN", () => methodN()},
 };

 ...

 myMethods[methodNameString]();

反射的东西还可以。 反射比(普通)消息队列快得多。 这极不可能成为性能瓶颈。

请记住,您允许消息生产者调用任何方法。 这可能是出于安全考虑,如果生产者开始调用本来应该是内部的内容,则可能是分层违反。

而且,该系统的静态分析能力较差。 您无法通过执行“查找用法”来找出正在调用的方法。

我说的是完整性。 我认为这是最正确的方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM