我有一个MethodInfo
对象,它定义了我想要调用的方法。
除非我需要object
来自的MethodInfo
。
伪码:
void CallMethod(MethodInfo m)
{
Object o = Activator.CreateInstance(m.ClassType);
o.GetType().InvokeMember(m.Name, BindingFlags.InvokeMethod, null, o, null);
}
除非我不知道如何获得type
所属的班级MethodInfo
。
如何拨打MethodInfo
?
答案 0 :(得分:5)
MethodInfo
知道方法调用的目标 - MethodInfo
实际上属于类型,而不是一个特定的对象
您需要有一个目标类型的实例来调用该方法。您可以使用MethodInfo.DeclaringType
(继承自MemberInfo.DeclaringType
)轻松找到类型,但此时您可能没有实例...
正如里德所指出的,MemberInfo.ReflectedType
可能比DeclaringType
更合适,具体取决于您计划如何使用它。
您尚未解释有关您正在做什么的任何内容,但如果您的设计的其余部分可以适当更改,那么采用Action
代理而不是MethodInfo
可能更合适
答案 1 :(得分:2)
这将从MethodInfo
所属的类型创建一个对象,并将在该新对象上为您调用它。
void CallMethod(MethodInfo m)
{
Object o = Activator.CreateInstance(m.ReflectedType);
m.Invoke(o, null);
}
答案 2 :(得分:0)
您可以通过访问MethodInfo对象的DeclaringType属性来确定定义方法的类型。
答案 3 :(得分:0)
我可能误解了这个问题,但听起来你是在委托而不是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对象的问题。