如何调用MethodInfo



我有一个MethodInfo对象,它定义了一个我想调用的方法。

除非我需要MethodInfo来自的object

伪代码:

void CallMethod(MethodInfo m)
{
    Object o = Activator.CreateInstance(m.ClassType);
    o.GetType().InvokeMember(m.Name, BindingFlags.InvokeMethod, null, o, null);
}

除了我不知道如何得到MethodInfo所属类的type

如何调用MethodInfo ?

MethodInfo不知道方法调用的目标- MethodInfo实际上属于类型,而不是一个特定的对象。

您需要有一个目标类型的实例来调用该方法。使用MethodInfo.DeclaringType(继承自MemberInfo.DeclaringType)可以很容易地找到该类型,但此时可能没有实例…

Reed指出,MemberInfo.ReflectedType可能比DeclaringType更合适,这取决于你打算如何使用它。

你还没有解释你在做什么,但它可能更适合采取Action委托而不是MethodInfo,如果你的设计的其余部分可以适当地改变。

这将根据您的MethodInfo的类型创建一个对象,并将在该新对象上为您调用它。

void CallMethod(MethodInfo m)
{
    Object o = Activator.CreateInstance(m.ReflectedType);
    m.Invoke(o, null);
}

您可以通过访问MethodInfo对象的DeclaringType属性来确定定义方法的类型。

我可能误解了这个问题,但听起来你在寻找一个委托而不是一个MethodInfo。

void Main()
{
    Object myObject = new ArrayList();
    MethodInfo methodInfo = myObject.GetType().GetMethod("Clear");
    Delegate method = Delegate.CreateDelegate(typeof(Action), myObject, methodInfo, true);
    CallMethod(method);
}
void CallMethod(Delegate method)
{
    method.DynamicInvoke();
}

显然在这种情况下(method = new Action(myObject.Clear))有一种更简单的方法来获取委托,但我要继续你需要使用MethodInfo对象的问题。

相关内容

  • 没有找到相关文章

最新更新