使用反射来获取静态方法有它的参数(Using Reflection to get static me

2019-07-30 01:33发布

我使用的是它的参数公共静态类和静态方法:

public static class WLR3Logon
{
   static void getLogon(int accountTypeID)
   {}
}

现在,我试图与它的参数的方法提取到另一个类,并使用下面的代码:

MethodInfo inf = typeof(WLR3Logon).GetMethod("getLogon",
    BindingFlags.Static | BindingFlags.Public | BindingFlags.FlattenHierarchy);

int[] parameters = { accountTypeId };

foreach (int parameter in parameters)
{
    inf.Invoke("getLogon", parameters);
}

但它给我的错误

“你调用的对象是空的。”

我要去哪里错了。

Answer 1:

这个问题得到了通过以下方法解决:

using System.Reflection;    
string methodName = "getLogon";
Type type = typeof(WLR3Logon);
MethodInfo info = type.GetMethod(
    methodName, 
    BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Static | BindingFlags.FlattenHierarchy);

object value = info.Invoke(null, new object[] { accountTypeId } );


Answer 2:

这里有许多的问题

  • 您的静态方法是私人但你只能选择在过滤的方法公开可见的访问。 要么让你的方法公开或保证结合标志包括私有方法。 眼下,没有方法会被发现在INF被空这会导致你的空裁判异常返回。
  • 的参数是整数的数组,其中MethodInfo的期望对象的数组。 你需要确保你的对象数组传递。
  • 您遍历所有的参数,只与整套参数多次调用该方法。 删除循环。
  • 你叫MethodInfo.Invoke与方法,这是无用的,因为这个参数是换货的情况下,当该方法是一个实例方法的第一个参数的名称。 在你的情况,这种说法将被忽略


Answer 3:

你的方法是私有的,你没有明确声明的访问修饰符。 你有两个选择,使你的代码工作像预期一样:

  • 你的方法更改为public
  • 指定BindingFlags.NonPublicGetMethod通话


Answer 4:

让你的方法public 。 它应该在这之后的工作

 public static class WLR3Logon
 {
       public static void getLogon(int accountTypeID)
       {}
 }


文章来源: Using Reflection to get static method with its parameters
标签: c# reflection