【发布时间】:2015-01-31 02:16:38
【问题描述】:
MethodInfo.Invoke()的Object obj参数的作用是什么?
调用方法或构造函数的对象
我不明白你如何调用一个方法“on”一个对象。我以为你只是从 Main() 或一个类中调用了一个方法,就是这样。
而且,我可以对这个参数使用任何类型的任何对象吗?
【问题讨论】:
标签: c# reflection invoke methodinfo
MethodInfo.Invoke()的Object obj参数的作用是什么?
调用方法或构造函数的对象
我不明白你如何调用一个方法“on”一个对象。我以为你只是从 Main() 或一个类中调用了一个方法,就是这样。
而且,我可以对这个参数使用任何类型的任何对象吗?
【问题讨论】:
标签: c# reflection invoke methodinfo
如果方法是static,您做只需调用该方法,在这种情况下,您将null 传递给Invoke 的参数。
对于实例方法,您在对象的实例上调用方法,而不仅仅是在“无”上。您通常调用该方法的对象实例就是您传递给Invoke 的对象实例。
例如,如果您有:
string s = "hi";
var s2 = s.Trim();
您可以通过以下方式在反射中建模:
string s = "hi";
MethodInfo trimMethod = GetTrimMethodInfo();
object s2 = trimMethod.Invoke(s);
【讨论】:
它是应该用来调用方法的对象的实例,例如:
private class MyClass
{
private string _name;
public MyClass(string name)
{
_name = name;
}
public void Foo()
{
Console.WriteLine(_name);
}
}
如果我们像这样调用 foo 方法:
Type magicType = typeof (MyClass);
MyClass c1 = new MyClass("1st class");
MyClass c2 = new MyClass("2nd class");
// Get the ItsMagic method and invoke with a parameter value of 100
MethodInfo magicMethod = magicType.GetMethod("Foo");
object magicValue = magicMethod.Invoke(c1, null); // Output is 1st class
如果我们用 c2 调用,我们会得到:
object magicValue = magicMethod.Invoke(c2, null); // Output is 2nd class
【讨论】: