首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C#调用了一个我还不知道其名称的方法?倒影?

C#调用了一个我还不知道其名称的方法?倒影?
EN

Stack Overflow用户
提问于 2009-02-04 01:32:22
回答 4查看 1.2K关注 0票数 0

假设我有以下(相当常见的)模型

客户端调用web服务请求添加到服务器队列的->请求->服务器通过web服务调用第三方应用程序->第三方应用程序通知服务器事件处理已完成->服务器通知客户端请求已完成

我想知道的是“服务器通过web服务调用第三方应用程序”阶段。第三方应用程序公开在应用程序内部配置的web服务方法。例如,我可以在此应用程序中创建一个名为“MultiplyByTwo”的方法。然后我点击'GO‘,它会生成一个带有BeginCalculateMultiplyByTwo和EndMultiplyByTwo (使用IAsync模型)等方法的web服务。这太棒了。

现在,我正在创建一个queue对象,以便多个客户端可以请求此服务,并让服务器将它们排入队列,以便顺序执行。因此,这个队列对象将有一个像runNext()这样的方法,它将调用第三方应用程序上的web服务。只要我知道要调用的方法的名称(在本例中是BegingCaculateMultiplyByTwo),这就很好了,但是如果我想动态更改方法的名称呢?

因此,在第三方应用程序中,我更改了我的web服务方法,并将其命名为“MultiplyByThree”。这将使用可预测的命名方案公开BeginMultiplyByThree和其他一些方法。我如何设置我的类来动态调用一个我还不知道其名称的方法?

理想情况下,如果我可以在app.config文件中设置要调用的方法的名称,那就太好了。

我想这是我可以通过反思来实现的?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-02-04 01:44:42

你当然可以通过反射来做到这一点:

代码语言:javascript
复制
MyClass o = new MyClass();
MethodInfo method = o.GetType().GetMethod("UnknownMethod", 
    BindingFlags.Instance | BindingFlags.Public);
MyRetValue retValue = (MyRetValue)
    method.Invoke(o, new object[] { "Arg1", 2, "Arg3" });
票数 5
EN

Stack Overflow用户

发布于 2009-02-04 01:58:03

要扩展Robert的答案,您可以使用泛型和其他东西:

代码语言:javascript
复制
public TReturn DynamicInvoker<T, TReturn>(T obj, string methodName, param[] args){
  MethodInfo method = obj.GetType.GetMethod(methodName, BindingFlags.Instance | BindingFlags.Public);
  (TResult)method.Invoke(obj, args);
}

如果你想让它变得非常可怕,你可以将其作为对象的静态方法来实现。您还可以将BindingFlags作为方法参数传递。

票数 2
EN

Stack Overflow用户

发布于 2009-02-04 01:44:18

也许this会有所帮助--它是一个使用反射的动态web服务方法执行器。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/509759

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档