[英]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.