首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何运行只知道她的全限定名的任何方法

如何运行只知道她的全限定名的任何方法
EN

Stack Overflow用户
提问于 2008-12-02 11:11:18
回答 4查看 837关注 0票数 0

我得到了一个方法的名称:"Garden.Plugins.Code.Beta.Business.CalculateRest“

如何运行它?我想到了这个奇特的基于反射的解决方案,比如RunMethod(string MethodName)

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2008-12-02 11:19:04

  • 通过在最后一个点上拆分来将其拆分为类型名称和方法名称
  • 使用Type.GetTypeAssembly.GetType获取类型。(除非您在参数中指定了程序集名称,否则Type.GetType只会查看当前正在执行的程序集和mscorlib。)
  • 使用Type.GetMethod从类型中获取方法。假设它是一个公共静态方法,通过调用MethodInfo.Invoke( BindingFlags.Public | BindingFlags.Static.
  • Execute,null)来指定该方法。(第一个null指定“无目标”-即它是一个静态方法;第二个null指定没有参数。)

如果你想调用一个实例方法或者一个接受参数的方法,你也需要弄清楚如何获取这些信息。

票数 3
EN

Stack Overflow用户

发布于 2008-12-02 12:12:58

它并不像处理文字类型名那样处理最后一个点左边的所有内容。如果你有一种类型的表单:

X.Y.Z.Type

那么X、Y和Z就不一定是名称空间了。它们也可以是类型本身,随后的部分可以是内部类:

代码语言:javascript
复制
class X
{
  class Y
  {
   // etc
  }
}

如果是这种情况,那么Type.GetType("X.YU")将不会解析为Y class.Instead,clr使用+符号分隔内部类,因此您实际上需要调用Type.GetType("X+Y");

如果你调用的方法是一个参数的方法,那么你需要做一些额外的工作。您需要将变量参数向上滚动到一个数组中,并传递此参数。您可以通过获取方法的ParameterInfo数据并查看最后一个参数是否附加了ParamArray属性来检查变量参数。

票数 2
EN

Stack Overflow用户

发布于 2008-12-02 11:14:03

会很慢的,相信我。所以不要把它放在一个关键的地方。

除此之外,你只能“手工”完成。开始枚举所有的名称空间、类等,直到找到所需的内容。我不认为有任何花哨的预制已经做到了这一点。(虽然我没有搜索过)

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

https://stackoverflow.com/questions/333655

复制
相关文章

相似问题

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