我有一个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对象的问题。